Beruflich Dokumente
Kultur Dokumente
1. Lehrbuchproblem 6.1.
Unterproblem: Sei S(j) die Summe der zusammenhängenden Maximalsummen-Teilsequenz, die genau auf aj endet (aber
möglicherweise die Länge Null hat). Wir wollen maxj S(j).
Rekursive Formulierung: Die Teilsequenz, die S(j) definiert, hat entweder (i) die Länge Null oder (ii) besteht aus der besten
Teilsequenz, die mit einemj-1 endet, gefolgt von Element aj. Daher
S[0] = 0
für j = 1 bis n:
S[j] = max(0, aj + S[j - 1])
return maxj S[j]
2. Lehrbuchproblem 6.2.
Teilproblem: T (j) sei die Mindeststrafe, die bis zum Ort aj verhängt wurde, vorausgesetzt, Sie halten dort an. Wir wollen T
(n).
Rekursive Formulierung: Angenommen, wir hören bei einemj auf. Der vorherige Halt ist ein ai, i < j (oder vielleicht ist einj der
erste Halt). Versuchen wir alle Möglichkeiten für ein : i
0≤i<j
Algorithmus:
für j = 1 bis n:
T(j)=(200-aj)2
für i = 1 bis j - 1:
T(j)=min{T(j),T(i)+(200-(aj-ai)) } 2
return T(n)
3. Lehrbuchproblem 6.7.
Teilproblem: Definieren Sie T (i, j) als die Länge der längsten palindromischen Teilfolge von x[i . . . j]. Wir wollen T(1, n).
Rekursive Formulierung: Bei der Berechnung von T (i, j) lautet die erste Frage, ob x[i] = x[j]. Wenn ja, können wir sie
zuordnen und dann nach innen wiederkehren, zu T (i +1, j-1). Wenn nicht, dann ist mindestens einer von ihnen nicht im
Palindrom.
(1 if i = j
T(i,j) = 2 + T(i + 1,j - 1) wenn i < j und x[i] = x[j]
[ max{T (i + 1,j),T (i,j — 1)} sonst
1
für i = 2 bis n + 1:
T[i, i - 1] = 0 für i = 1 bis n:
T[i,i]=1
für d = 1 bis n - 1: (Intervalllänge)
für i = 1 bis n - d:
j=i+d
wenn x[i] = x[j]:
T[i,j]=2+T[i+1,j-1]
else:
T[i,j] =max{T[i+1,j],T[i,j-1]} Rückgabe T[1, n]
Laufzeit: Es gibt O(n ) Subprobleme und jedes benötigt O(1) Zeit zur Berechnung, so dass die Gesamtlaufzeit O(n ) ist.
2 2
4. Lehrbuchproblem 6.17.
Teilproblem: Definieren Sie für jede ganze Zahl 0 ≤ u ≤ v T (u) als wahr, wenn es möglich ist, mit den gegebenen Münzen x 1,
x 2,..., xn eine Änderung für u vorzunehmen. Die Antwort, die wir wollen, ist T (v).
Rekursive Formulierung: Beachten Sie, dass
T (u) ist genau dann wahr, wenn T (u - x ) für einige i wahr ist.
i
T [0] = wahr
für u = 1 bis v:
T [u] = false
für i = 1 bis n:
wenn u ≥ x und T [u - x ]: T [u] = true
i i
Laufzeit: Die Tabelle hat die Größe v und jeder Eintrag benötigt O(n) Zeit zum Ausfüllen; daher beträgt die Gesamtlaufzeit
O(nv).
6. Lehrbuchproblem 6.21.
Subproblem: Verwurzeln Sie den Baum an einem beliebigen Knoten r. Definieren Sie für jedes u ∈ V
T(u) = Größe der kleinsten Scheitelbedeckung des Teilbaums, der bei u verwurzelt ist.
T(u) = min
।)
T(u)=min
|C(u)|+Pz∈G(u)T(z)
wobei |C (u)| die Anzahl der Kinder des Knotens u ist. Der erste Fall umfasst u in der Scheitelpunktabdeckung; der zweite Fall
nicht.
Algorithmus:
Laufzeit: Die an jedem Knoten geleistete Arbeit ist proportional zur Anzahl der Enkelkinder, |G(u)|. Seit u |G(u)| ≤ |V | (jeder
Knoten hat höchstens ein Großelternteil), die geleistete Gesamtarbeit ist linear.
7. Lehrbuchproblem 6.19.
Teilproblem: Definieren Sie für beliebige ganze Zahlen 0 ≤ u ≤ v und 0 ≤ j ≤ k T (u, j) als wahr, wenn es möglich ist, eine
Änderung für u unter Verwendung von höchstens j Münzen mit Nennwerten, die aus x 1, x2, ..., xn ausgewählt sind,
vorzunehmen. Die Antwort, die wir wollen, ist T (v, k).
Rekursive Formulierung: Beachten Sie, dass
T(u, j) ist genau dann wahr, wenn (entweder u = 0 oder (T(u - xi,j - 1) ist für einige i wahr)).
Für Konsistenz setzen Sie T (0, j) auf true für alle j und T (u, 0) auf false für u > 0.
Algorithmus:
für j = 0 bis k:
T [0, j] = wahr
für u = 1 bis v:
T [u, 0] = false
für j = 1 bis k:
für u = 1 bis v:
T [u, j] = false
für i = 1 bis n:
wenn u ≥ xi und T [u - xi, j - 1]: T [u, j] = wahr
return T [v, k]
Laufzeit: Die Tabelle hat die Größe k × v und jeder Eintrag benötigt O(n) Zeit zum Ausfüllen; daher beträgt die Gesamtlaufzeit
O (nkv).