この問題はMicrosoftのコードサンプルを一部利用し、編集しています。
GroverPractice
フォルダ以下が問題です。次のコマンドで実行できるようになっています。
> cd GroverPractice
> dotnet run
dotnet run
で実行できない場合は、.NET Core SDKおよびQuantum Development Kitがインストールされていない可能性があります。Q# の開発環境を準備する (.NET Core CLI + Visual Studio Code編)を参考にしてインストールしてください。
Driver.csは編集する必要はありません。 Operations.qsはメソッド定義とヒント(TODO)が書いてあるので、TODOの箇所を埋めていってください。
C#からQ#には、確率振幅増幅を何回行うか(nIterations)とデータベースの量子ビット列のサイズ(nDatabaseQubits)を渡す。 つまりデータベースのサイズは2^nDatabaseQubits。 実装の簡単のため、探索する状態は固定で |1..1> としています。
- TODOをうめていく
- 実行してみる
- データベースサイズ(nDatabaseQubits)や繰り返し数(nIterations)を変えて試してみる
- AmpAmpByOracle APIを使うパターンに実装を変更してみる。
AmpAmpByOracleはQ#がAPIとして提供している振幅増幅の関数です。これを使うと振幅増幅部分で量子ゲートを並べて実装するようなコードをかかずにすみます。 今回の実装だとあまり簡単さに変化はありませんが、Groverのアルゴリズムは探索対象を複数にすることもでき、そのようなケースではコードが非常に完結になります。 GroverMultiに探索対象が複数の場合の実装例を載せています。