學長來講了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...