Theoretische Grundlagen von Teilen und Erobern


22

Beim Entwurf von Algorithmen werden häufig die folgenden Techniken angewendet:

  • Dynamische Programmierung
  • Die Gier-Strategie
  • Teilen und Erobern

Während es für die ersten beiden Methoden bekannte theoretische Grundlagen gibt, nämlich das Bellman-Optimalitätsprinzip und die Matroid- (bzw. Greedoid-) Theorie, konnte ich für Algorithmen, die auf D & C basieren, keinen solchen allgemeinen Rahmen finden.

Erstens ist mir etwas bekannt, das wir (oder besser gesagt der Professor) in einer funktionalen Programmierklasse eingeführt haben, die als "algorithmisches Skelett" bezeichnet wird und das im Kontext von Kombinatoren entstanden ist. Als Beispiel hierfür haben wir ein solches Grundgerüst für D & C-Algorithmen wie folgt angegeben:

Definition : Sei nicht leere Mengen. Wir nennen die Elemente von Lösungen und die Elemente von (dh die Teilmengen von ) werden als Probleme bezeichnet . Dann ist ein D & C-Gerüst ein 4-Tupel , wobei:S P : = P ( A ) , A ( P β , β , D , C )A,SS P:=P(A)A(Pβ,β,D,C)

  • p P β ( p )Pβ ist ein Prädikat über die Reihe von Problemen , und wir sagen , dass ein Problem ist Grund iff hält.pPβ(p)
  • P βSβ ist ein Mapping , das jedem Grundproblem eine Lösung zuweist.PβS
  • P P ( P )D ist eine Zuordnung , die jedes Problem in eine Reihe von Unterproblemen unterteilt.PP(P)
  • P × P ( S ) SC ist eine Abbildung , die die Lösungen (abhängig von der Art eines "Pivot-Problems") der Unterprobleme verbindet, um eine Lösung zu erhalten.P×P(S)S

Dann berechnet für ein gegebenes Skelett und ein Problem die folgende generische Funktion eine Lösung (im Formalen) Sinn) für :p f s : P S ps=(Pβ,β,D,C)pfs:PSp

fs(p)={β(p)if p is basicC(p,f(D(p)))otherwise

wobei wir in der zweiten Zeile die Notation für Teilmengen der Codomäne einer Abbildung .X ff(X):={f(x):xX}Xf

Wir haben jedoch die zugrunde liegenden "strukturellen" Eigenschaften von Problemen, die auf diese Weise formuliert werden können, nicht weiter untersucht (wie gesagt, es war eine funktionale Programmierklasse und dies war nur ein kleines Beispiel). Leider konnte ich zu diesem Ansatz keine weiteren Hinweise finden. Daher denke ich nicht, dass die obigen Definitionen ganz normal sind. Wenn jemand erkennt, was ich oben angegeben habe, würde ich mich über verwandte Artikel freuen.

Zweitens haben wir für die Greedy-Strategie das berühmte Ergebnis, dass ein Problem durch den allgemeinen Greedy-Algorithmus genau dann korrekt gelöst wird, wenn seine Lösungen eine gewichtete Matroide darstellen. Gibt es ähnliche Ergebnisse für D & C-Algorithmen (die nicht unbedingt auf der oben beschriebenen Methode basieren)?

Antworten:


5

Eine formale Behandlung (die dem in der Frage vorgeschlagenen Modell etwas ähnelt) des Subjekts unter Verwendung von sogenannten Pseudomorphismen (dh Funktionen, die beinahe Morphismen sind, wobei einige Vor- und Nachberechnungen durchgeführt werden) sowie Überlegungen zur Komplexität Analyse und parallele Implementierung solcher Algorithmen sind gegeben in:

Ein algebraisches Modell für Divide-and-Conquer und seine Parallelität von Zhijing G. Mou und Paul Hudak (in The Journal of Supercomputing , Band 2, Ausgabe 3, S. 257-278, November 1988)


1

Etwas so Konkretes wie Bellmans Optimalitätsprinzip für Divide- und Conquer-Algorithmen ist mir nicht bekannt. Die zugrunde liegende Grundlage von Teilen und Erobern scheint mir jedoch eine rekursive (oder induktive) Definition des Problems zu sein, und dann ein Mittel, um Lösungen für das Problem zu größeren Lösungen zu kombinieren. Die wichtigste Erkenntnis hier ist das rekursive Nachdenken über Problemeingaben und das Einsetzen dieser in rekursive D & C-Algorithmen.

n

  • n=0
  • n=1
  • n>1n2n2

n1

Es ist wichtig zu beachten, dass dies nicht unbedingt zu dem führt, was Sie von D & C-Algorithmen erwarten. Wir könnten die Array-Struktur wie folgt definieren:

  • n=0
  • n>0n1

Nach der gleichen Strategie, die wir hier für Mergesort verwendet haben, führt dies zu einer rekursiven Einfügesortierung. In der Regel entwickeln wir also rekursive Definitionen, die mehrere rekursive Elemente umfassen, dh schneiden den Datensatz in zwei Hälften oder Drittel.

Nun gibt es den Hauptsatz zur Analyse von D & C-Algorithmen, der Aufschluss über die Effizienzerwartungen für die Unterkomponenten eines D & C-Algorithmus mit einer bestimmten Gesamtlaufzeiteffizienz gibt.


Die Beispiele, die Sie angeben, passen in den allgemeinen Kontext, den ich in meiner Frage gebe (und es kann hilfreich sein, wenn Sie eine konkrete Anwendung angeben). Meine Frage war jedoch, ob es ein Kriterium (wie BOP oder Matroid-Struktur) gibt, nach dem Probleme durch Algorithmen gelöst werden können, die in dieses Muster passen.
Cornelius Brand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.