iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
0

Hash Table是蠻高效的資料結構,時間複雜度是O(1),資料經由hash function產出一個固定值作為資料索引值。但有時候hash function如果設計不佳,會有不同資料產出同樣索引值的狀況,也就是發生collision,所以需要修改hash function直到問題消失。

img

效能:

  1. 平均情況:搜尋、插入、刪除,皆為 O(1)。
  2. 最壞情況:搜尋、插入、刪除,皆為 O(n)。

這邊hash function直接用sha256 function。
程式碼如下:

const sha256 = require('sha256');

class Dictionary{
  constructor(){
    this.items={}
  }
  genHash(key){
    const hash= sha256(key);
    return hash;
  }
  has(key){
    return this.items.hasOwnProperty(key);
  }
  set(key,value){
    const itemKey=this.genHash(key);
    this.items[itemKey]=value;
  }
  get(key){
    return this.items.hasOwnProperty(key) ? this.items[key]:undefined;
  }
  values(){
    return Object.values(this.items);
  }
  keys(){
    return Object.keys(this.items);
  }
  getItems(){
    return this.items;
  }
  clear(){
    this.items={};
  }
  size(){
    return Object.keys(this.items).length;
  }
  remove(key){
    if(this.items.hasOwnProperty(key)) {
      delete this.items[key];
      return true;
    }
    return false;
  }
}

const dictionary=new Dictionary();
dictionary.set('price',100);
console.log(dictionary.has('price')); 
console.log(dictionary.keys()); 
console.log(dictionary.values());
console.log(dictionary.getItems()); 
console.log(dictionary.get('price')); 
dictionary.remove('price');
console.log(dictionary.keys());
dictionary.set('quantity',5);
console.log(dictionary.getItems()); 
dictionary.clear();
console.log(dictionary.getItems()); 

程式碼


上一篇
字典(Dictionary)
下一篇
深度優先搜尋法(Depth Frist Search)
系列文
透過JavaScript學習演算法與資料結構30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言