{{위키데이터 속성 추적}}

'''도이치–조사 알고리듬'''은 1992년 [[데이비드 도이치]]와 리처드 조사가 제안하고 1998년 리차드 클리브, 아서 에케르트, 키아라 맥카벨로 및 마이클 모스카가 개선한 [[결정론적 알고리즘|결정론적]] 양자 알고리듬이다.<ref name="DJ92">{{저널 인용|제목=Rapid solutions of problems by quantum computation|저널=Proceedings of the Royal Society of London A|성=David Deutsch|저자링크=David Deutsch|성2=Richard Jozsa|저자링크2=Richard Jozsa|연도=1992|권=439|호=1907|쪽=553–558|bibcode=1992RSPSA.439..553D|doi=10.1098/rspa.1992.0167}}</ref><ref name="CEMM98">{{저널 인용|제목=Quantum algorithms revisited|저널=Proceedings of the Royal Society of London A|성=R. Cleve|성2=A. Ekert|연도=1998|권=454|호=1969|쪽=339–354|arxiv=quant-ph/9708016|bibcode=1998RSPSA.454..339C|doi=10.1098/rspa.1998.0164|성3=C. Macchiavello|성4=M. Mosca}}</ref> 현재 실용성은 거의 없지만, 가능한 결정론적 고전 알고리듬보다 [[시간 복잡도|기하급수적으로 빠른]] 양자 알고리듬의 첫 번째 예 중 하나로 역사적인 의미가 있다.<ref>{{저널 인용|제목=On the Power of Quantum Computation|저널=94 Proceedings of the 35th Annual Symposium on Foundations of Computer Science|성=Simon|이름=Daniel|url=http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.51.5477&rep=rep1&type=pdf|날짜=November 1994|쪽=116–123|doi=10.1109/SFCS.1994.365701|isbn=0-8186-6580-7}}</ref>

