Skip to main content
IBM Quantum Platform

DraperQFTAdder

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

GitHub

베이스: Adder

QFT를 사용하여 두 큐비트 레지스터에서 제자리 덧셈을 수행하는 회로입니다.

nn 개의 큐비트를 가진 레지스터의 경우, QFT 가산기는 2n2^n (에서 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: 일반 인플레이스 가산기, 모듈로 2n2^n. 이

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) – 상태 a|a\rangle 또는 b|b\rangle 에 대한 입력 레지스터의 큐비트 수. 두 입력 레지스터는 동일한 수의 큐비트를 가져야 합니다.
  • 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
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.