Wann werden zwei Algorithmen als "ähnlich" bezeichnet?

16

Ich arbeite nicht in der Theorie, aber meine Arbeit erfordert von Zeit zu Zeit das Lesen (und Verstehen) von Theoriepapieren. Sobald ich eine (Reihe von) Ergebnissen verstanden habe, diskutiere ich diese Ergebnisse mit Menschen, mit denen ich zusammenarbeite, von denen die meisten theoretisch auch nicht funktionieren. Während einer solchen Diskussion stellte sich folgende Frage:

Wann sagt man, dass zwei gegebene Algorithmen "ähnlich" sind?

Was meine ich mit "ähnlich"? Nehmen wir an, dass zwei Algorithmen ähnlich sind, wenn Sie eine der folgenden Behauptungen in einem Artikel aufstellen können, ohne einen Prüfer zu verwirren oder zu ärgern (bessere Definitionen werden begrüßt):

Behauptung 1. "Der Algorithmus , der dem Algorithmus B ähnlich ist , löst auch das Problem X "ABX

Behauptung 2. "Unser Algorithmus ist dem Algorithmus ähnlich. "C

Lassen Sie mich es etwas genauer machen. Angenommen, wir arbeiten mit Graphenalgorithmen. Zuerst einige notwendige Bedingungen, damit die beiden Algorithmen ähnlich sind:

  1. Sie müssen das gleiche Problem lösen.
  2. Sie müssen dieselbe intuitive Idee auf hoher Ebene haben.

Zum Beispiel erfüllen das Sprechen über das Durchqueren von Graphen, das Durchqueren der Breite zuerst und das Durchqueren der Tiefe zuerst die obigen zwei Bedingungen; Für Berechnungen auf kürzesten Wegen erfüllen der Breitensignal-Algorithmus und der Dijkstra-Algorithmus die beiden oben genannten Bedingungen (natürlich bei ungewichteten Graphen). etc.

Reichen diese auch aus? Insbesondere sei angenommen, dass zwei Algorithmen die notwendigen Bedingungen erfüllen, um ähnlich zu sein. Würden Sie sie in der Tat ähnlich nennen, wenn

  1. Sie haben unterschiedliche asymptotische Leistungen?
  2. für eine spezielle Klasse von Graphen, erfordert einen Algorithmus Zeit , während die andere erfordert O ( n 1 / 3 ) Zeit?Ω(n)O(n1/3)
  3. sie haben unterschiedliche kündigungsbedingungen? (erinnern Sie sich, sie lösen das gleiche Problem)
  4. Der Vorverarbeitungsschritt ist bei beiden Algorithmen unterschiedlich.
  5. ist die speicherkomplexität bei beiden algorithmen unterschiedlich?

Edit: Die Frage ist eindeutig sehr kontextabhängig und subjektiv. Ich hatte gehofft, dass die obigen fünf Bedingungen jedoch einige Vorschläge zulassen. Gerne ändere ich die Frage weiter und gebe bei Bedarf weitere Details an, um eine Antwort zu erhalten. Vielen Dank!

Rachit
quelle
1
es kommt wirklich auf den Kontext an. Zum Beispiel sind DFS und BFS für bestimmte sequentielle Algorithmen sehr unterschiedlich und man könnte nicht einmal funktionieren. In parallelen Einstellungen ist DFS (oder mindestens eine Variante) P-vollständig, während BFS "einfach parallel" ist.
Suresh Venkat
@ SureshVenkat - Ich stimme zu, dass die Frage sehr kontextabhängig ist. Um keine Debatte zu beginnen, habe ich darauf verzichtet, "die beiden Algorithmen" zu
benennen, da dies
4
Das Problem ist, dass es nah und nah ist. Es gibt eine Möglichkeit, die Methode zur Aktualisierung der multiplikativen Gewichtung als "im Wesentlichen eine binäre Suche" zu betrachten, aber im falschen Kontext würde dies verrückt klingen. FWIW, in all Ihren oben genannten Fällen kann ich mir vorstellen, die beiden Algorithmen als unterschiedlich zu deklarieren.
Suresh Venkat
1
Diese Frage erscheint mir zu subjektiv. Sie fragen im Grunde nach einer Definition von "ähnlich", wenn keine kanonische Definition existiert.
Joe
1
Etwas verwandt: cstheory.stackexchange.com/questions/9409/…
Radu GRIGore

