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');

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)