Teile und Herrsche
Inhaltsverzeichnis |
Teile und herrsche (divide et impera)
Definition
Teile und herrsche ist eine Problemlösestrategie, bei der ein Problem immer weiter in Teilprobleme zerlegt wird, bis sich diese einfach lösen lassen. Aus den Lösungen der Teilprobleme wird dann die Lösung des Gesamtproblems zusammengesetzt.
Anwendung
Bei der Anwendung der Technik Teile-und-Herrsche wird
- das gegebene Problem auf die Lösung
- mehrerer (oft zwei) kleinere Probleme der gleichen Art
- der (etwa) gleichen Größe reduziert. Aus deren Lösung wird dann die Gesamtlösung konstruiert.
Beispiele
Beispiel: Merge-Sort
Sortiere eine Array indem zwei Teilarrays sortiert und dann gemischt werden.
sort ([1 9 7 2 7 4 7 2 8]) Teile!
=> merge(
sort([1 9 7 2 7]), Herrsche über Teilproblem 1
sort([4 7 2 8])) Heersche über Teilproblem 2
= merge([1 2 7 7 9],[2 4 7 8]) Kombiniere zur Gesamtlösung
Entwurfsmethode für Algorithmen
1. Teile das Problem in kleinere Unterprobleme (Divide)
2. Löse rekursiv die entstehenden Unterprobleme (Conquer)
3. Setze die Lösungen zusammen.
Instanzen
- Mergesort
- Quicksort
- Intervallhalbierung (Binärbäumen)
Eigenschaften
-
kann bei konzeptionell schwierigen Problemen hilfreich sein
-
kann effiziente Lösungen realisieren
-
für Parallelverarbeitung geeignet
Beispiele
- Sortierverfahren
- Lebkuchenhaus
Übung 1 : Die Türme von Hanoi
Die Spielregeln
Es sind n Scheiben unterschiedlichen Durchmessers gegeben, welche geordnet zu einem Turm geschichtet sind, die untere Scheibe ist die größte. Der Turm steht auf einem Anfangsplatz. Unter Verwendung eines Hilfsplatzes soll dieser Turm nun zu einem Zielplatz transportiert werden, wobei verschiedene Regeln einzuhalten sind.
Transportiere n Scheiben vom Anfangsplatz auf den Zielplatz, verwende einen Hilfsplatz.
Teilprobleme
Wenn die Anzahl der Scheiben 1 beträgt, ist die Lösung des Problems trivial. Bei mehr als einer Scheibe läßt sich das Gesamtproblem in drei Teilprobleme zerlegen:
- Transportiere n-1 Scheiben vom Anfangsplatz auf den Hilfsplatz.
- Transportiere die letzte Scheibe vom Anfangsplatz auf Zielplatz.
- Transportiere n-1 Scheiben vom Hilfsplatz auf den Zielplatz.
Bei näherer Betrachtung der Teilprobleme fällt folgendes auf:
a) Der 2. Schritt ist trivial und sofort ausführbar.
b) Der 1. und der 3. Schritt sind von der gleichen Art wie das Ausgangsproblem, nur die Anzahl der Scheiben ist um 1 kleiner und die Bedeutung der Plätze hat sich verändert.
Damit hat man für das Gesamtproblem eine rekursive Lösungsvorschrift formuliert.
Bedeutung der Variablen:
Bedeutung der Variablen:
ap - Anfangsplatz
zp - Zielplatz
hp - Hilfsplatz
n - Anzahl der Scheiben
Die Übergabe des Hilfsplatzes als Parameter kann auch entfallen, wenn man als Berechnung einsetzt:
hp := 6 - ap - zp.
Spiele: http://www.gf-webdesign.de/tuerme-von-hanoi/tuerme-von-hanoi.htm
Quicksort
Mergesort
ein schnelleres (und rekursives) Sortierverfahren.
- Analogie: Sortieren eines Kartenstapels
- Karten sind mit Zahlen beschriftet
Schritt 1 : Teile den Stapel in zwei gleich grosse Stapel.
Schritt 2 : Sortiere beide Stapel getrennt.
Schritt 3 : Mische die beiden sortieren Stapel zu einem sortieren Stapel : lege dazu jeweils die kleinere der beiden oberen Karten umgedreht auf einen neuen Stapel.
Ubung1
n - Anzahl Elemente
1. Implementieren Sie eine Klasse „MergeSort".
2. Implementieren Sie in der Klasse eine Methode „sort“ mit den Parameter:
- eindimensionales Array -> a
- low
- high
3. Deklarieren Sie Variable N und initialisieren als die Unterschied zwischen high und low .
4. Implementieren Sie die Schleifen :
- für N kleiner gleich 1
1. Implementieren Sie eine Klasse „main".
2. Importieren Sie Scanner.
3. Deklarieren Sie zwei Variablen n und i.
4. Fragen Sie den Nutzer nach Anzahl die Elemente.
5. Initialisieren Sie diese Zahl als Variable n.
6. Erstellen Sie eindimensionales Array , welche beträgt new int[n].
7. Fragen Sie den Nutzer nach den Wert diese Elemente.
8. Implementieren Sie die Schleife , welche ruft diese Werte ab.
9. Benutzen Sie Mathode sort für arr,0,n.
10. Drucken Sie diese Elemente.
Binäres Suchen
Zusammenfassung
- Teile und Herrsche - Zerlegung größerer Aufgaben oder Probleme in kleinere Aufgaben oder Probleme, die einfacher zu bewältigen oder leichter gelöst werden können.
Quellen
Wagenknecht, 2003, Algorithmen und Komplexität
http://www.inf-schule.de/
http://www.awb1.ch/
http://www.ki.informatik.uni-frankfurt.de/
http://ddi.cs.uni-potsdam.de/



