哈希模板

哈希模板

  • 开放寻址法
  1. 思路:开辟一个2-3倍的空间存储。
  2. 冲突处理:找空位进行插入,如果当前位置存在数,继续向后寻找空位,直到有空位进行插入,最后判断是否越界。
const int N = 200003, null = 0x3f3f3f3f;
int h[N];
int find(int x) {
    int t = (x % N + N) % N;
    while (h[t] != null && h[t] != x) {
        t ++ ;
        if (t == N) {
            t = 0;
        }
    }
    return t;
}
  • 拉链法
  1. 思路:开辟一个映射空间。
  2. 冲突处理:每个空间都挂载一个单链表,和STL的hash_table的实现方法类似。
const int N = 100003;
int h[N], e[N], ne[N], idx;
void insert(int x)
{
    int k = (x % N + N) % N;
    e[idx] = x;
    ne[idx] = h[k];
    h[k] = idx ++ ;
}
bool find(int x)
{
    int k = (x % N + N) % N;
    for (int i = h[k]; i != -1; i = ne[i])
        if (e[i] == x)
            return true;
    return false;
}
posted @ 2019-07-13 21:10  学徒之心  阅读(283)  评论(0编辑  收藏  举报