In reinen funktionalen Sprachen gibt es einen Algorithmus, um die inverse Funktion?

In reinen funktionalen Sprachen wie Haskell gibt es einen Algorithmus, um die inverse einer Funktion (edit), wenn es bijektive? Und gibt es eine bestimmte Art und Weise zu Programmieren, Ihre Funktion, so dass es ist?

  • Mathematisch ist es nicht falsch zu sagen, dass, im Falle von f x = 1 der Kehrwert von 1 ist ein Satz von Integer-zahlen und der inversen, alles andere ist eine leere Menge. Unabhängig davon, was einige Antworten sagen, die Funktion nicht bijektive ist nicht das größte problem.
  • Die richtige Antwort ist JA, aber es ist nicht effizient. Sei f : A -> B und A endlich, dann, da b€B, "nur" müssen, um prüfen alle f(A) finde alle a€A, f(a)=b. In einem Quanten-computer, vielleicht hätte O(size(a)) Komplexität. Natürlich, Sie suchen einen praktischen Algorithmus. Es ist nicht (ist mit O(2^Größe(a)) ), aber es besteht...
  • QuickCheck macht es genau (schauen Sie für eine False-in f : A -> Bool).
  • Ich bin nicht einverstanden; das ist meist nicht das, was gemeint ist mit inverse. So ziemlich jedes mal stoße ich auf den Begriff, die inverse von f ist eine Funktion g so dass f . g = id und g . f = id. Ihr Kandidat gar nicht typecheck in diesem Fall.
  • du hast Recht. Was ich gesagt habe, nennt man eine inverse Bild, nicht eine inverse-Funktion. Mein Punkt war, dass die Antworten darauf hin, dass f x = 1 hat keine inverse nehmen einen sehr engen Ansatz und ignorieren die ganze Komplexität des Problems.
  • eine inverse" ist genau das gleiche wie zu sagen, das inverse Bild ist ein singleton.
  • Es ist ein verbreiteter Irrtum, dass Quantencomputer bestimmte Vorgänge ausführen können exponentiell viele Kopien der Daten parallel. Denken Sie daran, die Messung ist destruktiv, und die Messung eines verschränkten Wert erzeugt nur einen klassischen Wert. Holevo-Ungleichung sagt, dass die n qubits codieren kann höchstens n bits. Und würde es als sehr überraschend, wenn Quanten-Computer könnte effizient lösen alle NP-Probleme (mehr formal, denken wir, dass NP ⊄ BQP). [cont...]
  • Für den speziellen Fall, die Sie erwähnen—Suche durch eine ungeordnete Liste von Elementen, die Sie verwenden möchten, Grover ' s Algorithmus, der sucht einen Länge-n-Liste in O(√*n*) Zeit auf einem Quanten-computer. Und tatsächlich, Wikipedia sagt, dass "es vielleicht genauer zu beschreiben [Grover' s Algorithmus] als 'Umkehrung eine Funktion ist,'" so dass Sie gehen. Das gibt eine quadratische Beschleunigung: anstelle von O(2^|A|) Zeit zum umkehren einer Funktion, Sie am Ende mit O(2^(|A|/2)) Zeit, und die können nicht besser.
  • Danke @AntalS-Z, ich sagte: "vielleicht hätte", weil "Die Beziehung zwischen BQP und NP ist nicht bekannt"

InformationsquelleAutor MaiaVictor | 2012-11-15
Schreibe einen Kommentar