Antworten:

17

In den meisten Fällen bedeutet dies: "Ich möchte Algorithmus B nicht detailliert ausschreiben, da alle interessanten Details fast mit denen in Algorithmus A identisch sind und ich nicht über das 10-Seiten-Limit hinausgehen möchte." und trotzdem ist die Einreichungsfrist in drei Stunden. "

Jeffε
quelle
7

Wenn Sie im umgangssprachlichen Sinne "ähnlich" meinen, fängt die Antwort von JeffE meiner Meinung nach ein, was einige Leute meinen.

In technischer Hinsicht kommt es jedoch darauf an, was Sie interessiert. Wenn Sie sich nur um die Komplexität der asymptotischen Zeit kümmern, spielt der Unterschied zwischen Rekursion und Iteration möglicherweise keine Rolle. Wenn Sie sich nur um die Berechenbarkeit kümmern, spielt der Unterschied zwischen einer Zählervariablen und einem Ein-Symbol-Stapel keine Rolle.

AMsem:AMsem(P)PMMMsem(P)sem(Q)

M(M,)xyxyMsem(P)sem(Q)PQPQ

M

Ganz allgemein würde ich fragen: Was interessiert Sie (intuitiv), was sind die mathematischen Objekte, die diese intuitiven Eigenschaften darstellen, wie kann ich Algorithmen auf diese Objekte abbilden und wie ist die Struktur dieses Raums? Ich würde auch fragen, ob der Raum der Objekte genügend strukturiert ist, um Ähnlichkeiten zuzulassen. Dies ist der Ansatz, den ich aus der Sicht der Programmiersprachen-Semantik verfolgen würde. Ich bin mir nicht sicher, ob Ihnen dieser Ansatz angesichts der sehr unterschiedlichen Denkkulturen in der Informatik zusagt.

Vijay D
quelle
5

In Anlehnung an Jeffs Antwort sind zwei Algorithmen ähnlich, wenn der Autor von einem davon ausgeht, dass der Autor des anderen möglicherweise seine Arbeit überprüft.

Abgesehen von Scherzen würde ich in der Theoriegemeinschaft sagen, dass das, was der Algorithmus A für ein Problem löst, eher tangential dazu ist, ob es dem Algorithmus B "ähnlich" ist, der möglicherweise ein völlig anderes Problem löst. A ist ähnlich wie B, wenn es aufgrund der gleichen theoretischen Grundidee "funktioniert". Ist die Grundidee in beiden Algorithmen beispielsweise, dass Sie die Daten in einen viel niedrigeren dimensionalen Raum projizieren, Normen mit dem Lemma Johnson-Lindenstrauss beibehalten und dann eine Brute-Force-Suche durchführen können? Dann ähnelt Ihr Algorithmus anderen Algorithmen, die dies tun, unabhängig davon, welches Problem Sie lösen. Es gibt eine kleine Anzahl von Hochleistungsalgorithmus-Techniken, die zur Lösung einer Vielzahl von Problemen verwendet werden können, und ich würde denken, dass diese Techniken die Schwerpunkte vieler Sätze von "ähnlichen" Algorithmen bilden.

Aaron Roth
quelle
3

Sehr interessante Frage und sehr schönes Papier Ryan!

