国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP源碼 PHP 實現(xiàn)HASH表

PHP 實現(xiàn)HASH表

Nov 09, 2016 pm 02:43 PM

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(&#39;key1&#39;,&#39;value1&#39;);
     //$ht->insert(&#39;key12&#39;,&#39;value12&#39;);
        echo $ht->find(&#39;key1&#39;);


本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)