diff --git a/README.md b/README.md index ae0409d..d32750d 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,5 @@ by Tim Roughgarden from the Stanford University. I implemented the assignments in Rust to learn more about the language. I took the class to refresh my knowledge about algorithms. +[Certificate](https://coursera.org/share/8af17a8221800221c68a8d7bfb69fd88) + diff --git a/src/main.rs b/src/main.rs index ca93a77..c96c5bd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -170,6 +170,7 @@ fn c4a3() { let g = util::read_tsp_graph("data/c4a3_tsp.txt").unwrap(); let r = tsp_heuristic(g); println!("r = {}", r); + // r = 1203406 } #[allow(dead_code)] @@ -180,6 +181,7 @@ fn c4a4() { let r = sat2(s); println!("{} = {}", f, r); } + // r = 101100 } fn main() { diff --git a/src/papadimitriou.rs b/src/papadimitriou.rs index b7843df..a4cc2f7 100644 --- a/src/papadimitriou.rs +++ b/src/papadimitriou.rs @@ -25,13 +25,14 @@ fn get_random_assignment(n_clauses: usize) -> Vec { pub fn sat2(s: Sat2) -> bool { let n_clauses: f64 = s.n_clauses as f64; - let outer_repeats: usize = n_clauses.log(2.0).ceil() as usize; - let inner_repeats: usize = 2 * s.n_clauses * s.n_clauses; + let outer_repeats: usize = n_clauses.log(2.0).ceil() as usize; + let inner_repeats: usize = 2 * s.n_clauses; let mut rng = rand::thread_rng(); for _ in 0..outer_repeats { let mut a = get_random_assignment(s.n_clauses); - for _ in 0..inner_repeats { + let mut i = 0; + while i < inner_repeats { let mut valid = true; for c in &s.clauses { if a[c.v1] == c.n1 || a[c.v2] == c.n2 { @@ -45,7 +46,7 @@ pub fn sat2(s: Sat2) -> bool { a[c.v2] = !a[c.v2]; } valid = false; - break; + i += 1; } } if valid {