2017.5.3中午,lkb大犇傳授了xd們兩個新的資料結構------
雜湊表、動態陣列
雜湊表是一種資料結構(棧、佇列也是資料結構)。我們通常會將它用在儲存方面,如:
有n(n<=10^6)個數的陣列a,a1….an<=10^9。要求統計出每個數在陣列中是第幾次出現的。
當然了,如果是陣列計數的話是百分百爆空間的,我們以用到雜湊表。雜湊表就是將資料進行處理,儲存到乙個陣列裡。
打個比方吧,我們可以將資料取模。一般的,10^n+7 為質數,我們可以用它取模。比方:
就像演示的,向7取模,在餘數的點進行處理。
但很明顯,我們的中的1,8取摸都為1,導致了衝突,官方的語言稱 雜湊衝突 。當然,衝突是不可避免的,所以我們可以用方法來解決。
拉鍊法:
拉鍊法就是用到了動態陣列。動態陣列就相當於乙個string一樣的,給定多少用多少記憶體(當然,在很多的情況下還是會爆),一般大賽裡儲存時可能會浪費空間,而導致爆空間,但有了動態陣列,就不會有陣列浪費的情況。
那麼,怎麼拉法呢?
遇到衝突,我們可以將他往後拉多乙個量,將我們的資料存進去。就像草圖一樣:
就是這麼簡單。**如下:
各種處理方法:
懂得了動態陣列,那麼就會使用拉鍊法了吧。
(學習kb,好榜樣····)
陣列與動態陣列
int main other element will be set as the default value 2.get length int size sizeof a1 sizeof a1 cout the size of a1 is size endl 3.access element co...
動態hash演算法實現
傳統hash表的實現主要有拉鍊法和開放位址雜湊法,而開放位址雜湊法又包括線性雜湊 二次雜湊等。當插入hash表的元素不斷增加時,傳統hash表為保證查詢效率,需要執行擴容然後對於hash表中的元素重新對映完成遷移。這項工作的開銷往往比較大,故在這種場景下,可以適用動態hash演算法。動態hash的原...
Hash演算法與Hash碰撞
什麼是hash演算法。雜湊函式 英語 hash function 又稱雜湊演算法 雜湊函式,是一種從任何一種資料中建立小的數字 指紋 的方法。雜湊函式把訊息或資料壓縮成摘要,使得資料量變小,將資料的格式固定下來。該函式將資料打亂混合,重新建立乙個叫做雜湊值 hash values,hash code...