Gibt es einen verallgemeinerten Algorithmus zum Finden der Umkehrfunktion einer beliebigen bijektiven Funktion?
- Damit dieser Algorithmus nützlich ist, muss er eventuell angehalten werden, sobald die richtige Antwort gefunden wurde.
- Abgesehen von der Anforderung, dass die Lösung irgendwann gefunden werden muss, gibt es keine zeitlichen Einschränkungen hinsichtlich der Zeit, die zum Auffinden oder Ausführen der inversen Funktion benötigt wird (in diesem Sinne wäre etwas Besseres als Bruteforce-Guess-and-Check interessanter).
Wenn beispielsweise ein solcher verallgemeinerter Algorithmus existiert, könnte er nach einem Dekomprimierungsalgorithmus für einen verlustfreien Komprimierungsalgorithmus suchen.
BEARBEITEN:
Ich mochte die Annahmen von Evgenij Thorstensen sehr, da sie meine Frage ziemlich gut zusammenfassten.
Annahmen
- Berechenbare bijektive Funktionen über ein festes Alphabet (sagen wir {0, 1})
- Dargestellt durch eine deterministische Turing-Maschine (DTM), die sie berechnet
- Der vorgeschlagene Algorithmus könnte nach einem DTM suchen, der die ursprüngliche Ausgabe der bijektiven Funktion invertiert.
Ein weiterer Versuch, es zu erklären:
Gegeben: Bijektive Funktion F
, die X von Domäne A auf Y von Domäne B abbildet.
Der vorgeschlagene Algorithmus sollte in der Lage sein, nach einer Bijektivfunktion zu suchen G
, die Y von Domäne B auf X von Domäne A abbildet, so dass G(F(X))=X
und F * G = I
wo I
sich die Identitätsfunktion befindet.
ds.algorithms
Kendall Hopkins
quelle
quelle
Antworten:
Es gab Artikel über die automatische Umwandlung von Algorithmen für bijektive Funktionen in Algorithmen für die inverse Funktion; Mein erstes eigenes Konferenzpapier war eines davon. Die Klasse der Algorithmen, die auf diese Weise invertiert werden können, ist jedoch stark eingeschränkt, wie die anderen Antworten bereits nahe legen.
quelle
In einer völlig unstrukturierten Domäne ist das Beste, was Sie tun können, die Brute-Force-Suche, deren Zeit in der Größe der Domäne linear ist. Wenn es sich bei der Domäne jedoch um n-Bit-Zeichenfolgen handelt, ist dies in n exponentiell.
(Beachten Sie, dass bei einem effizienten Wechselrichter mit vollständig allgemeinen Funktionen durch Invertieren der Ganzzahlmultiplikationsfunktion ein effizienter Faktorisierungsalgorithmus erhalten wird.)
quelle
Wie @arnab in den Kommentaren hervorhob, sind Einwegpermutationen ein kryptografisches Grundelement. Wenn Sie beliebige Funktionen effizient invertieren möchten, müssen Sie (zusätzlich zum Factoring) kryptografische Barrieren überwinden.
quelle
Wie viele auf dieser Seite bereits darauf hingewiesen haben, könnte die Lösung im Allgemeinen unlösbar sein.
Wenn Sie an invertierbarer Programmierung interessiert sind, ist nicht alles verloren. Eine Alternative zum Finden der Inversen für eine bestimmte Funktion besteht darin, Ihre Funktion aus der Zusammensetzung invertierbarer Funktionen zu konstruieren. In diesem Fall ist das Finden der Inversen trivial.
Ein Beispiel für diesen Ansatz (unter Verwendung von Haskell) wird in diesem Dokument erläutert: http://www.cs.ru.nl/A.vanWeelden/bi-arrows/
Zufällig habe ich Biarrows verwendet, um nur eine Richtung eines Komprimierungsalgorithmus zu schreiben und die andere (Dekomprimierung) kostenlos zu erhalten (kostenlos ist möglicherweise das falsche Wort, die Verwendung ist schwierig, da keine Sprachunterstützung vorhanden ist). .
quelle
Hier ist ein handgewellter Algorithmus unter einigen starken Annahmen.
Annahmen
Mit diesen Annahmen können wir den Eingabe-DTM betrachten und alle Übergänge invertieren (Haltezustände werden zu Startzuständen, Lesen wird zu Schreiben und umgekehrt, wir lesen vom Ende, links ist rechts usw.). Da das TM deterministisch ist und die berechnete Funktion bijektiv ist, ist das Ergebnis auch ein TM und berechnet das Inverse.
Beachten Sie, dass dies beim Factoring nicht funktioniert, da die Multiplikation nicht bijektiv ist. Die Multiplikation von Primzahlen ist , wenn wir die Reihenfolge nicht berücksichtigen, aber ein TM, das Zahlen multipliziert, nicht "nur" die gewünschte bijektive Funktion berechnet, sondern "zu viel", daher meine zweite Annahme (ja, es ist ziemlich stark). Dies passt gut zu den Kommentaren zur Repräsentation.
quelle