Автор Маколи Коггинс
Что такое сверхплотное кодирование?
Сверхплотное кодирование — это протокол квантовой связи, который позволяет пользователю отправлять 2 классических бита, отправляя только 1 кубит.
Протокол
Шаг 1: Подготовка пары колоколов
Сначала подготавливается пара колоколов, состоящая из 2 кубитов. Где q0 — кубит отправителя, а q1 — кубит получателя. Для этого q0 помещается в суперпозицию состояний с помощью вентиля Адамара.
Затем выполняется операция CNOT с q0 в качестве управления и q1 в качестве цели.
Шаг 2: закодируйте информацию в Q0
Затем отправитель должен закодировать информацию, которую он хочет отправить, на q0, применяя к ней определенные операции.
- Если они хотят отправить 00, они не выполняют никаких действий.
- Если они хотят отправить 01, они выполняют операцию Pauli-X, в которой состояние q1s переворачивается.
- Если они хотят отправить 10, они применяют ворота Паули-Z.
- Если они хотят отправить 11, примените вентиль Pauli-Z, а затем вентиль Pauli-X.
Шаг 3: Получатель декодирует информацию
Затем отправляется q0, и получатель должен декодировать кубит. Это делается путем применения CNOT, где полученное q0 является контрольным, а q1 является целевым. Затем к q0 применяется вентиль Адамара.
Как запустить программу
- Скопируйте и вставьте приведенный ниже код в файл Python.
- Введите токен API в часть IBMQ.enable_account('Вставьте токен API')
- Сохранить и запустить
Код
print('\n Superdense Coding')
print('--------------------------\n')
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute,IBMQ
IBMQ.enable_account('INSERT TOKEN HERE')
provider = IBMQ.get_provider(hub='ibm-q')
q = QuantumRegister(2,'q')
c = ClassicalRegister(2,'c')
backend = provider.get_backend('ibmq_qasm_simulator')
print('Provider: ',backend)
#################### 00 ###########################
circuit = QuantumCircuit(q,c)
circuit.h(q[0]) # Hadamard gate applied to q0
circuit.cx(q[0],q[1]) # CNOT gate applied
circuit.cx(q[0],q[1])
circuit.h(q[0])
circuit.measure(q,c) # Qubits measured
job = execute(circuit, backend, shots=10)
print('Executing Job...\n')
result = job.result()
counts = result.get_counts(circuit)
print('RESULT: ',counts,'\n')
#################### 01 ###########################
circuit = QuantumCircuit(q,c)
circuit.h(q[0])
circuit.cx(q[0],q[1])
circuit.x(q[0]) # X-gate applied
circuit.cx(q[0],q[1])
circuit.h(q[0])
circuit.measure(q,c)
job = execute(circuit, backend, shots=10)
print('Executing Job...\n')
result = job.result()
counts = result.get_counts(circuit)
print('RESULT: ',counts,'\n')
#################### 10 ###########################
circuit = QuantumCircuit(q,c)
circuit.h(q[0])
circuit.cx(q[0],q[1])
circuit.z(q[0]) # Z-gate applied to q0
circuit.cx(q[0],q[1])
circuit.h(q[0])
circuit.measure(q,c)
job = execute(circuit, backend, shots=10)
print('Executing Job...\n')
result = job.result()
counts = result.get_counts(circuit)
print('RESULT: ',counts,'\n')
#################### 11 ###########################
circuit = QuantumCircuit(q,c)
circuit.h(q[0])
circuit.cx(q[0],q[1])
circuit.z(q[0]) # Z-gate applied
circuit.x(q[0]) # X-gate applied
circuit.cx(q[0],q[1])
circuit.h(q[0])
circuit.measure(q,c)
job = execute(circuit, backend, shots=10)
print('Executing Job...\n')
result = job.result()
counts = result.get_counts(circuit)
print('RESULT: ',counts,'\n')
print('Press any key to close')
input()
Вывод
После запуска кода вы увидите на экране что-то вроде следующего:
Хотите узнать больше о квантовых вычислениях? Проверьте Quantum Daily (www.thequantumdaily.com) или Quantum Computing UK (https://quantumcomputinguk.org)
Пост Quantum Programming 101: Superdense Coding Tutorial впервые появился на Qvault.