Hash 表又稱散列表,通過關鍵字Key 映射到數(shù)組中一個位置來訪問記錄
Hash 函數(shù)的作用是把任意長度的輸入,通過HASH算法變換成固定長度的輸出,該輸出就是HASH值
HASH表的時間復雜度為O(1)
下文使用直接取余法實現(xiàn)
創(chuàng)建一個hashtable
class HashTable{ private $buckets; //用于存儲數(shù)據(jù)的數(shù)組 private $size = 12; //記錄buckets 數(shù)組的大小 public function __construct(){ $this->buckets = new SplFixedArray($this->size); //SplFixedArray效率更高,也可以用一般的數(shù)組來代替 } private function hashfunc($key){ $strlen = strlen($key); //返回字符串的長度 $hashval = 0; for($i = 0; $i<$strlen ; $i++){ $hashval +=ord($key[$i]); //返回ASCII的值 } return $hashval%$this->size; // 返回取余數(shù)后的值 } public function insert($key,$value){ $index = $this->hashfunc($key); if(isset($this->buckets[$index])){ $newNode = new HashNode($key,$value,$this->buckets[$index]); }else{ $newNode = new HashNode($key,$value,null); } $this->buckets[$index] = $newNode; } public function find($key){ $index = $this->hashfunc($key); $current = $this->buckets[$index]; echo "</br>"; var_dump($current); while(isset($current)){ //遍歷當前鏈表 if($current->key==$key){ //比較當前結點關鍵字 return $current->value; } $current = $current->nextNode; //return $current->value; } return NULL; } }
上述可能會有沖突問題,比如HASH表指向的
插入兩個元素,第二個元素的HASH值與第一個值得HASH值相同
則第二個元素將覆蓋第一個元素的值
這時我們用拉鏈法解決沖突:具有相同HASH值得字節(jié)點鏈接在同一個鏈表中。查找這個元素的時候就必須遍歷這條鏈表。
創(chuàng)建 HASHNODE
class HashNode{ public $key; //關鍵字 public $value; //數(shù)據(jù) public $nextNode; //HASHNODE來存儲信息 public function __construct($key,$value,$nextNode = NULL){ $this->key = $key; $this->value = $value; $this->nextNode = $nextNode; } }
實現(xiàn)
$ht = new HashTable(); $ht->insert('key1','value1'); //$ht->insert('key12','value12'); echo $ht->find('key1');
本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool
免費脫衣服圖片

Undresser.AI Undress
人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機

Video Face Swap
使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章
指南:恒星刀片保存文件位置/保存文件丟失/不保存
4 周前
By DDD
Agnes Tachyon Build Guide |漂亮的德比志
2 周前
By Jack chen
Oguri Cap Build Guide |漂亮的德比志
2 周前
By Jack chen
沙丘:覺醒 - 高級行星學家Quest演練
4 周前
By Jack chen
約會一切:德克和哈珀關系指南
4 周前
By Jack chen

熱工具

記事本++7.3.1
好用且免費的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網頁開發(fā)工具

SublimeText3 Mac版
神級代碼編輯軟件(SublimeText3)