はじめに:
衝突の問題は、ほとんどの場合、スコットアーロンソンが博士論文で説明した2対1のバージョンを指します。ことを考えると偶数であり、関数我々は、いずれかのことを事前に知っている 1対1又は2であります-1。任意のの値についてのみクエリを実行できます。問題は、が1対1か2対1 かを確実に判断するために必要なクエリの数を尋ねます。F :{ 1 、。。。、N } → { 1 、。。。、N } F F (I )I ∈ { 1 、2 、。。。、n } fnf:{1,...,n}→{1,...,n}ff(i)i∈{1,2,...,n}f
2対1のバージョンを決定的に解決するには、クエリが必要であり、一般にr対1関数と1対1関数を区別するにはクエリが必要です。n / r + 1n/2+1n/r+1
決定論的古典的解法:
これは、鳩の巣の原理の単純なアプリケーションです。関数がr対1の場合、クエリの後、衝突が検出されることが保証されます。関数が1対1の場合、衝突は発生しません。運が悪ければ、クエリは明確な答えを返す可能性があります。したがって、クエリが必要です。n / r n / r + 1n/r+1n/rn/r+1
ランダム化された古典的解法:
ランダム性を許可すると、問題はより簡単になります。誕生日のパラドックスでは、ランダムに(別個の)クエリを選択すると、クエリの後に固定2対1関数で衝突が見つかる可能性が高くなります
。Θ(n−−√)
量子BHTソリューション:
直感的に、このアルゴリズムは、
(古典的な)ランダム性を使用した誕生日の逆説からの平方根高速化と、グローバーの(量子)アルゴリズムからの平方根高速化を組み合わせ
ます。
最初に、への入力がランダムに選択され、それらすべてでがクエリされます。これらの入力間に衝突がある場合、衝突する入力のペアを返します。それ以外の場合、これらの入力はすべてによって異なる値にマッピングされます。次に、グローバーのアルゴリズムを使用して、衝突するへの新しい入力を見つけます。へのそのような入力はしかないため
、Groverのアルゴリズムは、
へのクエリ。n1/3ffffn2/3fO(n2/3−−−−√)=O(n1/3)f