码迷,mamicode.com
首页 > 其他好文 > 详细

哈希模板

时间:2019-07-13 21:25:01      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:stl   拉链   单链表   一个   int   映射   void   find   ons   

哈希模板

  • 开放寻址法
  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;
}

哈希模板

标签:stl   拉链   单链表   一个   int   映射   void   find   ons   

原文地址:https://www.cnblogs.com/tyroHeart/p/11182091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!