Skip to main content
IBM Quantum Platform

CDKMRippleCarryAdder

class qiskit.circuit.library.CDKMRippleCarryAdder(num_state_qubits, kind='full', name='CDKMRippleCarryAdder')

GitHub

Basi: Adder

Un circuito di ripple-carry per eseguire l'addizione in-place su due registri di qubit.

A titolo di esempio, un circuito sommatore a ripple-carry che esegue l'addizione su due registri di dimensioni pari a 3 qubit con un bit di riporto (kind="full") è il seguente:

        ┌──────┐                                     ┌──────┐
 cin_0: ┤2     ├─────────────────────────────────────┤2     ├
        │      │┌──────┐                     ┌──────┐│      │
   a_0: ┤0     ├┤2     ├─────────────────────┤2     ├┤0     ├
        │      ││      │┌──────┐     ┌──────┐│      ││      │
   a_1: ┤  MAJ ├┤0     ├┤2     ├─────┤2     ├┤0     ├┤  UMA ├
        │      ││      ││      │     │      ││      ││      │
   a_2: ┤      ├┤  MAJ ├┤0     ├──■──┤0     ├┤  UMA ├┤      ├
        │      ││      ││      │  │  │      ││      ││      │
   b_0: ┤1     ├┤      ├┤  MAJ ├──┼──┤  UMA ├┤      ├┤1     ├
        └──────┘│      ││      │  │  │      ││      │└──────┘
   b_1: ────────┤1     ├┤      ├──┼──┤      ├┤1     ├────────
                └──────┘│      │  │  │      │└──────┘
   b_2: ────────────────┤1     ├──┼──┤1     ├────────────────
                        └──────┘┌─┴─┐└──────┘
cout_0: ────────────────────────┤ X ├────────────────────────
                                └───┘

Qui le porte MAJ e UMA corrispondono alle porte introdotte in [1]. Si noti che in questa implementazione i qubit del registro di ingresso sono ordinati come tutti i qubit del primo registro di ingresso, seguiti da tutti i qubit del secondo registro di ingresso.

Sono supportati due diversi tipi di sommatori. Impostando l'argomento kind , è possibile scegliere anche un half-adder, che non ha un carry-in, e un fixed-sized-adder, che non ha né carry-in né carry-out e quindi agisce su registri di dimensioni fisse. A differenza del full-adder, questi circuiti necessitano di un qubit di aiuto aggiuntivo.

Lo schema del circuito per l'addizionatore a virgola fissa (kind="fixed") su ingressi di dimensioni pari a 3 qubit è

        ┌──────┐┌──────┐                ┌──────┐┌──────┐
   a_0: ┤0     ├┤2     ├────────────────┤2     ├┤0     ├
        │      ││      │┌──────┐┌──────┐│      ││      │
   a_1: ┤      ├┤0     ├┤2     ├┤2     ├┤0     ├┤      ├
        │      ││      ││      ││      ││      ││      │
   a_2: ┤      ├┤  MAJ ├┤0     ├┤0     ├┤  UMA ├┤      ├
        │      ││      ││      ││      ││      ││      │
   b_0: ┤1 MAJ ├┤      ├┤  MAJ ├┤  UMA ├┤      ├┤1 UMA ├
        │      ││      ││      ││      ││      ││      │
   b_1: ┤      ├┤1     ├┤      ├┤      ├┤1     ├┤      ├
        │      │└──────┘│      ││      │└──────┘│      │
   b_2: ┤      ├────────┤1     ├┤1     ├────────┤      ├
        │      │        └──────┘└──────┘        │      │
help_0: ┤2     ├────────────────────────────────┤2     ├
        └──────┘                                └──────┘

Ha un qubit in meno rispetto al full-adder perché non ha il carry-out, ma usa un qubit di aiuto al posto del carry-in, quindi ha solo un qubit in meno, non due.

Vedi anche

I seguenti oggetti gate generici eseguono addizioni, come questa classe di circuiti, ma consentono al compilatore di selezionare la decomposizione ottimale in base al contesto. Le implementazioni specifiche possono essere impostate tramite il sito HLSConfig, ad esempio questo circuito può essere scelto tramite Adder=["ripple_c04"].

ModularAdderGate: Un generico sommatore inplace, modulo 2n2^n. Questo

è funzionalmente equivalente a kind="fixed".

AdderGate: Un generico sommatore inplace. Questa serie di webinar

è funzionalmente equivalente a kind="half".

FullAdderGate: Un generico sommatore inplace, con un bit di riporto. Questa serie di webinar

è funzionalmente equivalente a kind="full".

Riferimenti:

[1] Cuccaro et al, Un nuovo circuito di addizione quantistica ripple-carry, 2004. arXiv:quant-ph/0410184

[2] Vedral et al, Reti quantistiche per operazioni aritmetiche elementari, 1995. arXiv:quant-ph/9511018

Parametri

  • num_state_qubits (int) – Il numero di qubit in uno dei due registri di ingresso per lo stato a|a\rangle o b|b\rangle. I due registri di ingresso devono avere lo stesso numero di qubit.
  • kind (str) – Il tipo di sommatore può essere 'full' per un sommatore completo, 'half' per un mezzo sommatore o 'fixed' per un sommatore a dimensione fissa. Un sommatore completo include sia il carry-in che il carry-out, un sommatore dimezzato solo il carry-out e un sommatore di dimensioni fisse né il carry-in né il carry-out.
  • name (str) – Il nome dell'oggetto circuito.

Aumenti

ValueError - Se num_state_qubits è inferiore a 1.


Attributi

name

Tipo: str

Un nome leggibile per il circuito.

Esempio

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.