항상 전체를 계산하는 것으로 충분합니다. 2n×2n 유니 타리 행렬을 적용한 후 2n항목 상태 벡터. 당신이해야 할 선택이 그 무엇의 경우, 그건 모두 당신은 모든 얽힘 정보는 그 벡터에 포함 된대로해야한다. 특정 큐 비트가 얽혀 있는지 확인하는 빠르고 쉬운 방법은 다른 모든 큐 비트에 대해 (순수한) 상태 벡터의 부분 트레이스를 취하는 것입니다. 결과 행렬의 순위가 1이면 해당 큐 비트가 분리 가능한 상태에 있고 그렇지 않으면 얽힌 상태입니다.
귀하의 질문의 요점은 실제로 "이러한 계산 비용을 어떻게 피할 수 있습니까?"라고 가정합니다. 일반적으로, 그것은 할 수 없습니다-만약 당신이 양자 컴퓨터의 모든 힘을 사용한다면, 당신은 항상2n항목 상태 벡터. 그러나, 얽힘을 추적함으로써 그러한 큰 상태 벡터에 대한 요구를 지연시키는 것과 같이 계산 비용을 감소시키는 다양한 트릭이있다.
효율성 개선
위의 순진한 구현과 비교할 때 가장 큰 절약은 2n×2n단일 행렬. 예를 들어 1 또는 2 큐 비트 게이트 만 사용하는 경우 행렬 희소성을 사용하면 필요한 것만O(2n) 대신 저장 O(22n).
그런 다음 사용할 수있는 다른 전술이 있습니다. 예를 들어, 2 큐빗 단위 게이트를 적용한다고 가정 해 봅시다.U 큐빗에 i 과 j. 상태 벡터에서 4 개의 요소 집합을 가져올 수 있습니다 (|x⟩1,2,…n∖i,j|y⟩i,j 고정 용 x∈{0,1}n−2 다른 모든 것을 취함으로써 y∈{0,1}2) 그리고 그냥 적용 4×4 일원 U4 요소 벡터에 매번 이것을 반복x 돌아올 것이다 U 원래 상태 벡터에 제정되었습니다.
다른 전략이있을 것 같아요. 원래 질문에서 제안한 것은 얽힘 추적이었습니다. 이것은 계산을 시작할 때 메모리와 속도를 향상 시키지만 결국 양자 컴퓨터의 모든 것이 얽히게 될 것이기 때문에 결국 동등한 것으로 끝납니다.
엉킴 추적
계산 이 집합의 단일 진화 및 측정으로 만 구성되어 있다고 가정 해 봅시다.n 큐 비트, 즉 디코 히어 런스 (decoherence), 확률 적 맵 등이 없습니다. 다음과 같이 완전히 분리 가능한 상태에서 시작한다고 가정 해 봅시다. |0⟩⊗n. 이 시점에서, 모든 큐비 트는 분리 가능하며 유지하기에 충분합니다.n각각 분리 가능한 큐 비트의 상태를 전달하는 다른 레지스터. 첫 번째 게이트가 단일 큐빗 동작 인 경우U 큐빗 i그런 다음 qubit에 저장된 상태를 업데이트하면됩니다. i 같이 |ψi⟩↦U|ψi⟩, 다른 것을 만질 필요가 없습니다.
2 큐빗 게이트를하고 싶다면 V 큐빗 사이 i 과 j예를 들어 두 사이트의 상태를 결합해야합니다. 따라서 각 차원 2의 두 레지스터를 상태가 포함 된 차원 4의 한 레지스터로 바꿉니다.V|ψi⟩|ψj⟩. 문제는 이제이 상태를 다시 분할 할 수 없으므로이 두 큐 비트를 레지스터에 영원히 유지해야한다는 것입니다. 물론 1 큐빗 게이트가 있다면U 큐빗에 적용 i, 이제 신청해야합니다 |ψi,j⟩↦U⊗I|ψi,j⟩. 다음에 두 큐빗 게이트를 원할 때j 과 k, 공백을 결합해야합니다. (i,j) 과 k. 그 공간은 계속 커질 것이지만, 게이트가 한 공간에 국한되어 있다면 그곳에 적용해야합니다 (사용I 나머지 큐빗에 패드를 넣으려면 다른 공간에 아무것도 할 필요가 없습니다.
이와 같은 작업을 수행하는 경우 (최소한 알고리즘의 처음 몇 단계에 대해) 단일 항목이 없습니다. 2n요소 레지스터. 여러 개의 다른 레지스터가 있어야하며, 어떤 큐 비트가 어떤 레지스터에 의해 별도의 배열로 표시되는지 추적해야합니다. 일부 큐 비트 공간을 결합 할 때마다 추가 배열이 업데이트됩니다.
내 의미를 전달하는 데 도움이되는 매우 조잡한 의사 코드가 있습니다.
#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}
#apply action of each gate
for each gate
for each gate_target
target_block=entangled_blocks entry containing gate_target
next gate_target
if all target_blocks equal then
apply gate on target_block (pad with identity on other qubits)
else
new_entangled_block=union(target_blocks)
new_state_vec=tensor_product(quantum_states for each target block)
apply gate on new_state_vec (pad with identity on other qubits)
replace all target_blocks in entangled_blocks with new_entangled_block
replace all quantum_states(all target blocks) with new_state_vec
end if
next gate
다른 옵션
(완전한 것은 아닙니다)
너무 얽 히지 않은 상태에 대한 정보를 캡슐화하는 좋은 방법이며 달성하려는 목표에 따라 대체 경로를 제공 할 수있는 매트릭스 제품 상태에 대해 읽으십시오.