Gibt es ein Konzept für einen Algorithmus, der eine Funktion berechnet, indem zuerst ein anderer Algorithmus gefunden wird?

14

Wenn ich es richtig verstehe, hat ein Algorithmus, der den Wert einer reellen Funktion berechnet, eine fRechenkomplexität O(g(n)) wenn Folgendes zutrifft: Wenn wir f auf Genauigkeit berechnen , erfordert δ in der Größenordnung von g(n) Schritte.

Was aber, wenn wir einen Algorithmus haben, der zuerst "einen effizienteren Algorithmus zur Berechnung von f " und dann berechnet f?

Mit anderen Worten, was ist, wenn wir einen Algorithmus A , der Folgendes ausführt:

  1. Finden Sie einen effizienten Algorithmus B für die Berechnung von f .

  2. benutze um f zu berechnen .Bf

In diesem Fall können wir nicht mehr von der Rechenzeit sprechen, die zum Berechnen von erforderlich wäre , da es völlig davon abhängt, ob Algorithmus bereits Algorithmus . Mit anderen Worten, die Rechenzeit, die zum Berechnen von erforderlich ist, wenn die erste berechnete Zahl ist, ist weitaus größer als die Rechenzeit, die zum Berechnen von erforderlich ist, nachdem f ( 3 ) bereits berechnet wurde.f(5)ABf(5)5f(5)f(3)

Meine Frage ist, gibt es ein Konzept / eine Theorie zu dieser Art von Algorithmus, die zuerst einen anderen Algorithmus findet, bevor sie eine Funktion berechnet? Insbesondere frage ich mich über die Analyse der rechnerischen Komplexität solcher Algorithmen.

user56834
quelle
1
Würden Sie sagen, dass Mathematica im Grunde das tut, wonach Sie fragen? Sie geben zu lösende Gleichungen an, und es wird automatisch ermittelt, welcher Algorithmus zum Lösen dieser Gleichungen verwendet werden soll, und diese werden dann gelöst.
user541686
Schauen Sie sich itu.dk/people/sestoft/pebook , es ist relevant.
Nathan Ringo

Antworten:

18

Es gibt einen bekannten Algorithmus, den universellen Suchalgorithmus von Levin, dessen Funktionsweise identisch ist. Betrachten Sie beispielsweise das Problem, eine zufriedenstellende Zuordnung für eine Formel zu finden, die garantiert zufriedenstellend ist. Die universelle Suche von Levin führt alle potenziellen Algorithmen parallel aus. Wenn ein Algorithmus eine zufriedenstellende Zuordnung ausgibt, wird diese Zuordnung angehalten und ausgegeben. Wenn der optimale Algorithmus für das Problem in der Zeit , wird der Levin-Algorithmus in der Zeit O ( f ( n ) ) (mit einer möglicherweise großen Konstante) ausgeführt, wenn er korrekt implementiert wird.f(n)O(f(n))

Während Levins Algorithmus (aufgrund der großen Konstanten) unpraktisch ist, ist er theoretisch sehr interessant. Weitere Informationen zur universellen Suche finden Sie im Scholarpedia-Artikel .

Yuval Filmus
quelle
10

Angenommen, wir haben eine Funktion, fdie ein Argument xvom Typ annimmt und eine Aandere Funktion ausgibt, die ein Argument yvom Typ annimmt Bund ein Ergebnis vom Typ zurückgibt C. Nimmt in Ihren Worten fein Argument xund gibt einen "Algorithmus" zurück, der Eingaben vom Typ Bund Ergebnisse vom Typ ausgibt C.

Die Funktion fhat den Typ

A → (B → C)

Tatsächlich nimmt es x : Aeine Funktion vom Typ und gibt sie zurück B → C. Aber eine solche fentspricht eine Funktion , g : A × B → Cdie nimmt beide x und yauf einmal und gibt Ihnen das Endergebnis. In der Tat gibt es einen Isomorphismus zwischen den Typen

A → (B → C)

und

A × B → C

weil wir gin Bezug auf fals definieren können

g(x, y) := f(x)(y)

und wir können definieren , fin Bezug auf die gals

f(x) := (y ↦ g(x,y))

Der Vorgang des Übergangs von gzu fwird als Curry bezeichnet, und funktionierende Programmierer verwenden ihn ständig. In der Berechenbarkeitstheorie ist die Idee, eine Eingabe und eine Ausgabe einer Funktion (eines Algorithmus) vorzunehmen, im Satz von smn enthalten .

Die Antwort auf Ihre Frage lautet "Ja, das machen die Leute die ganze Zeit". Aber es gibt auch eine Moral: Ein Algorithmus, der einen Algorithmus findet, ist immer noch nur ein Algorithmus.

Andrej Bauer
quelle
1
+1 für diesen letzten Satz. Gut gesagt.
John Coleman
f(5)c+ccf(5)f(5)c1+c2c1c2c1>c2
@ Programmer2134 Wären Compiler-Optimierungen das Konzept, an dem Sie interessiert sind? Ich bin mir der Theorie dahinter nicht sicher (insbesondere der Wechselwirkungen mit der Komplexitätstheorie), aber dies könnte ein mögliches Beispiel sein
Markus,
Das zu suchende Schlagwort lautet "Teilbewertung".
Andrej Bauer