データ構造ハッシュ表
12940 ワード
HashTableって何ですか?
LinkedListを習ってからスケジュールを見て理解しやすくなりました
ハッシュテーブルの仕組みは思ったより簡単!
簡単に言えば
上の順番と写真を一緒に見ると感じます
では、なぜHash Tableを使うのでしょうか。
はい、データを通常の配列に格納していますが、必要な値を検索するにはauto kが必要ですか?配列の特性を知らない以上、最初から巡回しなければ見つけられません.運が悪ければ、最後まで行けば見つかるのではないでしょうか.短い配列なら大丈夫ですが、データ量が100万や1000万を超えるとどうなりますか?運が悪ければ、1000万回まで確認する必要があるかもしれません.
この場合、ハッシュ・テーブルを使用すると、検索したい鍵をハッシュ関数に挿入し、表示された番号を対応する番号に使用して鍵を検索できます.これにより、より迅速に見つけることができます.メモリも効率よく使えます!
Hash Table Sudoコード
1.Insert
1.1. 空のオブジェクトを作成
1.2. ハッシュ関数に入力したキーと最大長を加え、インデックスを取得します.
1.3. パッケージ[インデックス]が空の場合
1.4. 空のオブジェクトに値を入れます.
1.5. オブジェクトをパッケージに入れます.
1.6. もしなかったら、かばんの中で値上げします.
1.7. サイズ+1
2. Retrieve
2.1. パケット[インデックス]が空の場合、undefinedが返されます.
2.2. パケットのインデックスに鍵を返す
3. Remove
3.1. インデックスにキーがある場合
3.2. deleteとして削除
3.3. サイズ-1
4. Resize
4.1. 現在のパッケージを変数に保存
4.2. 最大パッケージサイズを入力パッケージサイズに変更
4.3. パッケージの内容を初期化
4.4. パッケージサイズのリセット
4.5. 保存したパッケージからinsert関数として実行する
Hash Table jsコード
class HashTable {
constructor() {
this._size = 0;
this._bucketNum = 8;
this._storage = LimitedArray(this._bucketNum);
}
insert(key, value) {
let obj = {}
const index = hashFunction(key, this._bucketNum);
if(this._storage.get(index) === undefined){
obj[key] = value
this._storage.set(index, obj)
}
else{
obj = this._storage.get(index)
obj[key] = value
this._storage.set(index, obj)
}
this._size++
if(this._size > (this._bucketNum * 0.75)){
this._resize(this._bucketNum * 2)
}
}
retrieve(key) { /// 현재 한 객체에 다 모여 있는 형태임 ex : {key: value, key: value, key: value, key: value .....}
const index = hashFunction(key, this._bucketNum);
if(this._storage.get(index) === undefined){
return undefined;
}
return this._storage.get(index)[key]
}
remove(key) {
const index = hashFunction(key, this._bucketNum);
if(this._storage.get(index)[key]){
delete this._storage.get(index)[key]
this._size--
if(this._size < (this._bucketNum * 0.25)){
this._resize(this._bucketNum / 2)
}
}
}
_resize(newBucketNum) {
let oldstorage = this._storage
this._bucketNum = newBucketNum
this._storage = LimitedArray(newBucketNum);
this._size = 0;
oldstorage.each(obj => {
for(let key in obj){
this.insert(key, obj[key])
}
})
return this._storage
}
}
Reference
この問題について(データ構造ハッシュ表), 我々は、より多くの情報をここで見つけました https://velog.io/@dorazi/Hash-Tableテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol