次の問題を検討してください。
入力:整数のをリストします
目標:両方のリストに整数が存在するかどうかを判断します。
両方のリストのサイズがます。この問題の確定的な線形時間アルゴリズムはありますか?言い換えれば、ランダム性を使用せずに、この問題を時間で決定論的に解決できますか?
残念ながら、リストの要素がすべて小さいとは限りません。
ランダム化されたアルゴリズムを使用して予想時間でそれを解決する方法を見ることができます:2つのユニバーサルハッシュ関数ランダムに選択し、の要素をハッシュテーブルに格納し(ハッシュ関数としてを使用)、次にルックアップします各要素を調べて、それがハッシュテーブルにあるかどうかを確認します。予想される実行時間はO (n )になります。しかし、O (n )の実行時間で決定論的アルゴリズムを見つける方法がわかりません。これをランダム化解除して単一の特定のハッシュ関数を修正しようとすると、最悪の場合の入力が存在し、このプロシージャがΘ (n時間。私が見つけることができる最良の決定論的アルゴリズムは、値をソートすることですが、それは線形時間ではありません。線形実行時間を達成できますか?
また、すべてのリスト要素が範囲整数であると仮定すれば、線形時間でそれを解決する方法を見ることができます(基本的に、ソートのカウントを行います)-しかし、一般的に何が起こるかに興味がありますそれが想定できない場合。
答えが計算モデルに依存している場合、RAMモデルは思い浮かびますが、合理的な計算モデルの結果に興味があります。私はを知ってるの要素の一意性のための決定木アルゴリズムの下限がある場合でも、時には我々は線形時間アルゴリズムを見つけることができるように、これは決定的ではありませんΩ (nはログN )にバインド決定木モデル。