私はこの問題を解決するために(CLRS、第3版、運動11.2から6)をしようとしている:チェーンされたハッシュテーブルからランダムな要素を効率的に選んでいますか?ただ、練習(とない宿題など)のための
我々はのハッシュテーブルにn個のキーを格納していると仮定サイズm、 の連鎖は連鎖によって解決され、最長連鎖の長さLを含む各 連鎖の長さを知ることができる。ハッシュテーブル内の キーの中からランダムに一様にキーを選択し、期待時間O(L *(1 + m/n))に戻す手順を説明する を記述します。
私がこれまで考えていたことは、各キーが返される確率が1/nだということでした。私たちが1からnまでのランダムな値xを得ようとすると、バケツでソートされた順番にx番目のキーを見つけようとすると、バケツのチェーンに沿ってソートされ、次にO(m) 1つずつバケツを通し、O(L)時間をかけてチェーン内の正しいキーを取得します。要素が返されるまで
どこがあなたの質問ですか? – outis
最悪の場合O(mn)は関連する項目を見つけるが、期待される時間は質問ごとにO(1 + m/n)でO(L *(m/n + 1))それらのすべて。 –
長さ情報はどのように保存されていますか? 1つのバケットにすべての要素があり、残りがゼロの場合、O(n)時間よりも速くバケットを見つけることもできないと考えています。要素がどこにあるかについて利用できる他の情報はありますか? – templatetypedef