Wenn ich es richtig verstehe, hat ein Algorithmus, der den Wert einer reellen Funktion berechnet, eine Rechenkomplexität wenn Folgendes zutrifft: Wenn wir auf Genauigkeit berechnen , erfordert in der Größenordnung von Schritte.
Was aber, wenn wir einen Algorithmus haben, der zuerst "einen effizienteren Algorithmus zur Berechnung von " und dann berechnet ?
Mit anderen Worten, was ist, wenn wir einen Algorithmus , der Folgendes ausführt:
Finden Sie einen effizienten Algorithmus für die Berechnung von .
benutze um f zu berechnen .
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.
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.
quelle
Antworten:
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 .
quelle
Angenommen, wir haben eine Funktion,
f
die ein Argumentx
vom Typ annimmt und eineA
andere Funktion ausgibt, die ein Argumenty
vom Typ annimmtB
und ein Ergebnis vom Typ zurückgibtC
. Nimmt in Ihren Wortenf
ein Argumentx
und gibt einen "Algorithmus" zurück, der Eingaben vom TypB
und Ergebnisse vom Typ ausgibtC
.Die Funktion
f
hat den TypTatsächlich nimmt es
x : A
eine Funktion vom Typ und gibt sie zurückB → C
. Aber eine solchef
entspricht eine Funktion ,g : A × B → C
die nimmt beidex
undy
auf einmal und gibt Ihnen das Endergebnis. In der Tat gibt es einen Isomorphismus zwischen den Typenund
weil wir
g
in Bezug auff
als definieren könnenund wir können definieren ,
f
in Bezug auf dieg
alsDer Vorgang des Übergangs von
g
zuf
wird 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.
quelle