Mutable State und Undo

Intermediate Algorithmen und Datenstrukturen Deutsch
Also available: English
Created by Best · 16.08.2026 at 09:13 UTC

Häufig mutiert man ein gemeinsames Board-Array: setze Feld, rekursiver Aufruf, Feld zurücksetzen. Alternative: unveränderliche Kopien (teurer).

Fehlerquelle: Undo vergessen, dann kontaminiert der nächste Ast.

Wo gebraucht

In-place Backtracking spart Allokationen; Undo muss exakt sein. Gleiches Muster in Editoren (Command-Stack) und in Transaktionen mit Rollback.

Vertiefung

Veränderlicher Zustand vermeidet das Kopieren grosser Teilkandidaten. Eine Rekursionsebene führt eine kleine Änderung aus, ruft den nächsten Schritt auf und macht genau diese Änderung danach rückgängig. Dieses Muster ist effizient, verlangt aber eine streng symmetrische Behandlung von Vorwärts- und Rückwärtsoperation.

Die Undo-Operation muss auch dann erfolgen, wenn der rekursive Aufruf keine Lösung findet oder mehrere Lösungen sammelt. Eine alternative Strategie erzeugt pro Zweig eine neue unveränderliche Struktur. Sie ist oft leichter zu prüfen, benötigt jedoch mehr Allokationen und Kopierarbeit.

Schwierigkeitsstufen

  1. Zu jeder Mutation die passende inverse Operation angeben.
  2. Mehrere gekoppelte Strukturen konsistent aktualisieren und zurücksetzen.
  3. Zwischen Kopieren und Undo anhand von Grösse und Fehlerrisiko abwägen.

Fallstricke

Ein frühes return kann das Undo überspringen. Ebenso problematisch sind flache Kopien verschachtelter Listen, weil innere Objekte weiterhin gemeinsam genutzt werden und Änderungen in andere Zweige durchsickern.

University approvals: 0
Tasks
Question 1

Warum ist Undo bei mutable Boards wichtig?

Question 2

Warum ist ein return innerhalb eines mutierenden Backtracking-Zweigs besonders zu prüfen?

Question 3

Implementiere Board mit place und undo. cols[row] speichert die Spalte der Dame, ein freies Feld hat den Wert -1.

Hint

Ein Arrayfeld wird mit cols[row] = value geändert. Für die freie Markierung kann derselbe int-Wert wie im Konstruktor genutzt werden.

Starter code is prefilled; replace TODO blocks with your solution.
1 test case will be used for grading
Run checks runtime behavior only. Final correctness is evaluated when you submit.
Card Info
  • Topic: Algorithmen und Datenstrukturen
  • Difficulty: Intermediate
  • Completed: 0 users
Creator
Best
Best
BestBuddy