HashMap、HashTable、HashSet、TreeMapの時間計算量



Time Complexity Hashmap

hashSet、hashtable、およびhashMapはすべて、ハッシュ関数、時間計算量O(1)に基づいていますが、それが悪すぎる場合はO(n)です。

TreeSet ==> O(log(n))==>ツリーベースの検索、半分だけ検索する必要があります



The reason for O(1) is that after the discrete, the subscript corresponding keyword

ハッシュはハッシュ、あるいはハッシュです。しかし、私は常にハッシュテーブルの時間計算量について質問をしていました。保存する必要のある文字列。ハッシュ関数によって比較的短いインデックスにハッシュされ、アクセス速度が速くなります。しかし、なぜアクセスの時間計算量が一定レベルO(1)に達するのでしょうか。 ?検索時にインデックスを検索するのに時間がかかりませんか?なぜO(n)ではないのですか? nはハッシュテーブルの長さです。

Hashtableの構造を深く理解している場合、Hashtableは配列とリンクリストの利点を組み合わせたものです。 Hashtableが値を検索するときは、最初にHashtableの値と長さを使用してモジュロ演算を実行します。取得した数値は、ハッシュテーブルがエントリ配列で構成されているため、ハッシュテーブル内のエントリ配列のインデックスとして直接使用され、指定した位置に直接配置できます。もちろん、検索する必要はありません。問題があります。ここでは、各エントリは実際にはリンクリストです。エントリに多くの値がある場合でも、トラバースする必要があるため、ハッシュテーブルの時間計算量はO(1)であることが望ましいですが、最悪の場合はO(n)であると言えます。最悪の場合、それはハッシュテーブル内のすべての値です。ハッシュ値は同じであり、すべてエントリに割り当てられます。もちろん、この確率は1億枚の宝くじの確率と大差ありません。



エントリリストのループの時間計算量に最も大きな影響を与えるようであり、リンクリストルックアップの時間計算量はO(n)であり、これはリンクリストの長さに関連しています。リンクリストの長さが1であることを確認する必要があります。時間計算量は、O(1)を満たすことができると言えます。ただし、この場合、ハッシュアルゴリズムのみが競合を最小限に抑えるため、リンクリストの長さは可能な限り短くなり、理想的な状態は1になります。したがって、HashMapの検索時間の複雑さはOのみであると結論付けることができます。 (1)最悪の場合、最も理想的なケースではO(n)であり、この理想的な状態が開発者によって制御されないことが保証されています。

一般的なデータ構造の時間計算量


http://www.cnblogs.com/aspirant/p/8902285.html
http://www.cnblogs.com/aspirant/p/8908399.html
http://www.cnblogs.com/aspirant/p/8906018.html