Ich stimme definitiv der Idee zu, dass die Beurteilung der allgemeinen Ähnlichkeit zwischen Algorithmen hauptsächlich eine subjektive Wertbeurteilung ist. Aus technischer Sicht gibt es eine Reihe von Merkmalen, die genau beobachtet werden müssen, um über die Ähnlichkeit von Algorithmen zu entscheiden. Letztendlich ist dies jedoch auch eine Frage des persönlichen Geschmacks. Ich werde versuchen, die Bedeutung beider Seiten derselben Medaille zu beschreiben, indem ich mich auf die einzelnen Punkte Ihrer Frage beziehe:

Aus technischer Sicht:

  1. Ryan hat bereits darauf hingewiesen, dass beide Algorithmen das gleiche Problem lösen müssen . Man könnte noch weiter gehen und diesen Begriff verallgemeinern, indem man sagt, dass es normalerweise genug ist, um zu beweisen, dass es eine Polynomtransformation derselben Instanz gibt, die von Algorithmus A verstanden wird, so dass Algorithmus B damit umgehen kann. Dies wäre jedoch tatsächlich sehr schwach. Ich ziehe es vor, die Ähnlichkeit in einem stärkeren Sinne zu betrachten.
  2. Ich würde jedoch niemals erwarten, dass zwei äquivalente Algorithmen dieselbe intuitive Idee haben - obwohl dies wiederum eine Definition ist, die nicht einfach zu erfassen ist. Darüber hinaus folgen Algorithmen, die als ähnlich erachtet werden, häufig nicht den Hauptgrundsätzen. Betrachten Sie zum Beispiel einige Sortieralgorithmen, die jedoch nach unterschiedlichen Vorstellungen auf unterschiedliche Weise entstanden sind. Betrachten Sie als extremes Beispiel genetische Algorithmen, die von der mathematischen Gemeinschaft normalerweise nur als stochastische Prozesse betrachtet werden (und daher ihrer Ansicht nach gleichwertig sind), die dann auf ganz andere Weise modelliert und analysiert werden.
  3. N(N21)Additive Musterdatenbanken würden tatsächlich die gleiche Anzahl von Knoten in genau der gleichen Reihenfolge erweitern, wodurch beide Algorithmen (und ihre Heuristiken) in einem sehr starken Sinne streng äquivalent sind, während der erste Ansatz keine Vorverarbeitung und der zweite Ansatz keine Vorverarbeitung aufweist hat einen erheblichen Overhead, bevor mit der Lösung einer bestimmten Instanz begonnen wird. Sobald Ihre Pattern-Datenbanken jedoch mehr simulatene Interaktionen berücksichtigen, besteht eine enorme Leistungslücke zwischen ihnen, sodass es sich definitiv um unterschiedliche Ideen / Algorithmen handelt.
  4. Tatsächlich denke ich, dass die meisten Leute Algorithmen nach ihrem Zweck und ihrer Leistung beurteilen würden . Daher ist die asymptotische Leistung eine gute Messgröße, um die Ähnlichkeit zwischen Programmen zu beurteilen. Bedenken Sie jedoch, dass diese Leistung nicht unbedingt der typische Fall ist. Wenn zwei Algorithmen dieselbe asymptotische Leistung aufweisen, sich jedoch in der Praxis unterschiedlich verhalten, würden Sie wahrscheinlich den Schluss ziehen, dass sie unterschiedlich sind. Der eindeutige Beweis in dieser Hinsicht wäre, dass beide Algorithmen sowohl hinsichtlich der Zeit als auch des Speichers die gleiche Leistung aufweisen (und dies lässt DFS und BFS, wie Suresh sagte, unterschiedlich aussehen). Falls diese Behauptung für Sie nicht überzeugend klingt, lesen Sie bitte das ausgezeichnete (und sehr empfohlene) Buch: Programming the Universevon Seth Lloyd. Auf Seite 189 verweist er auf eine Liste mit mehr als 30 Maßeinheiten für die Komplexität, mit deren Hilfe Algorithmen als unterschiedlich angesehen werden können.

