Docs
Ir a plataforma

Fundamento teórico Deutsch–Jozsa

Autor

Retrato de Noguerón Méndez José Antonio
Noguerón Méndez José Antonio Head of Quantum Product

Algoritmo de Deutsch-Jozsa: consulta cuántica única al oráculo y discriminación por interferencia

El algoritmo de Deutsch-Jozsa, formulado por David Deutsch y Richard Jozsa en 1992, fue históricamente el primer algoritmo cuántico en demostrar una ventaja exponencial sobre cualquier algoritmo clásico determinista para un problema bien definido. Su importancia radica no solo en el resultado práctico, sino en que introdujo el paradigma de computación asistida por oráculo que subyace a algoritmos más poderosos como el de Grover y el de Shor.

Matemáticamente, el problema es una promesa sobre una función booleana \(f: \{0,1\}^n \to \{0,1\}\): o bien es constante, o bien equilibrada en el sentido combinatorio habitual. La solución cuántica explota la interferencia inducida por \(H^{\otimes n}\) antes y después de un oráculo de fase obtenido mediante ancilla en \(|{-}\rangle\). En simuladores HarmoniQ, la lectura del bit de salida tras ruido de puerta exige distinguir la probabilidad residual en el estado «incorrecto» de fluctuaciones de muestreo finito.

Intermedio 2 cúbits 5 puertas Hopper / Hermann

Fundamento teórico

El problema de promesa

Se considera una función booleana \(f: \{0,1\}^n \to \{0,1\}\) sobre la que se garantiza (promesa) que pertenece a exactamente una de dos clases:

  • Constante: \(f(x) = c\) para todo \(x \in \{0,1\}^n\), con \(c \in \{0,1\}\).
  • Balanceada: \(f\) retorna \(0\) exactamente en la mitad de las entradas y \(1\) en la otra mitad.

El objetivo es determinar a cuál de las dos clases pertenece \(f\) consultando al oráculo \(\mathcal{O}_f\) el menor número posible de veces. Un algoritmo clásico determinista necesita, en el peor caso, \(2^{n-1} + 1\) consultas para distinguir ambas clases. El algoritmo cuántico de Deutsch-Jozsa lo resuelve con exactamente una consulta, independientemente de \(n\).

El oráculo cuántico de fase

El oráculo cuántico implementa la función \(f\) como una operación unitaria sobre dos registros: el registro de entrada \(|x\rangle\) y un cúbit ancilla \(|a\rangle\): \[ \mathcal{O}_f : |x\rangle|a\rangle \mapsto |x\rangle|a \oplus f(x)\rangle, \] donde \(\oplus\) denota la suma módulo 2. Inicializando la ancilla en \(|{-}\rangle = \frac{|0\rangle - |1\rangle}{\sqrt{2}}\), el oráculo produce la transformación de phase kickback: \[ \mathcal{O}_f |x\rangle|{-}\rangle = (-1)^{f(x)}|x\rangle|{-}\rangle. \] El estado de la ancilla no cambia; solo adquiere una fase global relativa al valor de \(f(x)\), que queda codificada en la amplitud del registro de entrada.

Ventaja cuántica y transformada de Hadamard

La clave es aplicar la transformada de Hadamard \(H^{\otimes n}\) al registro de entrada antes y después del oráculo. La transformada de Hadamard sobre \(n\) cúbits mapea cada estado de la base a la superposición: \[ H^{\otimes n}|x\rangle = \frac{1}{\sqrt{2^n}} \sum_{y=0}^{2^n-1} (-1)^{x \cdot y}|y\rangle, \] donde \(x \cdot y\) es el producto interior bit a bit. La composición \(H^{\otimes n} \circ \mathcal{O}_f \circ H^{\otimes n}\) produce una interferencia constructiva en \(|0\rangle^{\otimes n}\) si \(f\) es constante y destructiva si \(f\) es balanceada:

\[ \text{Estado final del registro de entrada} = \frac{1}{2^n}\sum_{y}\left(\sum_x (-1)^{f(x)+x\cdot y}\right)|y\rangle. \] Si \(f\) es constante, la amplitud de \(|0\rangle^{\otimes n}\) es \(\pm 1\) y la probabilidad de medirlo es 1. Si \(f\) es balanceada, la amplitud de \(|0\rangle^{\otimes n}\) es 0 y la probabilidad de medirlo es 0. Una única medición basta para discriminar ambos casos.

Complejidad de consulta y comparación con algoritmos clásicos

En el modelo de consulta al oráculo, el coste se mide únicamente por el número de llamadas a \(\mathcal{O}_f\). Cualquier algoritmo clásico determinista que distinga funciones constantes de balanceadas requiere, en el peor caso, \(2^{n-1}+1\) consultas: hasta \(2^{n-1}\) respuestas idénticas no descartan la clase balanceada. El algoritmo cuántico exhibido usa una sola consulta cuántica al oráculo en el registro adecuadamente preparado.

