1ハッシュ関数
入力を出力にマップするハッシュ関数。
- 1.同じハッシュ関数は常に同じインデックス入力にマップされます。同じ入力が、結果は同じです。入力りんごは、それぞれの時間は、4を得ました。
- 2.ハッシュ関数は、別のインデックスにマッピングされた入力を呼び出すことはありません。
- 配列どのように大きなリターンのみ有効な指標になるまで3.ハッシュ関数。
ハッシュテーブルはまた、ハッシュマップ、地図、辞書、および連想配列として知られています。
2.アプリケーション
2.1ハッシュテーブルを見つけるために使用されます
電話帳を作成します。
phone_book = {}
#或者phone_book = dict()
phone_book["马云"]=18888888888
phone_book["马化腾"]=16868686868
#获取马云的练习方式
print(phone_book["马云"])
ハッシュテーブルはまた、DNS解決に適している
に関係なく、サイト訪問、そのURLはIPアドレスに変換する必要があります。として
baidu.com -> 183.232.231.174
sina.com -> 36.156.86.241
163.com -> 111.3.84.41
2.2繰り返しを防ぐために
投票所の責任ある管理する場合。一人あたりわずか一票。投票の誰かが、我々は彼の名前を照会する必要があり、投票リストで見て、それが投票していないことを確認してください。
あなたは、単純な検索を使用する場合は、リストが非常に長い場合、時間がかかり、長い時間となります。
ハッシュテーブルを使用して、それは非常に高速です。
voted={}
def check_voter(name):
if voted.get(name):
print("已经投过票了")
else:
voted[name]=True
print("让他投")
check_voter("tom") #让他投
check_voter("mike") #让他投
check_voter("mike") #已经投过票了
2.3は、キャッシュハッシュテーブルとして使用されます
仮定誰かがあなたは、あなたがお互いに答えを伝えるために、検索する必要があり、地球と月の間の距離を求めました。後で再度、直接答えを聞いて、ローカルキャッシュの答えがあるでしょう。
キャッシュ:
- すぐに答えることができ、ユーザーがすばやく地球と月の間の距離として覚えているだけのように、ページを見ることができ、その後、誰かが尋ねました
- 以下の作業を行うためのサイト
cache={}
def get_page(url):
if cache.get(url):
return cache[url] #返回缓存的数据
else:
data = get_data_from_server(url)
cache[url]=data #保存到缓存中
return data
2.4まとめ
ハッシュテーブルに適して:
- アナログマッピング関係
- 防止重複
- キャッシュ/データは、サーバーを回避し、そのプロセスを介してそれらを生成するために、覚えておいてください。
3.紛争
そのようなハッシュテーブル要素の長さよりも大きい26 AZ文字、などの特定の長さのハッシュキー、。在庫補充アボカド-3.99場合は二つの要素が競合と同じ位置に割り当てられているため、保存されたリンゴ-1.49を持っています。競合を避けるために:同じ場所にマップされた2つのキーは、リンクリストは、この場所に格納されている場合。
お使いの製品が全体の始まりである場合は、すべての要素がリンクリストに保持され、ハッシュテーブルが遅くなることがあります。
経験:
- ハッシュ関数は非常に重要です。均一なハッシュ関数にキーは、ハッシュテーブルの異なる位置にマッピングされます。
- リストに保存されているハッシュテーブルが非常に長い場合は、ハッシュテーブルの速度は急激な減少になります。ハッシュ関数がよく使用されている場合、リストは非常に長くなることはありません。
4.パフォーマンス
平均して、様々な操作をハッシュ時定数の時間を行う(O(1))。
時定数:しかし、どのくらいのハッシュテーブル、時間が同じのために必要。
サン・パフォーマンス・リスト:
オペレーティング | 平均ケース | 最悪の場合 |
求めます | O(1) | O(N) |
挿入 | O(1) | O(N) |
[削除] | O(1) | O(N) |
4.1フィルファクター
充填率=要素の数がハッシュテーブルに含ま/位置の総数
そのようなリストの長さとしては、二つの要素、0.4の充填率があり、5である。
充填率は、ハッシュテーブルの位置が空でどの程度の尺度です。
項目数が桁数のアレイを超えて1つの手段よりフィルファクタ大きいです。フィルファクタが増加し始めると、あなたは長さを調節することが知られているハッシュテーブルに場所を追加する必要があります。通常倍になる配列の長さを調整します。
ハッシュテーブルの性能が高いほど、衝突の可能性も小さく、フィルファクタ低いです。経験:0.7よりフィルファクタ大きいと、ハッシュ・テーブルの長さを調節します。
4.2良いハッシュ関数
良いハッシュ関数配列の値が均等に分散されたように、回避値は、一緒に紛争の多くにリードを取得します。
5まとめ
- 競合が非常に悪いです、良いハッシュ関数は、競合を減らすことができます
- ハッシュテーブルの検索、挿入、削除の速度は非常に高速です
- アナログとの間のマッピングのためのハッシュテーブル
- 0.7オーバーフィルファクターたら、それはハッシュテーブルの長さを調整する時間です。
- ハッシュテーブルは、データをバッファリングするために使用することができます
- 理想的に繰り返し適しウェイハッシュテーブル