Compare commits

...

2 commits

Author SHA1 Message Date
5a3525a9ce Add timing of complete program 2024-11-16 16:34:13 +01:00
67fcde4309 Get nodes with max degree first 2024-11-16 15:46:56 +01:00
6 changed files with 77 additions and 74 deletions

View file

@ -163,6 +163,7 @@ struct Args {
} }
fn main() { fn main() {
let total_start = std::time::Instant::now();
let args = Args::parse(); let args = Args::parse();
let graph = parse(args.filename); let graph = parse(args.filename);
@ -207,4 +208,5 @@ fn main() {
println!("{}", n + 1); println!("{}", n + 1);
} }
} }
eprintln!("Total time: {:?}", total_start.elapsed());
} }

View file

@ -77,10 +77,11 @@ impl Graph {
self.vertices[(self.vertices.len() - n)..].iter() self.vertices[(self.vertices.len() - n)..].iter()
} }
fn get_vertex_with_degree_greater(&self, min_degree: u16) -> Option<u16> { fn get_vertex_with_max_degree_greater_equal(&self, min_degree: u16) -> Option<u16> {
self.vertices self.vertices
.iter() .iter()
.find(|&v| v.edges.len() >= min_degree as usize) .max_by_key(|&v| v.edges.len())
.filter(|&v| v.edges.len() >= min_degree as usize)
.map(|v| v.name) .map(|v| v.name)
} }
@ -107,12 +108,12 @@ impl Graph {
} }
pub fn binary_vertex(graph: &mut Graph, k: u16) -> Option<Vec<u16>> { pub fn binary_vertex(graph: &mut Graph, k: u16) -> Option<Vec<u16>> {
let vertex = match graph.get_vertex_with_degree_greater(2) { let vertex = match graph.get_vertex_with_max_degree_greater_equal(2) {
Some(vertex) => vertex, Some(vertex) => vertex,
None => { None => {
return { return {
let mut c = 0; let mut c = 0;
while let Some(vertex) = graph.get_vertex_with_degree_greater(1) { while let Some(vertex) = graph.get_vertex_with_max_degree_greater_equal(1) {
graph.remove_vertex(vertex); graph.remove_vertex(vertex);
c += 1; c += 1;
} }
@ -195,7 +196,7 @@ pub fn reduction(graph: &mut Graph, k: u16) -> Option<Vec<u16>> {
} }
r r
} else if let Some(vertex) = graph.get_vertex_with_degree_greater(2) { } else if let Some(vertex) = graph.get_vertex_with_max_degree_greater_equal(2) {
graph.remove_vertex(vertex); graph.remove_vertex(vertex);
match reduction(graph, k - 1) { match reduction(graph, k - 1) {
@ -347,7 +348,7 @@ pub fn reduction2(graph: &mut Graph, k: u16) -> Option<Vec<u16>> {
} }
} }
} }
} else if let Some(vertex) = graph.get_vertex_with_degree_greater(3) { } else if let Some(vertex) = graph.get_vertex_with_max_degree_greater_equal(3) {
if k < 1 { if k < 1 {
return None; return None;
} }

View file

@ -1,31 +1,31 @@
35 35
1 1
2
3 3
4
5 5
7 6
8 8
11 9
12 10
13 13
14 14
15
16
17 17
18
20
21
22 22
23
24 24
27 25
28
29 29
31
32
33 33
34 35
36 36
37
38 38
39
40 40
41 41
42
43 43
44 44
45 45

View file

@ -13,7 +13,6 @@
22 22
23 23
24 24
25
26 26
30 30
32 32
@ -24,6 +23,7 @@
37 37
38 38
39 39
40
41 41
42 42
43 43
@ -34,9 +34,9 @@
52 52
53 53
54 54
55
56 56
58 58
60
63 63
65 65
67 67
@ -50,16 +50,16 @@
81 81
82 82
83 83
84
86 86
87 87
89 89
90 90
91 91
93 93
94
95 95
97 97
99 98
101 101
104 104
105 105

View file

@ -5,44 +5,40 @@
5 5
6 6
7 7
8
9 9
10 10
11
12 12
13 14
15 15
17
18 18
19 19
20 20
21 21
22 22
23
24
25 25
26 26
28 27
29 29
30 30
31 31
32 33
34 34
35
36 36
38
39 39
40 40
41 41
43
44 44
45 45
46
47 47
49 48
51
52 52
53
54 54
55 55
56 56
57
59 59
60 60
61 61
@ -51,11 +47,14 @@
65 65
66 66
67 67
68
69 69
72 72
73 74
75
76 76
77 78
79
80 80
81 81
82 82
@ -63,11 +62,12 @@
84 84
85 85
86 86
91 87
88
89
90
92
93 93
94
95 95
96
97
98
99
100 100

View file

@ -1,17 +1,19 @@
112 112
1 3
4 4
5 5
6 6
8 8
12 12
13 13
14
15 15
16
17 17
20 20
21 21
22
23 23
25
27 27
28 28
30 30
@ -19,30 +21,34 @@
32 32
33 33
35 35
36
37 37
38 39
40 40
43 41
42
44
45 45
49
50 50
51 51
52 52
53
54 54
58 55
59 56
57
60 60
62
63 63
64 64
65
66 66
68
70 70
71 71
72
73 73
74 74
75 75
76 77
78 78
79 79
80 80
@ -51,63 +57,57 @@
84 84
86 86
87 87
90 88
89
92
93 93
94 94
96 96
97
98 98
100 100
102 104
103
105 105
106 106
107 107
108 108
109 109
110 110
111
112
113 113
114
115 115
116 118
119 119
121 120
122 122
123 123
124 124
125 125
126
127 127
128
130
131 131
133 132
134
136
138 138
139 142
141
143 143
144 144
145
146 146
147 147
148 148
149
150 150
152 151
153 153
154
155 155
156
157 157
158
159 159
160 162
163
164
166
168 168
169 169
170
172 172
173 173
174 174
175
176 176
177