From 53f8c2034c8c3d5985651a83a40e474ca29393d6 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Thu, 14 Nov 2024 21:52:45 +0100 Subject: [PATCH 1/2] Fix bug and add reverse search for minimum --- vertex_cover/src/main.rs | 17 +++++++++++++++++ vertex_cover/src/owned.rs | 8 +++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/vertex_cover/src/main.rs b/vertex_cover/src/main.rs index fc75d3c..42b2e7f 100644 --- a/vertex_cover/src/main.rs +++ b/vertex_cover/src/main.rs @@ -155,8 +155,11 @@ enum Method { #[derive(Debug, Parser)] struct Args { filename: PathBuf, + #[clap(default_value = "reduction2")] method: Method, k: Option, + #[clap(short, long)] + reverse: bool, } fn main() { @@ -169,6 +172,20 @@ fn main() { let r = vertex_cover(&graph, k, args.method); eprintln!("{}: {:?}", k, start.elapsed()); r + } else if args.reverse { + let mut k = graph.num_vertices(); + let mut last_solution = None; + loop { + let start = std::time::Instant::now(); + let r = vertex_cover(&graph, k, args.method); + eprintln!("{}: {:?}", k, start.elapsed()); + if let Some(r) = r { + k = r.len() as u16 - 1; + last_solution = Some(r); + } else { + break last_solution; + }; + } } else { let mut k = 0; loop { diff --git a/vertex_cover/src/owned.rs b/vertex_cover/src/owned.rs index 1171e0c..3dc3d31 100644 --- a/vertex_cover/src/owned.rs +++ b/vertex_cover/src/owned.rs @@ -237,6 +237,8 @@ pub fn reduction2(graph: &mut Graph, k: u16) -> Option> { let _ = graph.reinsert_vertices(1); r + } else if graph.is_empty() { + Some(Vec::new()) } else if k == 0 { if graph.is_empty() { Some(Vec::new()) @@ -343,6 +345,10 @@ pub fn reduction2(graph: &mut Graph, k: u16) -> Option> { } } } else if let Some(vertex) = graph.get_vertex_with_degree_greater(3) { + if k < 1 { + return None; + } + graph.remove_vertex(vertex); match reduction2(graph, k - 1) { @@ -374,6 +380,6 @@ pub fn reduction2(graph: &mut Graph, k: u16) -> Option> { } } } else { - unreachable!() + unreachable!("{k}") } } From 4d67a5480f6009c8d951a7277875f7f7eb0b2f25 Mon Sep 17 00:00:00 2001 From: hal8174 Date: Thu, 14 Nov 2024 21:52:57 +0100 Subject: [PATCH 2/2] Add verzweigungsvectoren --- verzweigungsvectoren/main.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 verzweigungsvectoren/main.py diff --git a/verzweigungsvectoren/main.py b/verzweigungsvectoren/main.py new file mode 100755 index 0000000..4c7a378 --- /dev/null +++ b/verzweigungsvectoren/main.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +from numpy import roots,isreal +from itertools import combinations_with_replacement + + +solutions = [] + +s = [1, 2, 3, 4, 5, 6, 7, 8, 9] + +for i in range(2, 7): + + for j in combinations_with_replacement(s, i): + + p = [-j.count(k) for k in range(max(j) + 1)] + p[0] = 1 + + + r = [float(k) for k in roots(p) if isreal(k) and k > 0.0] + # print(j, max(j), p, r) + + solutions.append((j, r[0])) + + + +solutions.sort(key=lambda e: e[1]) + +for s in solutions: + + print(f"{s[1]}\t{s[0]}") +