[解決済み] Javaのハッシュマップ検索は本当にO(1)なのか?
質問
SOで、Javaのハッシュマップとその
O(1)
ルックアップに時間がかかる。なぜそうなのか、誰か説明してください。これらのハッシュマップが、私が買ってきたどのハッシュアルゴリズムとも大きく異なっていない限り、衝突を含むデータセットが常に存在するはずです。
その場合、ルックアップは
O(n)
ではなく
O(1)
.
なのか、誰か説明してください。 は O(1)であるとすれば、それをどのように達成するのか?
どのように解決するのですか?
HashMapの特徴は、例えばバランス木と違って、その挙動が確率的であることだ。 このような場合、通常、最悪の事態が発生する確率という観点から複雑さを語るのが最も有用である。 ハッシュ・マップの場合、それはもちろん、マップがどれだけ完全であるかということに関して、衝突が発生する場合です。 衝突の発生確率を見積もるのはとても簡単です。
<ブロッククオートp <サブ 衝突 = n / 容量
つまり、それなりの数の要素を持つハッシュマップでも、少なくとも1回は衝突が発生する可能性が高いということです。 ビッグ・オー表記を使えば、もっと説得力のあることができる。任意の固定定数kについて、次のことを観察してください。
<ブロッククオートO(n) = O(k * n)
この特徴を利用して、ハッシュマップの性能を向上させることができるのです。 代わりに、最大で2回の衝突が起こる確率を考えることもできる。
p <サブ 衝突×2 = (n / 容量) 2
これはかなり低くなりましたね。 1つの余分な衝突を処理するコストはBig Oのパフォーマンスとは無関係なので、実際にアルゴリズムを変更せずにパフォーマンスを向上させる方法を見つけたのです これを一般化すると
<ブロッククオートp <サブ 衝突 x k = (n / 容量) k
そして、任意の数の衝突を無視することができ、考慮した以上の衝突が発生する可能性は限りなく低くなります。 正しいkを選択することによって、アルゴリズムの実際の実装を変更することなく、任意の小さなレベルまで確率を得ることができます。
このことを、ハッシュマップのアクセス数はO(1)であると言っています。 高い確率で
関連
-
スレッド "main" で例外発生 java.lang.ArrayIndexOutOfBoundsException: 4 at text.Division.main(Divisi
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
java -serverコマンドで「Error: no `server' JVM at ... jvm.dll」を解決する方法です。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ファインバグタイプ
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
サーブレットクラスのインスタンス化エラーの解決法
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
アイデア Springboot Web プロジェクトを jar にパッケージ化する場合、Error: 無効または破損した jarfile x.jar 解決策
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
-
[解決済み] set()はどのように実装されていますか?