哈希算法
定義hash函數使狀態轉移爲數字,但有可能多個狀態的hash值相同,稱其爲衝突。用hash表來解決衝突。
int find(int k)
{
Int h = hash(k);
Int p = first[h];
While (p)
{
if(key[p] == k) return p;
p = next [p];
}
return 0;
}
void insert(int x)
{
Int h = hash(key[x]);
next[x] = first[h];
first[h] = x;
}
運用hash在dfs和bfs中判重比較方便,但要注意hash的效率,不要造成使用hash效率反而更低的情況,主要考慮因素爲每次取hash值的運算次數和衝突的多少,衝突越多,遍歷的鏈就越多,複雜度就高(可以通過選擇合適的hash函數較少衝突)。
但是hash表功能不僅用來判重,還可以用來儲存,將數據範圍很大的點hash一下,再導入hash表中,直接查找即可,查找效率爲hash計算效率。