hash學習筆記

2022-02-02 01:35:27 字數 1507 閱讀 9726

學長來講了hash,感覺好香

而我們常將雜湊的思想用在字串中 用於o(1) 判斷給出的兩個字串是否相等(預處理完的情況下)

這裡結合例題理解一下:

給出兩個字串a與b 每次詢問給出l,r,s,t 判斷a[l...r] 與 b[s...t]是否相等

如果我們用裸的暴力的話 顯然對於每次詢問我們都要用o(n) 的效率 所以對於m次詢問效率是o(nm)但是我們用hash可以很輕鬆的解決這個問題

關於乙個字串我們很顯然是無法直接o(1)比較的 但是對於乙個數字可以 所以我們可不可以把乙個字串轉化為數字呢?

答案是肯定的

for(int i = 1;i <= strlen(s1+1);++i)
pw[0] = 1;

for(int i = 1;i <= strlen(s1+1);++i)

下面給出例題**

#includeusing namespace std;

const int maxn = 1e5+10;

const int base = 223;

int pw[maxn],f1[maxn],f2[maxn];

char s1[maxn],s2[maxn];

int main()

pw[0] = 1;

for(int i = 1;i <= strlen(s1+1);++i)

for(int i = 1;i <= strlen(s2+1);++i)

int m;scanf("%d",&m);

while(m--)

return 0;

}

關於乙個較大的值域 我們希望在較短的時間內完成查詢操作 但是值域太大導致不能用計數陣列 (你又懶得用離散化) 就可以用雜湊表來處理了

對於這樣乙個數列

我們想要查詢乙個數字 可以選擇開乙個陣列a[7] 然後將這幾個數字都存進去

然後如果要查詢的話 顯然會是o(n) 的效率 如果加上各種奇淫巧技應該還可以再優化到\(log_n\)吧

但是我們也可以選擇開乙個陣列a[1353] 然後將數值作為下標 陣列儲存出現幾次

這樣我們要查詢某個數字出現次數就是o(1)的效率

顯然我們的效率提高了很多 但是看看我們的空間 ……………………………………(淚目就完了)

所以這時我們雜湊表閃亮登場

背景 :

#includeusing namespace std;

const int maxn = 1e5+10;

const int mod = 223;//模數

struct nodea[maxn];

int head[maxn],tot;

void add(int x)

if(!u)

}int ask(int x)

int main()

while(m--)

return 0;

}

hash表學習筆記

一 hash表的基本概念和優缺點比較 hash表又稱雜湊表 是一種資料結構,與鍊錶 二叉樹有很大區別。1 hash表優缺點 優點 能夠在常數級的時間複雜度上進行查詢,並且插入資料和刪除資料簡單。hash未滿的時候速度很快 2 與鍊錶比較 鍊錶 查詢上表中的資料從頭開始遍歷,直到查到或者查詢失敗。ha...

perl 雜湊 hash 學習筆記( )

1.什麼是雜湊 雜湊是perl的一種資料型別,比較類似陣列,用於存放資料,包括2部分關鍵字keys和值value。不同於陣列,雜湊訪問元素的是按照名字訪問標量的key value.hash 用 來標示 2.hash 操作 a.增加 my hash 定義 第一種寫法 hash young author...

perl 雜湊 hash 學習筆記

1.什麼是雜湊 雜湊是perl的一種資料型別,比較類似陣列,用於存放資料,包括2部分關鍵字keys和值value。不同於陣列,雜湊訪問元素的是按照名字訪問標量的key value.hash 用 來標示 2.hash 操作 a.增加 my hash 定義 第一種寫法 hash young author...