溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

全域哈希和完全哈希

發(fā)布時間:2020-06-20 13:31:47 來源:網(wǎng)絡(luò) 閱讀:2528 作者:匯天下豪杰 欄目:編程語言

1、直接映射表

  查找數(shù)據(jù)時,直接定位,時間復(fù)雜度為:O(1);

  局限性:浪費(fèi)大量的內(nèi)存空間;


2、哈希表

  (1)、用一個哈希函數(shù)Hash()來隨機(jī)映射那些鍵;

抽象模型

全域哈希和完全哈希

  (2)、哈希沖突時:

  i、鏈地址法,時間復(fù)雜度最壞:O(n);

  簡單均勻哈希的時間復(fù)雜度:O(1+a);a:裝載因子

  哈希函數(shù)的選?。撼粲鄶?shù)法;

  ii、開放尋址法,沒有鏈表;

  利用多次哈希函數(shù),探測空的位置,直到找到一個可以存放元素的位置即可;探查序列很重要!??!

  插入、查詢就根據(jù)探查序列比較簡單,刪除比較難做;

  探測序列:a、線性探測:一個挨一個位置的探測,往下掃描;

  探測序列:b、二次哈希:2個哈希函數(shù)的和掃描;

  哈希表越滿,其探查效率越低;


3、哈希表溢出,動態(tài)哈希怎么實(shí)現(xiàn)?

  i、首先申請一個原哈希表2倍大的空間;

  ii、在將舊有元素移到新的哈希表空間中;

  iii、在釋放原有空間;

平攤分析的思想:

  一個插入的平均代價時間復(fù)雜度:O(1);

  n個元素的插入時間復(fù)雜度是:O(n);


4、哈希函數(shù)的所有鍵映射同一個槽,此時查詢效率極為低下。

  (1)、問題關(guān)鍵:選擇哈希函數(shù),要隨機(jī)選擇,與輸入的哈希運(yùn)算的鍵保存獨(dú)立,程序員本身也不能確定在實(shí)際運(yùn)行時會用到哪一個哈希函數(shù),無法預(yù)測隨機(jī)數(shù)的輸出;----->全域哈希

  (2)、全域哈希解決的問題:所有鍵都相同,此時隨機(jī)選擇哈希函數(shù)將會使其映射到不同的槽中;

  哈希函數(shù)集H中隨機(jī)地選擇函數(shù)h,均勻的分布在哈希表中;

  (3)、全域哈希的構(gòu)造

  i、槽的總數(shù)為m = 質(zhì)數(shù)時成立,k = <k_0,k_1,.....,k_r>把任意的鍵分解為r+1位,可以把k看成k_0,k_1......k_r(k_i >= 0 && k_i <= m-1),k用"m進(jìn)制"來表示;k不斷除m,取余在除(進(jìn)制轉(zhuǎn)換法)

  ii、構(gòu)造一個a = <a0,a1,a2....ar>,隨機(jī)地從(0,1,2,....m-1)中選取元素分配到a集合中;

  哈希函數(shù)集:k x a,k中的每一項(xiàng)和a中的每一項(xiàng)相乘,再把乘積全部加起來,在對m取余,就得到分配的槽數(shù);哈希函數(shù)集的大小:m^(r+1);

  (4)、全域哈希是用隨機(jī)函數(shù)的思想,但是有很小很小的概率還是會沖突的,解決方案:完全哈希;


5、完全哈希

  使用二級結(jié)構(gòu),在每一級都會用全域哈希,第一級可能會有沖突,但是第二級就沒有了;

  (1)、算法模型

全域哈希和完全哈希

  (2)、算法分析:

  時間復(fù)雜度:O(1);

  所需的存儲空間為:O(n);




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI