0 Daumen
118 Aufrufe

Hallo Leute, ich brauche eure Hilfe bei folgender Aufgabe. Die Aufgabe bestand darin, zu beweisen:


Angenommen, man nimmt an einem Tanzwettbewerb teil, bei dem man zu jedem Song \( k \) Punkte \( P[k] \) erhält, aber zwischen den Songs braucht man eine Pause von \( W[k] \) Songs. Man muss entscheiden, zu welchen Songs man tanzen sollte, um die Gesamtpunktzahl zu maximieren, dabei die Wartezeiten berücksichtigend.

Dazu habe ich einen Algorithmus geschrieben, der das Problem lösen soll:

`python
1. C[n+1] = 0;  // Basisfall: Es gibt nach dem letzten Song keine weiteren Punkte
2. for (j = n; j >= 1; j--) do // Gehe rückwärts durch die Songs
3.   if (j + W[j] + 1 > n) then
4.       C[j] = max{C[j+1], P[j]}  // Wenn keine weiteren Songs nach j folgen, dann tanze zu Song j oder überspringe ihn
5.   else
6.       C[j] = max{C[j+1], P[j] + C[j + W[j] + 1]}  // Wenn es weitere Songs nach j gibt, dann tanze zu j oder überspringe ihn
7. return C[1];  // Gib die optimale Punktzahl zurück, beginnend ab Song 1
`

Ich muss jetzt die Korrektheit des Algorithmus beweisen. Dazu verwende ich folgenden Invariante: Nach jeder Iteration enthält \( C[j] \) die optimale Punktzahl, die ab Song \( j \) erzielt werden kann, wenn die restlichen Songs optimal ausgewählt werden.

Induktionsanfang:
Im Basisfall setzen wir \( i = n + 1 \). Zu diesem Zeitpunkt gibt es keine weiteren Songs, daher ist \( C[n+1] = 0 \), was korrekt ist, da ab Song \( n+1 \) keine Punktzahl mehr erreichbar ist. Die Invariante gilt hier, da es keine weiteren Songs gibt und somit auch keine Punktzahl zu erzielen ist.

Induktionsannahme:
Angenommen, die Invariante gilt für ein beliebiges \( j \), das heißt, \( C[j] \) enthält die optimale Punktzahl, die ab Song \( j \) erzielt werden kann, wenn die restlichen Songs optimal ausgewählt werden.

Induktionsschritt:
Ich tue mir leider hier schwer, ein geeignetes \( j \) zu finden. Ich bin mir nicht sicher, ob ich \( n \to n-1 \) machen soll oder doch \( n+1 \to n \). Ich weiß leider nicht genau, welchen geeigneten Wert für \( n \) ich nehmen soll, um das zu zeigen.

Avatar von

Hallo Alex. Die Aufgabe, die Korrektheit eines Algorithmus zu beweisen, gehört in den Bereich Informatik und damit in die Stacklounge.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community