# introduccion-a-la-computacion-cuantica-con-qiskit
Introducción a la computación cuántica con Qiskit
Volver a la portada del cursoEstructura de un Circuito Cuántico
Sección 2 · Fundamentos de Qiskit
Estructura de un circuito cuántico
Un circuito cuántico es la unidad de trabajo en Qiskit: una secuencia ordenada de operaciones sobre qubits que termina, casi siempre, con mediciones. Entender sus piezas te permite leer cualquier diagrama, depurar resultados inesperados y preparar circuitos que el hardware pueda ejecutar. En esta lección recorres esa estructura con el notebook de la lección.
Las piezas de un circuito
- Qubits: las líneas horizontales del diagrama. Todos empiezan en el estado $|0\rangle$.
- Bits clásicos: guardan el resultado de cada medición, que siempre es 0 o 1.
- Puertas: operaciones que transforman el estado de uno o varios qubits, como
h,xocx. - Mediciones: convierten un qubit en un bit clásico. Después de medir, la superposición se pierde.
- Barreras: separadores visuales que además impiden que el transpilador mueva operaciones de un lado a otro.
El diagrama se lee de izquierda a derecha, como una línea de tiempo. Cada columna agrupa operaciones que pueden ocurrir al mismo tiempo.
Crear un circuito
QuantumCircuit(2, 2) crea dos qubits y dos bits clásicos. Luego se agregan las puertas llamando métodos del circuito, y measure indica qué qubit se guarda en qué bit:
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.barrier()
qc.measure([0, 1], [0, 1])
print(qc.draw("text"))
print("Qubits:", qc.num_qubits, "| Bits clásicos:", qc.num_clbits)
print("Profundidad:", qc.depth(), "| Operaciones:", dict(qc.count_ops()))
La profundidad es el número de capas de operaciones que deben ejecutarse una después de otra. Importa porque los qubits reales pierden su información con el tiempo: un circuito más profundo acumula más errores.
measure_all: la forma corta
Si quieres medir todos los qubits, measure_all() crea los bits clásicos por ti, agrega una barrera y mide cada qubit. En ese caso, los resultados del Sampler se leen desde data.meas. Si defines los bits a mano, el registro se llama c y se lee desde data.c. Confundir estos nombres es uno de los errores más frecuentes al empezar.
El orden de los bits
Qiskit ordena los bits de derecha a izquierda: el qubit 0 es el dígito de la derecha en el resultado. Si aplicas una x solo al qubit 0 de un circuito de tres qubits, el resultado es 001, no 100:
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(3)
qc.x(0)
qc.measure_all()
conteos = StatevectorSampler(seed=1).run([qc], shots=100).result()[0].data.meas.get_counts()
print(conteos)
Esta convención, llamada little-endian, coincide con la forma de escribir números binarios: el bit menos significativo va a la derecha.
Registros con nombre
En circuitos más grandes conviene agrupar qubits en registros con nombre, por ejemplo QuantumRegister(2, "datos") y ClassicalRegister(2, "resultado"). Los diagramas se vuelven más legibles y el resultado se lee desde data.resultado. Es la misma idea que dar nombres claros a las variables.
Qué verás en el notebook
- Cómo crear circuitos con y sin bits clásicos, y cómo dibujarlos.
- Cómo inspeccionar profundidad, tamaño y conteo de operaciones.
- El orden de los bits comprobado con ejemplos.
- Registros con nombre y cómo leer sus resultados.
Trampas comunes
- Leer el resultado al revés. Recuerda que el qubit 0 va a la derecha.
- Usar
data.cconmeasure_all. Ese registro se llamameas. - Medir y luego seguir operando. Tras la medición, el qubit ya no está en superposición.
- Olvidar la medición. Un circuito sin mediciones no produce conteos en el
Sampler.
Cierre
Cada circuito que escribas en el curso sigue la misma estructura: preparar qubits, aplicar puertas y medir. Antes de ejecutar, revisa siempre el dibujo con draw(): es la forma más rápida de detectar un error de índices.