Also, was macht Algorithmen ähnlich / unterschiedlich? Meiner Meinung nach (und das ist rein spekulativ) besteht der Hauptunterschied darin, was sie Ihnen vorschlagen. Viele, viele (viele!) Algorithmen unterscheiden sich nur in wenigen technischen Details, wenn sie demselben Zweck dienen, sodass der typische Fall für verschiedene Bereiche der Eingabe unterschiedlich ist. Der größte aller Unterschiede ist jedoch (aus meiner Sicht), was sie Ihnen vorschlagen. Algorithmen haben unterschiedliche Fähigkeiten und daher ihre eigenen Stärken und Schwächen. Wenn zwei Algorithmen gleich aussehen, aber auf unterschiedliche Weise erweitert werden könnten, um mit unterschiedlichen Fällen fertig zu werden, würde ich den Schluss ziehen, dass sie unterschiedlich sind. Oftmals sehen zwei Algorithmen jedoch sehr ähnlich aus, sodass Sie sie als gleich ansehen ... bis jemand eine wichtige Unterscheidung trifft und sie plötzlich völlig unterschiedlich sind!

Sorry, meine Antwort war am Ende so lang ...

Prost,

Carlos Linares López
quelle
1
Tatsächlich schlug Ryan vor, dass es nicht notwendig ist, dass beide Algorithmen dasselbe Problem lösen.
Jeffs
Wahr! Ich habe gerade meine Meinung dazu gesammelt, aber Sie haben definitiv Recht!
Carlos Linares López
2

Jede Erwähnung der Ähnlichkeit ohne eine Ähnlichkeit zu definieren Metrik ist nicht gut definiert. Es gibt viele Möglichkeiten, wie zwei Algorithmen ähnlich sein können:

Quicksort und Mergesort lösen sehr ähnliche Probleme, verwenden jedoch unterschiedliche Algorithmen. Sie haben eine ähnliche algorithmische Komplexität (obwohl die Leistung und die Speichernutzung im ungünstigsten Fall variieren können). Quicksort und Mergesort sind ähnlich wie Bubblesort, jedoch hat Bubblesort sehr unterschiedliche Leistungsmetriken. Wenn Sie die Komplexitätsstatistik ignorieren, gehören Quicksort, Mergesort und Bubblesort zur selben Äquivalenzklasse. Wenn Sie sich jedoch für die algorithmische Komplexität interessieren, sind sich Quicksort und Mergesort viel ähnlicher als Bubblesort.

Die dynamische Programmierung nach Smith-Waterman und der HMM-Sequenzvergleich versuchen, das Problem der Ausrichtung zweier Sequenzen zu lösen. Sie nehmen jedoch unterschiedliche Eingaben vor. Smith-Waterman verwendet zwei Sequenzen als Eingabe, und HMM-Sequenzvergleiche verwenden eine HMM und eine Sequenz als Eingabe. Beide Ausgabesequenzausrichtungen. In Bezug auf motivierende Ideen ähneln beide der Bearbeitungsentfernung von Levenshtein , jedoch nur auf einem sehr hohen Niveau.

Hier sind einige Kriterien, nach denen zwei Algorithmen als ähnlich bezeichnet werden können:

  1. Eingabe / Ausgabe-Typen
  2. Algorithmische / Speicherkomplexität
  3. Annahmen über Eingabetypen (zB nur positive Zahlen oder Gleitkommastabilität)
  4. Verschachtelte Beziehungen (z. B. sind einige Algorithmen Sonderfälle anderer)

Die kritische Entscheidung über die Bedeutung von Ähnlichkeit bleibt bestehen. Manchmal interessiert Sie die Komplexität eines Algorithmus, manchmal nicht. Da die Definition von Ähnlichkeit vom Kontext der Diskussion abhängt, ist der Begriff "ähnlicher Algorithmus" nicht genau definiert.

James Thompson
quelle