도이치-조사 알고리듬으로 푸는 문제는, 양자 알고리듬에는 쉽고 결정적 고전 알고리듬에는 어렵도록 의도적으로 설계된 문제이다. 이는 양자 컴퓨터로 오류 없이 효율적으로 해결할 수 있는 [[블랙박스]] 문제인 반면, 결정론적 고전 컴퓨터는 문제를 해결하기 위해 블랙박스에 대한 기하급수적인 쿼리가 필요하다. 보다 자세히 설명하면, 양자 컴퓨터에서 다항식 시간 내에 정확하게 해결할 수 있는 문제 클래스인 '''EQP'''와 '''[[P (복잡도)|P]]'''가 다른 것과 관련하여 오라클을 생성한다.<ref name="Johansson2017">
{{저널 인용|제목=Efficient classical simulation of the Deutsch–Jozsa and Simon's algorithms|저널=Quantum Inf Process (2017)|성=Johansson, N.|성2=Larsson, JÅ.|연도=2017|권=16|호=9|쪽=233|arxiv=1508.05027|bibcode=2017QuIP...16..233J|doi=10.1007/s11128-017-1679-7}}
</ref>

이 문제는 확률적 고전 컴퓨터에서 해결하기 쉽기 때문에 확률적 고전 컴퓨터에서 다항식 시간의 유계 오류로 해결할 수 있는 문제 클래스인 '''[[유계오차 확률적 다항시간|BPP]]'''와 오라클 분리를 생성하지 않는다. 반면에, 사이먼 문제는 '''[[BQP]]'''와 '''BPP''' 사이에 오라클이 분리되는 문제의 예이다.

== 문제 설명 ==
도이치-조사 문제에서 다음 함수를 구현하는 [[신탁 기계|오라클]]로 알려진 블랙박스 양자 컴퓨터가 주어져 있다:

<math>f\colon\{0,1\}^n\rightarrow \{0,1\}</math>

이 함수는 <math>n</math>비트 이진수를 <math>0</math> 또는 <math>1</math>로 보낸다. 이 함수는 상수 함수(정의역 전체에서 <math>0</math> 또는 정의역 전체에서 <math>1</math>)이거나 ''균형 함수'' (정확히 [[정의역]]의 원소들 절반에 대해 <math>1</math>, 나머지 절반에 대해 <math>0</math>)이다.<ref name="DJ92">{{저널 인용|제목=Rapid solutions of problems by quantum computation|저널=Proceedings of the Royal Society of London A|성=David Deutsch|저자링크=David Deutsch|성2=Richard Jozsa|저자링크2=Richard Jozsa|연도=1992|권=439|호=1907|쪽=553–558|bibcode=1992RSPSA.439..553D|doi=10.1098/rspa.1992.0167}}</ref> 이때, 도이치-조사 문제는, 오라클을 사용하여 <math>f</math>가 상수 함수인지 균형 함수인지 판단하는 것이다.

== 고전적인 해 ==
기존의 [[결정론|결정론적]] 알고리듬의 경우 <math>n</math> 비트에 대해, 최악의 경우 <math>f</math>를 계산해야하는 횟수는 지수함수적으로 증가한다. 반면에 함수가 균형 함수이고 처음 두 출력 값이 다른 경우 최상의 경우가 발생한다. 기존의 [[확률적 알고리즘|무작위 알고리듬]]의 경우, 충분히 큰 <math>k</math>에 대해 <math>f</math>를 <math>k</math>번 계산하면 높은 확률로 정답을 생성한다.(<math>k \geq 1</math>에 대해 <math>\epsilon \leq 1/2^{k}</math>확률로 실패). 하지만, 오류 가능성이 없는 답을 원할 경우 필요한 <math>f</math> 계산의 횟수는 여전히 지수함수적이다. 그러나, 도이치-조사 양자 알고리듬은 <math>f</math>에 대한 계산 한 번으로 항상 올바른 답을 내놓는다.

== 역사 ==
도이치-조사 알고리듬은 <math> n = 1 </math>인 경우에만 해를 제공했던 다음 데이비드 도이치의 초기(1985)작업"입력이 1비트인 [[불 함수]]<math>f: \{0,1\} \rightarrow \{0,1\}</math>가 주어졌을 때, 이 함수가 상수 함수인가?"<ref name="Deu85">
{{저널 인용|제목=Quantum Theory, the Church-Turing Principle and the Universal Quantum Computer|저널=Proceedings of the Royal Society of London A|성=David Deutsch|저자링크=David Deutsch|연도=1985|권=400|호=1818|쪽=97–117|bibcode=1985RSPSA.400...97D|doi=10.1098/rspa.1985.0070}}
</ref>

을 일반화 하였다. 도이치가 원래 제안한 알고리듬은 사실 결정론적이지 않았다. 알고리듬은 절반의 확률로 성공했다. 1992년에 도이치와 조사는 <math>n</math>비트 입력을 가진 함수로 일반화된 결정적 알고리듬을 만들었다. 도이치의 알고리듬과 달리, 이 알고리듬에는 하나가 아닌 두 개의 함수 계산이 필요했다.

도이치-조사 알고리듬에 대한 추가 개선 사항은 클레브와 다른 사람들에 의해 이루어졌다.<ref name="CEMM98">{{저널 인용|제목=Quantum algorithms revisited|저널=Proceedings of the Royal Society of London A|성=R. Cleve|성2=A. Ekert|연도=1998|권=454|호=1969|쪽=339–354|arxiv=quant-ph/9708016|bibcode=1998RSPSA.454..339C|doi=10.1098/rspa.1998.0164|성3=C. Macchiavello|성4=M. Mosca}}</ref> 이들은 도이치-조사 알고리듬을 결정론적이며 <math>f</math>의 쿼리 하나만 필요한 알고리듬으로 만들었다. 그러나 알고리듬의 이름은 도이치와 조사가 사용한 획기적인 방법을 기리기 위해 여전히 도이치-조사 알고리듬이라고 한다.<ref name="CEMM98" />

== 연산 ==
도이치-조사 알고리듬이 작동하려면 <math>x</math>에서 <math>f(x)</math> 값을 계산하는 오라클 계산은 <math>x</math> [[양자 결어긋남|결어긋남]]이 없는 양자 오라클이어야 한다. 또한 <math>x</math>의 사본을 만들면 안된다. 만약 복제가 된다면 양자역학의 복제 불가능성 정리를 위반 하기 때문이다.
[[파일:Deutsch-Jozsa-algorithm-quantum-circuit.png|오른쪽|섬네일|400x400픽셀| 도이치-조사 알고리듬 양자 회로]]
알고리듬은 <math>n+1</math> 큐비트가 <math>|0\rangle^{\otimes n} |1\rangle </math>인 상태에서 시작한다. 즉, 처음 <math>n</math> 큐비트는 각각 상태 <math>|0\rangle </math>에 있고 마지막 큐비트는 <math>|1\rangle </math>인 상태이다. 그 다음, 각 큐비트에 아다마흐 변환을 적용 해서 다음 상태를 얻는다:

: <math>\frac{1}{\sqrt{2^{n+1}}}\sum_{x=0}^{2^n-1} |x\rangle (|0\rangle - |1\rangle )</math> .

이때, <math>f</math>는 양자 오라클로 구현되었다고 가정한다. 이 오라클은 상태 <math> |x\rangle|y\rangle </math>를 <math> |x\rangle|y\oplus f(x) \rangle </math>로 보낸다. 여기서, <math>\oplus</math>는 <math>2</math>를 법으로 하는 덧셈을 나타낸다. 여기에 양자 오라클을 적용하면 다음을 얻는다:

: <math>\frac{1}{\sqrt{2^{n+1}}}\sum_{x=0}^{2^n-1} |x\rangle (|0\oplus f(x)\rangle - |1\oplus f(x)\rangle )</math> .

한편, <math>x</math>와 <math>f(x)</math>는 각각 <math>0</math> 또는 <math>1</math>이다. 이 두 가지 가능성을 시험하면 위의 상태가 다음과 같다는 것을 알 수 있다.

: <math>\frac{1}{\sqrt{2^{n+1}}}\sum_{x=0}^{2^n-1} (-1)^{f(x)} |x\rangle (|0\rangle - |1\rangle )</math>.

이 때, 마지막 큐비트 <math>\frac{|0\rangle - |1\rangle}{\sqrt{2}}</math>는 무시할 수 있으며,

: <math>\frac{1}{\sqrt{2^{n}}}\sum_{x=0}^{2^n-1} (-1)^{f(x)} |x\rangle</math>

부분만 고려하면 된다

다음으로, 첫 번째 큐비트에 아다마흐 변환을 적용하여

: <math>H^{\otimes n} |k\rangle = \frac{1}{\sqrt{2^n}} \sum_{j = 0}^{2^n - 1} (-1)^{k \cdot j} |j\rangle</math>

(여기서 <math>k\cdot j</math>는 비트 곱들의 합<math>j_0 k_0\oplus j_1 k_1\oplus\cdots\oplus j_{n-1} k_{n-1} </math>이다.) 다음을 얻는다:

: <math>\frac{1}{\sqrt{2^n}}\sum_{x=0}^{2^n-1}(-1)^{f(x)} \left[ \frac{1}{\sqrt{2^n}} \sum_{y=0}^{2^n-1}(-1)^{x\cdot y} |y\rangle \right] =
\sum_{y=0}^{2^n-1} \left[ \frac{1}{2^n} \sum_{x=0}^{2^n-1}(-1)^{f(x)} (-1)^{x\cdot y}\right] |y\rangle. </math>

이것으로부터 우리는 상태 <math>k</math>에 대한 확률이

: <math>\left|\frac{1}{2^n} \sum_{x=0}^{2^n-1}(-1)^{f(x)} (-1)^{x\cdot k}\right|^2</math>

로 측정됨을 알 수 있다.

<math>|0\rangle^{\otimes n}</math>에 해당하는 <math>k = 0 </math>을 측정할 확률은

: <math>\bigg|\frac{1}{2^n}\sum_{x=0}^{2^n-1}(-1)^{f(x)}\bigg|^2</math>

이다.

<math>f(x)</math>가 상수([[간섭 (파동 전파)|보강 간섭]])이면 위 상태는 <math>1</math>로 측정 되고, 균형 함수([[간섭 (파동 전파)|상쇄 간섭]])이면 <math>0</math>로 측정 된다. 즉, 오직 <math>f(x)</math>가 상수 함수일 때 만 최종 측정 값이 <math>|0\rangle^{\otimes n}</math>(모두 <math>0</math>)이다.

== 도이치 알고리듬 ==
도이치 알고리듬은 일반 도이치-조사 알고리듬의 <math>f\colon\{0,1\}^n\rightarrow \{0,1\}</math>에서  <math>n=1</math>일 때에 해당한다. <math>f(0)=f(1)</math>인지 확인 하는 것과 <math>f(0)\oplus f(1)</math> 값을 확인하는 것은 같다.  (여기서, <math>\oplus</math> 제어된 NOT 게이트로 구현되었고 양자 [[XOR 게이트]]로 볼 수도 있는 <math>2</math>를 법으로 하는 덧셈이다.) 이 값이 <math>0</math>이면 <math>f</math>는 상수 함수고, <math>1</math>이면 <math>f</math>는 균형 함수다.

<math>2</math> 큐비트 상태 <math>|0\rangle |1\rangle</math>에서 시작한다. 아다마흐 변환을 각 큐비트에 적용해서 다음을 얻는다:

: <math>\frac{1}{2}(|0\rangle + |1\rangle)(|0\rangle - |1\rangle).</math>

<math>|x\rangle |y\rangle</math>를 <math>|x\rangle |f(x)\oplus y\rangle</math>로 보내는 함수 <math>f</math>의 양자 구현이 주어졌다고 가정한다. 이를 현재 상태에 적용하면

: <math>\frac{1}{2}(|0\rangle(|f(0)\oplus 0\rangle - |f(0)\oplus 1\rangle) + |1\rangle(|f(1)\oplus 0\rangle - |f(1)\oplus 1\rangle))</math>
: <math>=\frac{1}{2}((-1)^{f(0)}|0\rangle(|0\rangle - |1\rangle) + (-1)^{f(1)}|1\rangle(|0\rangle - |1\rangle))</math>
: <math>=(-1)^{f(0)}\frac{1}{2}\left(|0\rangle + (-1)^{f(0)\oplus f(1)}|1\rangle\right)(|0\rangle - |1\rangle)</math>

를 얻는다.

마지막 큐비트와 전체 페이즈를 무시하므로 다음 항만 고려한다:

: <math>\frac{1}{\sqrt 2}(|0\rangle + (-1)^{f(0)\oplus f(1)}|1\rangle).</math>

이 상태에 아다마흐 변환을 적용하면

: <math>\frac{1}{2}(|0\rangle + |1\rangle + (-1)^{f(0)\oplus f(1)}|0\rangle - (-1)^{f(0)\oplus f(1)}|1\rangle)</math>
: <math>=\frac{1}{2}((1 +(-1)^{f(0)\oplus f(1)})|0\rangle + (1-(-1)^{f(0)\oplus f(1)})|1\rangle).</math>

여기서, <math>f(0)\oplus f(1)=0</math>임과 <math>|0\rangle</math>을 측정하는 것이 동치이고 <math>f(0)\oplus f(1)=1</math>임과  <math>|1\rangle</math>를 측정하는것이 동치이다. 따라서 확실하게 <math>f(x)</math>가 상수 함수인지 아닌지 알 수 있다.

== 같이 보기 ==
* [[번스타인-바지라니 알고리듬]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://www.quiprocone.org/Protected/Lecture_5.htm 도이치-조사 알고리듬에 대한 도이치의 강의]

[[분류:양자 알고리즘]]