На этой неделе я решил покрыть алгоритм Deutsch. Алгоритм Deutsch – это простая демонстрация квантовой параллелизма и помех. Итак, сначала позвольте мне объяснить квантовую параллелизм и помехи.
Квантовая параллельность
Квантовая параллелизм – это способность квантовой памяти существовать в суперпозиции состояний. Таким образом, это означает, что любой бит или кубит памяти может одновременно быть 1 или 0. Это позволяет более быстрым расчетам сложных проблемах, поскольку весь диапазон переменных можно проверить одновременно. Это, однако, приводит к нескольким результатам того, что может быть решение. Эти выходы прикреплены к вероятности того, насколько правильны ответ. Одним из главных применений алгоритма Deutsch является имитировать эту проблему и вывести ответ.
Квантовые помехи
Квантовая вмешательство является результатом суперпозиции. В квантовых компьютерах это позволяет распад нескольких состояний в вероятностях желаемого результата. Затем, используя алгоритм, похожий на тот, который пояснил позже в этой статье, решение может быть легко определено из этих переменных.
Что такое алгоритм Deutsch
Алгоритм Deutsch был создан Дэвидом Deutsch и Richard Jozsa в 1992 году как простой пример того, как квантовые компьютеры могут легко превзойти стандартный компьютер. Алгоритм определяет, является ли функция сбалансированной или постоянной на основе двух отдельных входов. Если эти входные данные одинаковы, функция возвращает ноль, в противном случае он возвращает один. Чтобы решить эту функцию, используя классический компьютер, оба входа должны рассматриваться отдельно, но с использованием квантового компьютера это можно сделать одновременно из-за свойств, объясненных в первых двух разделах.
Чтобы перевести это в код сначала мы должны импортировать случайные, CIRQ, и сделать нашу жизнь легче импортировать некоторые из методов CIRQ
import random import cirq from cirq import H, X, CNOT, measure
Тогда мы должны создать два функция помощника. Первая функция делает Oracle, которая определит то, что есть каждое число, а затем возвращает моменты схемы на основе этого номера. Тогда другой создает цепь, которую мы будем использовать к концу основной функции.
def make_oracle(q0, q1, secret_numbers): if secret_numbers[0]: yield[CNOT(q0,q1), X(q1)] #if the first number is 1 yield #CNOT gate and X gate moments if secret_numbers[1]: yield CNOT(q0, q1) #if the second number #is 1 yield CNOT gate def make_circuit(q0, q1, oracle): c = cirq.Circuit() c.append([X(q1), H(q1), H(q0)]) #append X gate and #two H gates to the circuit c.append(oracle) #append oracle to circuit c.append([H(q0), measure(q0, key='result')]) #append H gate on first qubit #and then a mesure function to determine the output. return c
Теперь, поскольку это сделано, все, что осталось, это создать два линейке, создавать список случайных чисел, вызовите наш помощник функции, а затем запустить их через симулятор.
def main(): q0, q1 = cirq.LineQubit.range(2) #create 2 qubits secret_numbers = [random.randint(0,1) for i in range(2)] #create list of two numbers oracle = make_oracle(q0, q1, secret_numbers) #create oracle moment to process #the numbers in the list print('Secret function:\nf(x) = <{}>'.format(', '.join(str(e) for e in secret_numbers))) #print out list numbers circuit = make_deutsch_circuit(q0,q1, oracle) #create circuit print("Circuit:") print(circuit) #print it out simulator = cirq.Simulator() #create simulator result = simulator.run(circuit) #run circuit through simulator print('Result of f(0)⊕f(1):') print(result) #print result if __name__ == '__main__': main()
Это простое приложение квантовых компьютеров и в будущем, я опубликую несколько сложных примеров. Я рекомендую вам несколько раз запускать это несколько раз, чтобы увидеть различные выходы и схемы, которые создаются. Для некоторых примеров большего количества ворот или читать на те, которые перечислены здесь, переходят на Ворота .
Оригинал: “https://dev.to/dmarcr1997/deutsch-s-algorithm-4cc”