CDKMRippleCarryAdder
class qiskit.circuit.library.CDKMRippleCarryAdder(num_state_qubits, kind='full', name='CDKMRippleCarryAdder')
베이스: Adder
두 큐비트 레지스터에서 제자리 덧셈을 수행하는 리플 캐리 회로입니다.
예를 들어 캐리 인 비트(kind="full")가 있는 3-큐비트 크기의 레지스터 두 개에서 덧셈을 수행하는 리플 캐리 가산기 회로는 다음과 같습니다:
┌──────┐ ┌──────┐
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 ├────────────────────────
└───┘여기서 MAJ 및 UMA 게이트는 [1에서] 소개한 게이트에 해당합니다. 이 구현에서 입력 레지스터 큐비트는 첫 번째 입력 레지스터의 모든 큐비트와 두 번째 입력 레지스터의 모든 큐비트 순서로 정렬됩니다.
두 가지 종류의 가산기가 지원됩니다. kind 인수를 설정하면 반입이 없는 하프 더더와 반입과 반출이 없어 고정 레지스터 크기에 따라 작동하는 고정 크기 더더를 선택할 수도 있습니다. 풀 가산기와 달리 이 회로에는 헬퍼 큐비트 하나가 추가로 필요합니다.
3-큐비트 크기의 입력에 대한 고정 소수점 덧셈기(kind="fixed")의 회로도는 다음과 같습니다
┌──────┐┌──────┐ ┌──────┐┌──────┐
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 ├
└──────┘ └──────┘캐리아웃이 없기 때문에 풀 애더보다 큐비트가 하나 적지만, 캐리인 대신 헬퍼 큐비트를 사용하므로 큐비트가 두 개가 아니라 하나만 적습니다.
다음 일반 게이트 객체는 이 회로 클래스와 같이 추가를 수행하지만 컴파일러가 컨텍스트에 따라 최적의 분해를 선택할 수 있도록 합니다. 구체적인 구현은 HLSConfig를 통해 설정할 수 있습니다(예: 이 회로는 Adder=["ripple_c04"] 에서 선택할 수 있습니다).
ModularAdderGate: 일반 인플레이스 가산기, 모듈로 . 이
는 kind="fixed" 와 기능적으로 동일합니다.
AdderGate: 일반적인 인플레이스 가산기입니다. 이것 역시
는 kind="half" 와 기능적으로 동일합니다.
FullAdderGate: 캐리 인 비트가 있는 일반 인플레이스 가산기입니다. 이것 역시
는 kind="full" 와 기능적으로 동일합니다.
참조 자료:
[1] 쿠카로 외., 새로운 양자 리플 캐리 덧셈 회로, 2004. arXiv:quant-ph/0410184
[2] 베드랄 외., 초등 산술 연산을 위한 양자 네트워크, 1995. arXiv:quant-ph/9511018
매개변수
- num_state_qubits (int) – 상태 또는 에 대한 입력 레지스터의 큐비트 수. 두 입력 레지스터는 동일한 수의 큐비트를 가져야 합니다.
- kind (str) – 가산기의 종류는 전체 가산기의 경우
'full', 절반 가산기의 경우'half', 고정 크기 가산기의 경우'fixed'으로 지정할 수 있습니다. 전체 가산기는 반입과 반출을 모두 포함하며, 절반 가산기는 반출만 포함하며, 고정 크기 가산기는 반입과 반출을 모두 포함하지 않습니다. - 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