Un algoritmo clásico aleatorio puede resolver el problema en \(\mathcal{O}(1)\) consultas esperadas muestreando entradas al azar hasta hallar dos valores distintos de \(f\) o agotar un criterio de parada; por ello la separación cuántico–clásico más honesta se formula en el régimen determinista o contra oráculos adversos. La lección pedagógica permanece: la interferencia cuántica global puede condensar en una medición la información que clásicamente exige exploración extensiva del dominio.

\[ \langle 0|^{\otimes n} H^{\otimes n} U_f H^{\otimes n} |0\rangle^{\otimes n} = \frac{1}{2^n} \sum_{x \in \{0,1\}^n} (-1)^{f(x)}. \]

Si \(f\) es constante, la suma es \(\pm 2^n\) y la amplitud de \(|0\rangle^{\otimes n}\) tiene módulo unidad. Si \(f\) es balanceada, los términos se cancelan par a par y dicha amplitud es nula. Esta dicotomía es puramente algebraica y no depende de la representación interna del oráculo, siempre que implemente la fase \((-1)^{f(x)}\) sobre la superposición uniforme.

Implementación en \(n\) cúbits y robustez frente a ruido

La extensión a \(n > 1\) mantiene la estructura: preparación de ancilla en \(|{-}\rangle\), superposición uniforme en el registro de datos, oráculo de fase, segunda capa Hadamard y medición en la base computacional. La profundidad del circuito crece con la descomposición del oráculo \(U_f\) en puertas nativas; en la práctica, la ventaja asintótica puede verse erosionada por tasas de error por puerta y por decoherencia antes de que \(n\) alcance valores interesantes en hardware ruidoso.

En HarmoniQ, los backends Hopper y Hermann modelan ruido phenomenológico en puertas; la fidelidad compuesta de la secuencia de cinco puertas del ejemplo de dos cúbits permite cuantificar la probabilidad residual en el estado no deseado y compararla con la varianza estadística \(\mathcal{O}(1/\sqrt{N_{\text{shots}}})\) del estimador de frecuencias.

Circuito cuántico (2 cúbits, función balanceada \(f(x)=x\))

En la implementación de 2 cúbits, \(q_0\) es el registro de entrada (\(n=1\) bit) y \(q_1\) es la ancilla. El oráculo para la función balanceada \(f(x) = x\) se implementa con una puerta CNOT con control en \(q_0\) y objetivo en \(q_1\).

q₀ (entrada) : ─────[H]────────[H]──── ┤M├ q₁ (ancilla): [X] [H]────────────────────── Estado: |00⟩ → |+−⟩ → oráculo → |10⟩ o |00⟩

Paso 1 — Preparación de la ancilla: \(q_1\) se lleva a \(|1\rangle\) con la puerta X y luego a \(|{-}\rangle\) con Hadamard. Esto activa el mecanismo de phase kickback.

Paso 2 — Superposición del registro de entrada: \(q_0\) se lleva a \(|{+}\rangle\) con Hadamard, creando el estado global \(|{+}\rangle|{-}\rangle = \frac{1}{2}(|0\rangle + |1\rangle)(|0\rangle - |1\rangle)\).

Paso 3 — Oráculo (CNOT): implementa \(f(x)=x\) (función balanceada). El phase kickback transforma \(|{+}\rangle\) en \(|{-}\rangle\) en el registro de entrada.

Paso 4 — Hadamard de inversión: transforma \(|{-}\rangle\) de nuevo a \(|1\rangle\), por lo que la medición de \(q_0\) siempre produce 1 → función balanceada. Si se usara un oráculo constante, el resultado sería siempre 0.

Implementación en HarmoniQ

La secuencia de puertas es: x en \(q_1\), h en \(q_0\), h en \(q_1\), cnot (control \(q_0\), objetivo \(q_1\)) y finalmente h en \(q_0\). Solo \(q_0\) se mide. La ancilla \(q_1\) no se incluye en el resultado de interés.

Swift

DeutschJozsa.swift

import HarmoniQ

// Oráculo para función balanceada f(x) = x
let gates: [Gate] = [
    Gate(name: "x",    targets: [1]),          // ancilla → |1⟩
    Gate(name: "h",    targets: [0]),          // entrada en superposición
    Gate(name: "h",    targets: [1]),          // ancilla → |−⟩
    Gate(name: "cnot", targets: [1], controls: [0]),  // oráculo
    Gate(name: "h",    targets: [0]),          // inversión
]

