Skip to main content
IBM Quantum Platform

HRSCumulativeMultiplier

class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')

GitHub

Bases: Multiplier

Um circuito de multiplicação para armazenar o produto de dois registros de entrada fora do lugar.

O circuito usa a abordagem de [1]. Como exemplo, um circuito multiplicador que executa uma multiplicação não modular em dois registros de tamanho de 3 qubit com o somador padrão é o seguinte (onde Adder denota o CDKMRippleCarryAdder):

  a_0: ────■─────────────────────────

  a_1: ────┼─────────■───────────────
           │         │
  a_2: ────┼─────────┼─────────■─────
       ┌───┴────┐┌───┴────┐┌───┴────┐
  b_0: ┤0       ├┤0       ├┤0       ├
       │        ││        ││        │
  b_1: ┤1       ├┤1       ├┤1       ├
       │        ││        ││        │
  b_2: ┤2       ├┤2       ├┤2       ├
       │        ││        ││        │
out_0: ┤3       ├┤        ├┤        ├
       │        ││        ││        │
out_1: ┤4       ├┤3       ├┤        ├
       │  Adder ││  Adder ││  Adder │
out_2: ┤5       ├┤4       ├┤3       ├
       │        ││        ││        │
out_3: ┤6       ├┤5       ├┤4       ├
       │        ││        ││        │
out_4: ┤        ├┤6       ├┤5       ├
       │        ││        ││        │
out_5: ┤        ├┤        ├┤6       ├
       │        ││        ││        │
aux_0: ┤7       ├┤7       ├┤7       ├
       └────────┘└────────┘└────────┘

A multiplicação nesse circuito é implementada em uma abordagem clássica, executando uma série de adições deslocadas usando um dos registros de entrada, enquanto os qubits do outro registro de entrada atuam como qubits de controle para os somadores.

Veja Também

O MultiplierGate objeto representa uma multiplicação, assim como esta classe de circuito, mas permite que o compilador selecione a decomposição ideal com base no contexto. As implementações específicas podem ser definidas por meio do HLSConfig, por exemplo, este circuito pode ser selecionado por meio do Multiplier=["cumulative_h18"].

Referências

[1] Häner et al, Otimização de circuitos quânticos para aritmética, 2018. arXiv:1805.12445

Parâmetros

  • num_state_qubits (int) – O número de qubits em um dos registros de entrada para o estado a|a\rangle ou b|b\rangle. Os dois registros de entrada devem ter o mesmo número de qubits.
  • num_result_qubits (int | None) – O número de qubits de resultado para limitar a saída. Se o número de qubits de resultado for nn, o módulo de multiplicação 2n2^n será executado para limitar a saída ao número especificado de qubits. O valor padrão é 2 * num_state_qubits para representar qualquer resultado possível da multiplicação das duas entradas.
  • adder (QuantumCircuit | None) – Circuito de meio somador a ser usado para realizar a multiplicação. O CDKMRippleCarryAdder é usado como padrão se nenhum somador for fornecido.
  • name (str) – O nome do objeto de circuito.

Aumentos

NotImplementedError - Se num_result_qubits não for padrão e for fornecido um somador personalizado.


Atributos

name

Tipo: str

Um nome legível por humanos para o circuito.

Exemplo

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.