Ich suche einen Quantenalgorithmus, mit dem ich die Syntax verschiedener Quantensprachen demonstrieren kann. Meine Frage ist , ähnlich wie dies jedoch für mich, „gut“ bedeutet:
- Was es tut, könnte in 1-2 Absätzen beschrieben werden und sollte leicht zu verstehen sein.
- Sollte mehr Elemente der "Quantenprogrammierwelt" verwenden (ich meine, der Algorithmus sollte einige klassische Konstanten, Messungen, Bedingungen, Q-Register, Operatoren usw. verwenden, so viele wie möglich).
- Der Algorithmus sollte klein sein (höchstens 15-25 Pseudocode-Zeilen lang).
Nützliche Algorithmen sind oft zu lang / zu hart, aber der Algorithmus von Deutsch verwendet nicht so viele Elemente. Kann mir jemand einen Demo-Algorithmus vorschlagen?
algorithm
resource-request
programming
Klenium
quelle
quelle
Antworten:
Ich schlage vor, Eigenwert- / Eigenvektor-Schätzprotokolle zu betrachten. Es gibt viel Flexibilität, um das Problem so einfach oder so schwer zu machen, wie Sie möchten.
Beginnen Sie mit der Auswahl von zwei Parametern, und . Sie möchten eine Qubit-Einheit entwerfen, die Eigenwerte der Form für ganze Zahlen . Stellen Sie sicher, dass mindestens einer dieser Eigenwerte eindeutig ist, und nennen Sie ihn . Stellen Sie außerdem sicher, dass ein einfacher Produktzustand, z. B. , eine Überlappung ungleich Null mit dem Eigenvektor des Eigenwerts .n k n U e−2πiq/2k q ω |0⟩⊗n ω
Das Ziel wäre es, einen Phasenschätzungsalgorithmus zu implementieren, dem der Wert mitgeteilt wird und der die Aufgabe hat, einen Vektor , der der Eigenvektor ist, der dem Eigenwert . Im Allgemeinen umfasst dies eine Schaltung mit Qubits (es sei denn, Sie benötigen Ancillas, um Controlled- zu implementieren ).k |ψ⟩ ω n+k U
Dies funktioniert wie folgt:
Der Einfachheit halber könnten Sie , wählen , sodass Sie eine Einheitsmatrix mit Eigenwerten benötigen . Ich würde so etwas wie wobei das kontrollierte-NICHT bezeichnet. Es gibt nur einen Eigenvektor mit dem Eigenwert -1, nämlich , und Sie kann mit den Auswahlmöglichkeiten von und , um die Implementierung von mithilfe der Zerlegung in Bezug auf einen universellen Gate-Satz zu untersuchen (ich würde dies wahrscheinlich als vorläufiges Problem festlegen). Dann gesteuert-n=2 k=1 4×4 ±1
Für etwas komplexeres setzen Sie und ersetzen Sie durch die Quadratwurzel des Swap-Gates mit und .C ( 1 0 0 0 0 1k=3 C ω=e±iπ/4| & psgr;⟩=(U1⊗U2)(|01⟩±|10⟩)/√
quelle
Klingt so, als ob Sie ein Quantum "Hello World" wollen. Die einfachste Quantenversion davon wäre einfach, eine binär codierte Version des Textes
Hello World
in ein Register von Qubits zu schreiben . Dies würde jedoch ~ 100 Qubits erfordern und länger als Ihre Obergrenze für die Codelänge sein.Schreiben wir also ein kürzeres Stück Text. Lassen Sie uns schreiben
;)
, wir brauchen eine Bitfolge der Länge 16. Insbesondere mit ASCII-CodierungMit QISKit tun Sie dies mit dem folgenden Code.
Das ist natürlich nicht sehr quantitativ. Sie können also stattdessen zwei verschiedene Emoticons überlagern. Das einfachste Beispiel ist das Überlagern;) mit 8), da sich die Bitfolgen für diese nur bei den Qubits 8 und 9 unterscheiden.
So können Sie einfach die Leitungen ersetzen
von oben mit
Der Hadamard erzeugt eine Überlagerung von
0
und1
, und der cnot macht es zu einer Überlagerung von00
und11
auf zwei Qubits. Dies ist die einzige erforderliche Überlagerung für;)
und8)
.Wenn Sie eine tatsächliche Implementierung sehen möchten, finden Sie diese im QISKit-Tutorial (vollständige Offenlegung: Sie wurde von mir geschrieben).
quelle
Ich würde den (perfekten) 1-Bit-Zufallszahlengenerator vorschlagen. Es ist fast trivial einfach:
Sie beginnen mit einem einzelnen Qubit im üblichen Ausgangszustand . Dann wenden Sie das Hadamard-Gate , das die gleiche Überlagerung von und . Schließlich messen Sie dieses Qubit, um entweder 0 oder 1 mit einer Wahrscheinlichkeit von jeweils 50% zu erhalten. H | 0 ⟩ | 1 ⟩|0⟩ H |0⟩ |1⟩
quelle