do {
    let result = try await HarmoniQ.quantum.executeCircuit(
        provider: "hopper",
        shots:    1024,
        qubits:   2,
        bits:     2,
        gates:    gates,
        basis:    "Z"
    )
    // Balanceada → q₀ = 1 → estado "10" dominante
    // Constante  → q₀ = 0 → estado "00" dominante
    let dominant = result.mostFrequent
    let tipo = dominant.hasPrefix("0") ? "Constante" : "Balanceada"
    print("Función: \(tipo)")
} catch {
    print("Error:", error)
}

Kotlin

DeutschJozsa.kt

import com.planq.harmoniq.HarmoniQ
import com.planq.harmoniq.model.Gate

val gates = listOf(
    Gate(name = "x",    targets = listOf(1)),
    Gate(name = "h",    targets = listOf(0)),
    Gate(name = "h",    targets = listOf(1)),
    Gate(name = "cnot", targets = listOf(1), controls = listOf(0)),
    Gate(name = "h",    targets = listOf(0)),
)

viewModelScope.launch {
    val result = HarmoniQ.quantum.executeCircuit(
        provider = "hopper",
        shots    = 1024,
        qubits   = 2,
        bits     = 2,
        gates    = gates,
        basis    = "Z"
    )
    val tipo = if (result.mostFrequent.startsWith("0")) "Constante" else "Balanceada"
    Log.d("DJ", "Función: $tipo | Distribución: ${result.counts}")
}

React / TypeScript

deutschJozsa.ts

import { HarmoniQ } from './lib/quantum'
import type { Gate } from '@planq/harmoniq'

const gates: Gate[] = [
  { name: 'x',    targets: [1] },
  { name: 'h',    targets: [0] },
  { name: 'h',    targets: [1] },
  { name: 'cnot', targets: [1], controls: [0] },
  { name: 'h',    targets: [0] },
]

const result = await HarmoniQ.quantum.executeCircuit({
  provider: 'hopper',
  shots:    1024,
  qubits:   2,
  bits:     2,
  gates,
  basis:    'Z',
})

const tipo = result.mostFrequent.startsWith('0') ? 'Constante' : 'Balanceada'
console.log(`Función: ${tipo}`, result.counts)

Python

deutsch_jozsa.py

from harmoniq import HarmoniQ, Gate

gates = [
    Gate(name="x",    targets=[1]),
    Gate(name="h",    targets=[0]),
    Gate(name="h",    targets=[1]),
    Gate(name="cnot", targets=[1], controls=[0]),
    Gate(name="h",    targets=[0]),
]

result = HarmoniQ.quantum.execute_circuit(
    provider="hopper",
    shots=1024,
    qubits=2,
    bits=2,
    gates=gates,
    basis="Z",
)

tipo = "Constante" if result.most_frequent.startswith("0") else "Balanceada"
print(f"Función: {tipo}")
print("Distribución:", result.counts)

Análisis de resultados

Dado que este ejemplo implementa la función balanceada \(f(x) = x\), el estado final de \(q_0\) es \(|1\rangle\) con probabilidad teórica 1. Los resultados esperados tras 1024 shots son:

EstadoFunciónProbabilidad idealConteo típico
|10⟩Balanceada1.000990 – 1024
|00⟩Constante0.0000 – 34

Los conteos en |00⟩ con función balanceada son únicamente debidos al ruido del simulador. Para evaluar la fidelidad del algoritmo se puede calcular la tasa de éxito: \[\text{Fidelidad} = \frac{\text{conteo}(|10\rangle)}{N_{\text{shots}}}.\] Con el backend Hopper, la fidelidad típica supera el 97%, coherente con la composición de errores de las cinco puertas empleadas.

Para cambiar al oráculo constante (\(f(x) = 0\)) basta con eliminar la puerta CNOT de la lista de puertas. En ese caso, el estado dominante será |00⟩.

Referencias y lecturas recomendadas

La selección siguiente orienta al lector hacia monografías y recursos cuya rigurosidad ha sido contrastada por la comunidad científica; complementa la bibliografía citada al pie de esta guía.

Bibliografía citada

  1. [1]
    Deutsch, D., & Jozsa, R. (1992). Rapid solution of problems by quantum computation. Proceedings of the Royal Society of London A, 439(1907), 553–558.
  2. [2]
    Deutsch, D. (1985). Quantum theory, the Church-Turing principle and the universal quantum computer. Proceedings of the Royal Society of London A, 400(1818), 97–117.
  3. [3]
    Nielsen, M. A., & Chuang, I. L. (2010). Quantum Computation and Quantum Information. Cambridge University Press. Sección 1.4.3.
  4. [4]
    Cleve, R., Ekert, A., Macchiavello, C., & Mosca, M. (1998). Quantum algorithms revisited. Proceedings of the Royal Society of London A, 454(1969), 339–354.

Descargar artículo

Título
Algoritmo de Deutsch-Jozsa: consulta cuántica única al oráculo y discriminación por interferencia
Fecha de elaboración
Autores
Noguerón Méndez José Antonio Head of Quantum Product
Descargar artículo