Remove["Global`@*"]

ket[0] = {1, 0} ; ket[1] = {0, 1} ;

ket[x_String] := Apply[CircleTimes, Table[If[StringTake[x, {i, i}] == "0", ket[0], ket[1], "NotDef"], {i, StringLength[x]}]]

Clear[MatrixDisplay] MatrixDisplay[tensor_CircleTimes] := Map[MatrixForm, tensor] MatrixDispla ... matrix_] := Map[MatrixForm, matrix]/;MatrixQ[matrix] MatrixDisplay[ket__] := MatrixDisplay[{ket}]

bitQ[x_] := If[VectorQ[x] && Dimensions[x] == {2}, True, False, False]

ket[x_Integer, bits_Integer] := Apply[CircleTimes, Map[ket, IntegerDigits[x, 2, bits]]]

Clear[Tensor] Tensor[tensorList_CircleTimes] := Apply[Tensor, tensorList] Tensor[{ket_}] := ke ...  Table[fm[[i, j]] tensor2, {j, Length[fm[[i]]]}]], {i, Length[fm]}]]] /;VectorQ[ketList, MatrixQ]

WalshHadamardMatrix = 1/2^(1/2) (1    1 ) ;                                   1    -1

Clear[WalshHadamard] WalshHadamard[ket_] := WalshHadamardMatrix . ket /;bitQ[ket] WalshHadamar ... List] /; VectorQ[ketList, bitQ] WalshHadamard[ketList_CircleTimes] := Map[WalshHadamard, ketList]

Clear[GroverSearchMain] GroverSearchMain[f_, BasicState_List, iteration_Integer] := Module[{Rf ... {n}]]] ; 
amplitude[k_Integer] := amplitude[k] = Uf . amplitude[k - 1] ; 
amplitude[iteration] 
]

Clear[GroverSearchMainTrace] GroverSearchMainTrace[f_, BasicState_List, iteration_Integer] :=  ... e[k_Integer] := amplitude[k] = Uf . amplitude[k - 1] ; 
Table[amplitude[i], {i, 0, iteration}] 
]

<<Graphics`Graphics`
 Clear[GroverShowGraphics] GroverShowGraphics[amplitude_List] := Mo ... esOrigin -> {0, 0}] ; 
Do[ShowGraphics[i], {i, Dimensions[amplitude][[1]]}] 
]/;MatrixQ[amplitude]

GroverSearchSolve[amplitude_List] := Module[{r, i, s}, 
r = Random[] ; 
s = amplitude[[1]]^2 ; ... i - 1]]^2, "=", N[amplitude[[i - 1]]^2, 3], "で観測されました"] 
]/;VectorQ[amplitude]

GroverSearchSolveRetNum[amplitude_List] := Module[{r, i, s}, 
r = Random[] ; 
s = amplitude[[1]]^2 ; 
For[i = 2, s< r, i ++, s = s + amplitude[[i]]^2] ; i - 2
]/;VectorQ[amplitude]

Clear[GroverSearch] GroverSearch[f_, Number_Integer, t_Integer] := Module[{n, stateX, i}, 
n = ... ket[i, n], {i, 0, Num - 1}] ; 
i = Floor[N[π]/4 Num/t^(1/2)] ; 
GroverSearchMain[f, stateX, i] 
]

Clear[GroverSearchTrace] GroverSearchTrace[f_, Number_Integer, t_Integer] := Module[{n, stateX ... eiling[i] - i) >1/2, i = Floor[i], i = Ceiling[i]] ; *)
GroverSearchMainTrace[f, stateX, i] 
]

f[_] = 0 ; f[ket[7, 4]] = 1 ;

GroverShowGraphics[GroverSearchTrace[f, 16, 1]] GroverSearchSolve[GroverSearch[f, 16, 1]] GroverSearchSolveRetNum[GroverSearch[f, 16, 1]]

[Graphics:HTMLFiles/index_19.gif]

[Graphics:HTMLFiles/index_20.gif]

[Graphics:HTMLFiles/index_21.gif]

[Graphics:HTMLFiles/index_22.gif]

7番目の状態が確率63001/65536 = 0.961で観測されました

7


Created by Mathematica  (February 3, 2005)