CHAPTER 11 Coping with NPcompleteness Algorithm 11 1

  • Slides: 22
Download presentation
CHAPTER 11 Coping with NP-completeness

CHAPTER 11 Coping with NP-completeness

Algorithm 11. 1. 4 Largest Independent Set This algorithm returns α(G), the size of

Algorithm 11. 1. 4 Largest Independent Set This algorithm returns α(G), the size of a largest independent set in G = (V, E). Input Parameter: G = (V, E) Output Parameters: None largest_independent_set(G) { if (E == Ø) return |V| else { pick first v V such that N(v) ≠ Ø G 1 = G - { v} G 2 = G - { v} - N(v) k 1 = largest_independent_set(G 1) // assume v not in independent set k 2 = largest_independent_set(G 2) // assume v in independent set return max(k 1, k 2 + 1) } }

Algorithm 11. 1. 11 3 -Satisfiability This algorithm takes as an input a formula

Algorithm 11. 1. 11 3 -Satisfiability This algorithm takes as an input a formula in CNF in which every clause contains at most three literals and returns true if and only if is satisfiable.

Input Parameter: ϕ Output Parameters: None 3_satisfiability(ϕ) { if (ϕ does not contain any

Input Parameter: ϕ Output Parameters: None 3_satisfiability(ϕ) { if (ϕ does not contain any clauses) return ϕ //ϕ is the logical constant true or false if (ϕ contains a clause with one literal a) { ϕ = ϕ[a → true] // a has to be true return 3_satisfiability(ϕ) } if (ϕ contains a clause with two literals a, b) { ϕ 1 = ϕ[a → false][b → true] ϕ 2 = ϕ[a → true] return 3_satisfiability(ϕ 1)||3_satisfiability(ϕ 2) } if (ϕ contains a clause with three literals a, b, c) { ϕ 1 = ϕ[a → false][b → false][c → true] ϕ 2 = ϕ[a → false][b → true] ϕ 3 = ϕ[a → true] return 3_satisfiability(ϕ 1) || 3_satisfiability(ϕ 2) || 3_satisfiability(ϕ 3) } }

Algorithm 11. 2. 1 Randomized st-Connectivity This algorithm takes as an input a graph

Algorithm 11. 2. 1 Randomized st-Connectivity This algorithm takes as an input a graph G = (V, E) and two vertices s, t V. It returns true with probability one if there is a path from s to t; if there is no path from s to t, it fails to terminate. Input Parameters: G, s, t Output Parameters: None randomized_st_connectivity(G, s, t) { vertex = s while (vertex != t) vertex = random vertex from N(vertex) return true }

Algorithm 11. 2. 4 Randomized Hamiltonian Path This algorithm takes as input a graph

Algorithm 11. 2. 4 Randomized Hamiltonian Path This algorithm takes as input a graph G and searches for a Hamiltonian path. It returns true if it finds a Hamiltonian path and false otherwise. randomized_hamiltonian_path(G) { v 0 = random vertex in G i = 0 do { N = N(vi) - {v 0, . . . , vi-1} // N contains those neighbors of vi (the current last // vertex of the path) that are not already on the path if (N ≠ Ø) { i = i + 1 vi = random vertex in N } else if (vj N(vi) for some 0 = j < i - 1) (v 0, . . . , vi) = (v 0, . . . , vj, vi, . . . , vj+1) else return false } while (i != |V| - 1) return true }

Algorithm 11. 3. 8 Next Fit This algorithm computes an assignment b of n

Algorithm 11. 3. 8 Next Fit This algorithm computes an assignment b of n items with sizes s[1], . . . , s[n] (0, 1] into bins and returns the number k of bins it used. Input Parameter: s Output Parameters: None next_fit(s) { n = s. last k = 1 // current bin size = 0 //accumulated size of items in current bin for i = 1 to n if (size + s[i] = 1) { b[i] = k // enough room to add item i to bin k size = size + s[i] } else { k = k + 1 b[i] = k size = s[i] } return k }

Algorithm 11. 3. 13 First Fit This algorithm computes an assignment b of n

Algorithm 11. 3. 13 First Fit This algorithm computes an assignment b of n items with sizes s[1], . . . , s[n] (0, 1] into bins and returns the number k of bins it used.

Input Parameter: s Output Parameters: None first_fit(s) { n = s. last k =

Input Parameter: s Output Parameters: None first_fit(s) { n = s. last k = 1 // number of bins used c[k] = 0 // c[i] is the total size of items in bin i for i = 1 to n { j = 1 while (c[j] + s[i] > 1) { j = j + 1 if (j > k) { // open new bin k = j c[k] = 0 } } // add item i to bin j b[i] = j c[j] = c[j] + s[i] } return k }

Algorithm 11. 3. 16 First Fit Decreasing This algorithm computes an assignment b of

Algorithm 11. 3. 16 First Fit Decreasing This algorithm computes an assignment b of n items with sizes s[1], . . . , s[n] (0, 1] into bins and returns the number k of bins it used. Input Parameter: s Output Parameters: None first_fit_decreasing(s) { s. sort(>) // sort s in decreasing order return first_fit(s) }

Algorithm 11. 3. 19 Greedy Coloring This algorithm takes as an input a graph

Algorithm 11. 3. 19 Greedy Coloring This algorithm takes as an input a graph G = (V, E) and constructs a coloring of the vertices of the graph such that no two adjacent vertices have the same color. Input Parameter: G = (V, E) Output Parameters: None greedy_coloring(G) { n = | V| C = {1, . . . , n} // set of colors for each v V color v with smallest color in C not used by any vertex in N(v) }

Algorithm 11. 3. 23 Wigderson Coloring This algorithm takes as input a 3 -colorable

Algorithm 11. 3. 23 Wigderson Coloring This algorithm takes as input a 3 -colorable graph G = (V, E) and constructs a coloring of the vertices of the graph such that no two adjacent vertices have the same color.

Input Parameter: G = (V, E) Output Parameters: None wigderson_coloring(G) { n = |

Input Parameter: G = (V, E) Output Parameters: None wigderson_coloring(G) { n = | V| color_count = 0 while (V contains a vertex of degree at least √n) { pick v of degree at least √n G = (N(v), E) two_color(G, color_count) //move on to next set of colors color_count = color_count + 2 G = G - N(v) } greedy_coloring(G, color_count) // see new implementation below } greedy_coloring(G, c) { n = | V| C = {c, . . . , c + n} // set of colors for each v V color v with smallest color in C not used by any vertex in N(v) }

Algorithm 11. 4. 4 Vertex Cover This algorithm determines whether a graph G =

Algorithm 11. 4. 4 Vertex Cover This algorithm determines whether a graph G = (V, E) has a vertex cover of size at most k. Input Parameter: G = (V, E) Fixed Parameter: k Output Parameters: None vertex_cover(G, k) { if ((k == 0) || (E == Ø)) return E == Ø else { pick first e = (u, v) in E G 1 = (V-{u}, E-{(u, w) | w V}) G 2 = (V-{v}, E-{(v, w) | w V}) return vertex_cover(G 1, k-1) || vertex_cover(G 2, k-1) } }

Algorithm 11. 4. 7 Vertex Cover, Improved This algorithm determines whether a graph G

Algorithm 11. 4. 7 Vertex Cover, Improved This algorithm determines whether a graph G = (V, E) has a vertex cover of size at most k.

Input Parameter: G = (V, E) Fixed Parameter: k Output Parameters: None improved_vertex_cover(G, k)

Input Parameter: G = (V, E) Fixed Parameter: k Output Parameters: None improved_vertex_cover(G, k) { m = 0 V’ = Ø for each v in V if (larger_degree(G, v, k)) m = m + 1 else // collect vertices of degree V’ = V’ {v} // at most k in V’ if (m > k) return false // compute G’ E’ = {(u, v) | (u, v) E and (u, v) V} G’ = ( V, E) // remove isolated vertices from G’ for each v in V if (isolated(G’, v)) G’ = G’ - { v} if (|V‘| > 2 k(k - m)) // in this case there cannot be return false // a k - m vertex cover return vertex_cover(G’, k - m) }

Algorithm 11. 5. 5 Queens This algorithm finds a solution to the n-queens problem,

Algorithm 11. 5. 5 Queens This algorithm finds a solution to the n-queens problem, which is stored in the array q. Input Parameter: n Output Parameter: q queens(n, q) { do { q. random_permutation() do { swaps = 0 // initialize counter for each i, j {1, . . . , n} if (queen in column i or j under attack) if (swapping queens in column i and j reduces collisions) { q. swap(i, j) swaps = swaps + 1 } } while (swaps > 0) } while (there are collisions in q) }

Local Search Heuristic This algorithm tries to improve an initial random guess by making

Local Search Heuristic This algorithm tries to improve an initial random guess by making local changes selected from a set of operations T. The function evaluates the goodness of a solution. local_search() { c = random element of the search space do { changed = false for each T T { c’ = T(c) Δ = eval(c) - eval(c’) if (Δ < 0) { c = c’ changed = true } } } while (changed) output c }

Iterated Local Search Heuristic This algorithm runs a local search heuristic repeatedly from random

Iterated Local Search Heuristic This algorithm runs a local search heuristic repeatedly from random starting points. T is the set of local operations allowed. The function evaluates the goodness of a solution. iterated_local_search() { do { changed = false c = random element of the search space do { for each T T { c’ = T(c) Δ = eval(c) - eval(c’) if (Δ < 0) { c = c’ changed = true } } } while (changed) } while (eval(c) is not acceptable) output c }

Algorithm 11. 5. 7 Independent Search This algorithm searches for a large independent set

Algorithm 11. 5. 7 Independent Search This algorithm searches for a large independent set in the input graph G.

Input Parameter: G = (V, E) Output Parameters: None independent_search() { do { I

Input Parameter: G = (V, E) Output Parameters: None independent_search() { do { I = random subset of V do { changed = false c = random element of the search space do { for each T T { I’ = I Δ {v} // Δ as symmetric difference Δ = eval(I) - eval(I’) if (Δ < 0) { I = I’ changed = true } } } while (changed) } while (eval(I) is not acceptable) output I }

Independent Search through Simulated Annealing Input Parameter: G = (V, E) Output Parameters: None

Independent Search through Simulated Annealing Input Parameter: G = (V, E) Output Parameters: None sa_independent_search() { I = random subset of V n = 0 do { n = n + 1 T = T(n) // set current temperature for each v V { I’ = I Δ {v} // Δ as symmetric difference Δ = eval(I) - eval(I’) if ((Δ < 0) || (random() < p(T, Δ)) { I = I’ } } } while (eval(I) is not acceptable) output I }