通過乙個例子來熟悉hash函式的功能作用以及如何使用。
(1)有100萬個ip位址,從中查詢是否存在待查的ip位址
(2)使用hash對映來實現
(1)hash表面上看起來只是將輸入物件雜湊到hash表中,其實在使用使用中過程有:
(2)使用c語言的隨機函式生成ip位址,模擬海量資料處理
#define maxipnum 1000000
#define hashtablelen 10000
#define ipstrlen 16
#include #include #include "hash_ip.h"
void main()
}
(1)節點結構:
struct hashnode
;
(2)
hash陣列表
:struct hashtable
hashtable[hashtablelen];
(3)初始化hash表(使用鍊錶來解決衝突):
void inittable()
}
(4)
對映和雜湊:
void beginhash()
else
tmpnode->next = node;
} hashtable[tmpindex].value++;
index++;
}}
(5)
hash函式
:可以自行設計優化,使得更均勻,衝突更少int gethashcode(const char *str)
return (hashcode & 0x7fffffff);
}
(6)
查詢
void findstr(const char *str)
else if(!strcmp(tmpnode->str, str))
tmpnode = tmpnode->next; }
if(0 == mark)
}
@cl /nologo haship.c
@cl /nologo randip.c
@del haship.obj randip.obj
@call randip.exe > randip.txt
@call haship.exe < randip.txt > result.txt
@del haship.exe randip.exe
@pause
內建函式高階 hash
class foo pass obj1 foo obj2 foo print hash obj1 記憶體位址 136382060082 print hash obj1 記憶體位址 136382060082 print hash obj1 記憶體位址 136382060082 print hash o...
高階元件 高階函式 一
antd裡面的form表單方面,遇到乙個高階函式,以及高階元件,於是看了一下這方面內容,前輩們的文章寫得也非常詳細,這裡就稍微kobe一下 高階函式與高階元件 高階函式 高階函式,是一種特別的函式,接受的引數為函式,返回值也是函式 成立條件,二者兼一即可 1 一類特別的函式 a 接受函式型別的引數 ...
Hash函式和Hash衝突
2.rehash 3.鍊錶法 4.建立公共溢位區 一 簡介 將任意長度的數值以某個對映規則對映為固定長度的數值,這個過程稱為hash,而這個對映規則被稱為hash函式,而對這個key value進行儲存的資料結構被稱為hash表。由於通過key的hash對映直接得到了記憶體位址,所以hash查詢的時...