Skip to main content
IBM Quantum Platform

CDKMRippleCarryAdder

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

GitHub

Basen: Adder

Eine Ripple-Carry-Schaltung zur Durchführung von In-Place-Addition auf zwei Qubit-Registern.

Ein Beispiel für eine Ripple-Carry-Addierschaltung, die zwei 3-Qubit-Register mit einem Carry-In-Bit (kind="full") addiert, sieht wie folgt aus:

        ┌──────┐                                     ┌──────┐
 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 ├────────────────────────
                                └───┘

Die MAJ- und UMA-Tore entsprechen den unter [1]. vorgestellten Toren. Beachten Sie, dass in dieser Implementierung die Qubits der Eingangsregister in der Reihenfolge angeordnet sind, dass alle Qubits aus dem ersten Eingangsregister, gefolgt von allen Qubits aus dem zweiten Eingangsregister kommen.

Es werden zwei verschiedene Arten von Addierern unterstützt. Mit dem Argument kind können Sie auch einen Halbaddierer wählen, der keinen Übertrag hat, und einen Festgrößenaddierer, der weder Übertrag noch Übertrag hat und daher auf feste Registergrößen wirkt. Anders als die Volladdierer benötigen diese Schaltungen ein zusätzliches Hilfsqubit.

Der Schaltplan für den Festkomma-Addierer (kind="fixed") mit 3-Qubit großen Eingängen lautet

        ┌──────┐┌──────┐                ┌──────┐┌──────┐
   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     ├
        └──────┘                                └──────┘

Er hat ein Qubit weniger als der Full-Adder, da er keinen Carry-Out hat, aber statt des Carry-In ein Helper-Qubit verwendet, so dass er nur ein Qubit weniger hat, nicht zwei.

Siehe auch

Die folgenden generischen Gatterobjekte führen wie diese Schaltkreisklasse Additionen durch, ermöglichen es dem Compiler jedoch, die optimale Zerlegung auf der Grundlage des Kontexts auszuwählen. Spezifische Implementierungen können über die HLSConfigeingestellt werden, z.B. kann diese Schaltung über Adder=["ripple_c04"] gewählt werden.

ModularAdderGate: Ein generischer Inplace-Addierer, modulo 2n2^n. Diese

ist funktional äquivalent zu kind="fixed".

AdderGate: Ein allgemeiner Inplace-Addierer. Diese

ist funktional äquivalent zu kind="half".

FullAdderGate: Ein generischer Inplace-Addierer mit einem Carry-In-Bit. Diese

ist funktional äquivalent zu kind="full".

Quellenangaben:

[1] Cuccaro et al, Eine neue Quanten-Ripple-Carry-Additionsschaltung, 2004. arXiv:quant-ph/0410184

[2] Vedral et al., Quantennetzwerke für elementare arithmetische Operationen, 1995. arXiv:quant-ph/9511018

Parameter

  • num_state_qubits (int) – Die Anzahl der Qubits in einem der beiden Eingangsregister für den Zustand ∣a⟩|a\rangle oder ∣b⟩|b\rangle. Die beiden Eingangsregister müssen die gleiche Anzahl von Qubits haben.
  • kind (str) – Die Art des Addierers kann 'full' für einen Volladdierer, 'half' für einen Halbaddierer oder 'fixed' für einen Addierer fester Größe sein. Ein Volladdierer enthält sowohl Übertrag als auch Übertrag, ein Halbaddierer nur Übertrag, und ein Addierer fester Größe weder Übertrag noch Übertrag.
  • name (str) – Der Name des Schaltkreisobjekts.

Erhöht

ValueError - Wenn num_state_qubits kleiner als 1 ist.


Attribute

name

Typ: str

Ein von Menschen lesbarer Name für den Stromkreis.

Beispiel

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.