DraperQFTAdder
class qiskit.circuit.library.DraperQFTAdder(num_state_qubits, kind='fixed', name='DraperQFTAdder')
베이스: Adder
QFT를 사용하여 두 큐비트 레지스터에서 제자리 덧셈을 수행하는 회로입니다.
개의 큐비트를 가진 레지스터의 경우, QFT 가산기는 (에서 kind="fixed")를 모듈로 한 덧셈을 수행하거나, 캐리 큐비트를 추가하여(에서 kind="half") 일반적인 덧셈을 수행할 수 있다.
예를 들어, 두 개의 2-큐비트 레지스터에 대해 일반적인 덧셈 연산을 수행하는 QFT 가산기 회로는 다음과 같습니다:
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 ├
└──────┘ └───────┘이 구현에서 QFT 및 역 QFT 블록은 스왑 네트워크를 생략하고 있으며, 이는 큐비트 순서를 반전시켜 구현 효율을 높입니다. 이는 제어 위상 게이트가 어떤 큐비트에 작용하는지에 영향을 미칩니다. 이 그림은 Qiskit에서 덧셈기가 어떻게 구현되는지를 보여주는 것으로, 회로를 직접 제작하기 위한 지침으로 사용해서는 안 됩니다.
다음 일반 게이트 객체는 이 회로 클래스와 같이 추가를 수행하지만 컴파일러가 컨텍스트에 따라 최적의 분해를 선택할 수 있도록 합니다. 구체적인 구현은 HLSConfig를 통해 설정할 수 있습니다(예: 이 회로는 Adder=["qft_d00"] 에서 선택할 수 있습니다).
ModularAdderGate: 일반 인플레이스 가산기, 모듈로 . 이
는 kind="fixed" 와 기능적으로 동일합니다.
AdderGate: 일반적인 인플레이스 가산기입니다. 이것 역시
는 kind="half" 와 기능적으로 동일합니다.
참조 자료:
[1] T. G. 드레이퍼, 양자 컴퓨터의 추가, 2000. arXiv:quant-ph/0008033
[2] 루이즈-페레즈 외., 양자 푸리에 변환을 이용한 양자 연산, 2017. arXiv:1411.5949
[3] 베드랄 외., 초등 산술 연산을 위한 양자 네트워크, 1995. arXiv:quant-ph/9511018
매개변수
- num_state_qubits (int) – 상태 또는 에 대한 입력 레지스터의 큐비트 수. 두 입력 레지스터는 동일한 수의 큐비트를 가져야 합니다.
- kind (str) – 가산기의 종류는 하프 가산기의 경우
'half', 고정 크기의 가산기의 경우'fixed'으로 지정할 수 있습니다. 하프 가산기는 가장 중요한 비트를 나타내는 캐리아웃을 포함하지만 고정 크기 가산기는 그렇지 않으므로 더하기 모듈로2 ** num_state_qubits를 수행합니다. - name (str) – 회로 개체의 이름입니다.
레이즈
ValueError - num_state_qubits 이 1보다 작으면
속성
name
유형: str
사람이 읽을 수 있는 회로의 이름입니다.
예제
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit