diff options
| author | Andrew Guschin <guschin@altlinux.org> | 2024-10-10 20:06:03 +0400 |
|---|---|---|
| committer | Andrew Guschin <guschin@altlinux.org> | 2024-10-11 12:53:37 +0400 |
| commit | 8f1208d48fbc3c7e6de7870110fb981e9a467aa4 (patch) | |
| tree | 5172b0bdc193bbc06b6115aaf5e5df5fe35e24eb /graph-checker/src | |
| parent | a26981a2669555a61b8d986a888708f72d986100 (diff) | |
optimize a bit
Diffstat (limited to 'graph-checker/src')
| -rw-r--r-- | graph-checker/src/compute.rs | 35 | ||||
| -rw-r--r-- | graph-checker/src/main.rs | 2 |
2 files changed, 24 insertions, 13 deletions
diff --git a/graph-checker/src/compute.rs b/graph-checker/src/compute.rs index e166e14..0beaad9 100644 --- a/graph-checker/src/compute.rs +++ b/graph-checker/src/compute.rs @@ -7,17 +7,23 @@ pub async fn dominating_numbers( let mut independent_dominating = None; let mut geodesic_sets = Vec::new(); - let mut min_size = g.size as u32; + let mut min_size = g.size; for cs in g.cutsets() { - let dom = cs.is_dominating_in(&g); - let idp = cs.graph.is_independent(); - if independent_dominating.is_none() && dom && idp { - independent_dominating = Some(cs.cardinality as u32); + if independent_dominating.is_none() { + let dom = cs.is_dominating_in(&g); + let idp = cs.graph.is_independent(); + if dom && idp { + independent_dominating = Some(cs.cardinality as u32); + } + } + + if cs.cardinality > min_size { + continue; } let mut visited = vec![0; g.size]; - for a in 0..cs.graph.size { + 'outer: for a in 0..cs.graph.size { if cs.vertices[a] == 0 { continue; } @@ -32,20 +38,22 @@ pub async fn dominating_numbers( } } } + if visited.iter().sum::<usize>() == g.size { + break 'outer; + } } } if visited.iter().sum::<usize>() == g.size { geodesic_sets.push(cs.vertices.clone()); - let tmp = cs.vertices.into_iter().sum::<u32>(); - if tmp < min_size { - min_size = tmp; + if cs.cardinality < min_size { + min_size = cs.cardinality; } } } let geodesic_sets: Vec<_> = geodesic_sets .into_iter() - .filter(|s| s.iter().sum::<u32>() == min_size) + .filter(|s| s.iter().sum::<u32>() == min_size as u32) .collect(); let mut fg = None; @@ -72,10 +80,13 @@ pub async fn dominating_numbers( fg = Some(new_fg); } } + if let Some(fg) = fg { + if fg == 1 { + break; + } + } } } - // println!("{line} {independent_dominating:?} {fg:?}"); - (line, independent_dominating, fg) } diff --git a/graph-checker/src/main.rs b/graph-checker/src/main.rs index f38724c..25a7768 100644 --- a/graph-checker/src/main.rs +++ b/graph-checker/src/main.rs @@ -31,7 +31,7 @@ async fn main() -> Result<(), sqlx::Error> { println!("Started"); let start = Instant::now(); - const BATCH_SIZE: usize = 1000; + const BATCH_SIZE: usize = 10000; let mut count = 0; loop { let graphs = gi.take(BATCH_SIZE); |