Автор Маколи Коггинс

Что такое сверхплотное кодирование?

Сверхплотное кодирование — это протокол квантовой связи, который позволяет пользователю отправлять 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 применяется вентиль Адамара.

Как запустить программу

  1. Скопируйте и вставьте приведенный ниже код в файл Python.
  2. Введите токен API в часть IBMQ.enable_account('Вставьте токен API')
  3. Сохранить и запустить

Код

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.