MAX-INDEPENDENT-SET(G) l = 1 r = |G.V| while l < r mid = ⌊(l + r + 1) / 2⌋ if INDEPENDENT-SET(G, mid) == 1 l = mid else r = mid - 1 k = l VI = ∅ V = G.V E = G.V while V != ∅ select v from V randomly V = V - {v} E' = E - {(w, v) : (w, v) ∈ E and w ∈ V} if INDEPENDENT-SET((V ∪ VI, E'), mid) == 1 E = E' else VI = VI ∪ {v} return VI
MAX-INDEPENDENT-SET-DEGREE-2(G) let vis[1 : |G.V|] be a new array by False S = ∅ for each vertex u in G.V if vis[u] == false T = ∅ cnt = 0 while True if cnt % 2 == 1 T = T ∪ {u} vis[u] = True cnt = cnt + 1 // 表示u的两个相邻节点 v = G.Adj[u, 0] w = G.Adj[u, 1] if vis[v] == False u = v else if vis[w] == False u = w else break S = S ∪ T return S
MAX-INDEPENDENT-SET-BIPARTITE(G) M = HOPCROFT-KARP(G) // 记录被标记的节点 construct GM from M and G Q = Ø L0 = Ø R0 = Ø for each unmatched vertex l ∈ L l.π = NIL ENQUEUE(Q, l) L0 = L0 ∪ {l} while Q != Ø u = DEQUEUE(Q) for each v in GM.Adj[u] if v in L and v not in L0 L0 = L0 ∪ {v} ENQUEUE(Q, v) else if v in R and v not in R0 R0 = R0 ∪ {v} ENQUEUE(Q, v) V0 = (L - L0) ∪ R0 return V - V0
DIVIDING-MONEY-A(a, n, x, y) b = n - a s = (a * x + b * y) if s % 2 != 0 return 0 s = s / 2 (d, u, v) = EXTENDED-EUCLID(x, y) if s % d != 0 return 0 u0 = (u * (s / d)) % y // 求取使u满足u<=a的最大解。 u1 = u0 + ⌊(a - u0) / (y / d)⌋ * (y / d) v1 = (s - u1 * x) / y if 0 <= u1 <= a and 0 <= v1 <= b return 1 v0 = (v * (s / d)) % x // 求取使v满足v<=b的最大解。 v2 = v0 + ⌊(b - v0) / (x / d)⌋ * (x / d) u2 = (s - v2 * y) / x if 0 <= u2 <= a and 0 <= v2 <= b return 1 return 0
DIVIDING-MONEY-B(X, n) Bonnie-s = 0 Clyde-s = 0 RANDOMIZED-QUICKSORT(X, 1, n) for i = n downto 1 if Bonnie-s <= Clyde-s Bonnie-s = Bonnie-s + X[i] X[i] will be assigned to Bonnie else Clyde-s = Clyde-s + X[i] X[i] will be assigned to Clyde if Bonnie-s == Clyde-s return 1 else return 0
DETERMINE-WRESTLERS(G) for each vertex u in G.V u.type = NIL for each vertex s in G.V if s.type == NIL s.type = babyface Q = ∅ ENQUEUE(Q, s) while Q != ∅ u = DEQUEUE(Q) for each vertex v in G.Adj[u] if v.type == NIL if u.type == babyface v.type = heel else v.type = babyface ENQUEUE(Q, s) else if v.type == u.type return NIL return G.V
//A中每个任务都带有3个属性t, p, d,分别表示任务的运行时间,利润以及截止时间。 K-PROFIT-DEADLINES'(A, n, k) sort A[1 : n] by attribute d T = 0 for i = 1 to n T = T + A[i].t let f[0 : n, 0 : T] be a new table by 0 for i = 1 to n for j = 1 to T f[i, j] = f[i - 1, j] A[i].d = min{A[i].d, T} for j = A[i].t to A[i].d f[i, j] = min{f[i, j], f[i - 1, j - A[i].t] + A[i].p} return f[i, T] >= k
PROFIT-DEADLINES(A, n) sort A[1 : n] by attribute d T = 0 for i = 1 to n T = T + A[i].t let f[0 : n, 0 : T] be a new table by 0 for i = 1 to n for j = 1 to T f[i, j] = f[i - 1, j] A[i].d = min{A[i].d, T} for j = A[i].t to A[i].d f[i, j] = min{f[i, j], f[i - 1, j - A[i].t] + A[i].p} return f[i, T]