Skip to main content
IBM Quantum Platform

DraperQFTAdder

class qiskit.circuit.library.DraperQFTAdder(num_state_qubits, kind='fixed', name='DraperQFTAdder')

GitHub

Basen: Adder

Eine Schaltung, die QFT verwendet, um die Addition von zwei Qubit-Registern an Ort und Stelle durchzuführen.

Bei Registern mit nn -Qubits kann der QFT-Addierer eine Addition modulo 2n2^n (mit kind="fixed") oder eine gewöhnliche Addition durch Hinzufügen eines Übertrag-Qubits (mit kind="half") durchführen.

Ein Beispiel für eine QFT-Additionsschaltung, die eine gewöhnliche Addition an zwei Registern mit jeweils zwei Quantenbits durchführt, sieht wie folgt aus:

 a_0: ─────────■──────■────────────────────────■────────────────
               │      │                        │
 a_1: ─────────┼──────┼────────■──────■────────┼────────────────
      ┌──────┐ │P(π)  │        │      │        │       ┌───────┐
 b_0: ┤0     ├─■──────┼────────┼──────┼────────┼───────┤0      ├
      │      │        │P(π/2)  │P(π)  │        │       │       │
 b_1: ┤1 QFT ├────────■────────■──────┼────────┼───────┤1 IQFT ├
      │      │                        │P(π/2)  │P(π/4) │       │
cout: ┤2     ├────────────────────────■────────■───────┤2      ├
      └──────┘                                         └───────┘
Anmerkung

Die QFT- und inverse-QFT-Blöcke in dieser Implementierung verzichten auf ihre Swap-Netzwerke, die die Reihenfolge der Qubits umkehren, um eine effizientere Implementierung zu ermöglichen. Dies hat Einfluss darauf, auf welche Qubits die Phasen-Gatter wirken. Diese Zeichnung veranschaulicht, wie der Addierer in Qiskit implementiert ist; sie sollte nicht als Anleitung zum manuellen Aufbau der Schaltung verwendet werden.

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=["qft_d00"] 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".

Quellenangaben:

[1] T. G. Draper, Addition auf einem Quantencomputer, 2000. arXiv:quant-ph/0008033

[2] Ruiz-Perez et al, Quantenarithmetik mit der Quanten-Fourier-Transformation, 2017. arXiv:1411.5949

[3] 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 'half' für einen Halbaddierer oder 'fixed' für einen Addierer fester Größe sein. Ein halber Addierer enthält einen Übertrag, um das höchstwertige Bit darzustellen, aber der Addierer mit fester Größe hat keinen Übertrag und führt daher die Addition modulo 2 ** num_state_qubits durch.
  • 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.