Szukam algorytmu kwantowego, którego mogę użyć do zademonstrowania składni różnych języków kwantowych. Moje pytanie jest podobne do tego , jednak dla mnie „dobre” oznacza:
- To, co robi, można opisać w 1-2 akapitach i powinno być łatwe do zrozumienia.
- Powinien wykorzystywać więcej elementów „świata programowania kwantowego” (mam na myśli, że algorytm powinien wykorzystywać niektóre klasyczne stałe, pomiary, warunki, rejestry q, operatory itp., Jak najwięcej).
- Algorytm powinien być mały (maksymalnie 15-25 linii pseudokodu).
Przydatne algorytmy są często zbyt długie / trudne, ale algorytm Deutscha nie wykorzystuje tak wielu elementów. Czy ktoś może zasugerować mi algorytm demo?
algorithm
resource-request
programming
klenium
źródło
źródło
Odpowiedzi:
Sugeruję spojrzenie na protokoły szacowania wartości własnej / wektora własnego. Istnieje duża elastyczność, dzięki której problem jest tak łatwy lub trudny, jak chcesz.
Zacznij od wybrania dwóch parametrów, i . Chcesz zaprojektować qubit unitary, który ma wartości własne w postaci dla liczb całkowitych . Upewnij się, że przynajmniej jedna z tych wartości własnych jest unikalna i nazwij ją . Upewnij się także, że prosty stan produktu, powiedzmy , ma niezerowe nakładanie się z wektorem własnym wartości własnej .n k n U mi- 2 πja q/2)k q ω | 0⟩. N ω
Celem byłoby zaimplementowanie w tym celu algorytmu szacowania faz, otrzymaniu wartości i zadania polegającego na wygenerowaniu wektora który jest wektorem własnym odpowiadającym wartości własnej . Zasadniczo będzie to obwód kubitów (chyba że potrzebujesz ancillas do wdrożenia kontrolowanego- ).k | * F⟩ ω n + k U
Działa to w następujący sposób:
Dla uproszczenia możesz wybrać , , więc potrzebujesz macierzy z wartościami własnymi . czegoś takiego jak gdzie oznacza kontrolowane NIE. Jest tylko jeden wektor własny z wartością własną -1, którym jest , a ty zadzierać z wyborem i aby zbadać implementację przy użyciu rozkładu w kategoriach uniwersalnego zestawu bramek (prawdopodobnie to jako problem wstępny). Następnie kontrolowany -n = 2 k = 1 4 × 4 ± 1
Dla czegoś nieco bardziej złożonego, wstaw i zamień na pierwiastek kwadratowy bramki wymiany, z i .k=3 C
źródło
Wygląda na to, że chcesz kwantowego „Hello World”. Najprostszą wersją kwantową byłoby zapisanie binarnie zakodowanej wersji tekstu
Hello World
w rejestrze kubitów. Wymagałoby to jednak około 100 kubitów i byłoby dłuższe niż górny limit długości kodu.Napiszmy więc krótszy fragment tekstu. Napiszmy
;)
, potrzebujemy łańcucha bitów o długości 16. W szczególności, używając kodowania ASCIIKorzystając z QISKit, możesz to zrobić przy użyciu następującego kodu.
Oczywiście nie jest to bardzo kwantowe. Możesz zamiast tego nałożyć superpozycję dwóch różnych emotikonów. Najłatwiejszym przykładem jest nałożenie;) 8), ponieważ ciągi bitów dla nich różnią się tylko qubitami 8 i 9.
Możesz więc po prostu zamienić linie
z powyższego za pomocą
Hadamard tworzy superpozycję
0
i1
, a węzeł zamienia się w superpozycję00
i11
na dwóch kubitach. Jest to jedyna wymagana superpozycja dla;)
i8)
.Jeśli chcesz zobaczyć faktyczną implementację tego, można go znaleźć w tutorialu QISKit (pełne ujawnienie: zostało napisane przeze mnie).
źródło
Proponuję (idealny) 1-bitowy generator liczb losowych. Jest to prawie banalnie łatwe:
Zaczynasz z pojedynczym kubitem w zwykłym stanie początkowym . Następnie zastosujesz bramę Hadamarda która wytwarza równe nałożenie i . Na koniec mierzysz ten kubit, aby uzyskać 0 lub 1, każdy z 50% prawdopodobieństwem.|0⟩ H |0⟩ |1⟩
źródło