zoukankan      html  css  js  c++  java
  • 哈希表

    哈希就是将某种类型的值映射到同种类型或其他类型的值。可以做到在常数时间内查询。

    c++ STL中提供的map,就可以作为哈希表使用。

    1 #include<iostream> //使用pair
    2 #include<map>
    3 using namespace std;
    4 map<int,int> mp;
    5 mp.insert(pair<int,int>(x,y)) //插入数对(x,y)
    6 mp.count(x) //查询是否出现过关键字x,是返回1,否返回0
    7 mp[x]=y; //可以像数组一样,通过关键字直接使用
    8 //若关键字未出现过,则mp[x]是该类型默认值
    9 mp.clear() //清空map

    但是时间复杂度不低,是O(nlogn)的。还可以自己实现哈希表,在这里直接放一种比较不错的方法。

     1 int h[p]; //p是一个较大的质数,通常不小于1e7
     2 //初始化h数组为-1
     3 void insert(int x) {
     4     int i=x%p;
     5     while(h[i]!=-1&&h[i]!=x) {++i;if(i==p) i=0;}
     6     h[i]=x;
     7 }
     8 int query(int x) {
     9     int i=x%p;
    10     while(h[i]!=-1&&h[i]!=x) {++i;if(i==p) i=0;}
    11     if(h[i]==x) return 1;
    12     else return 0;
    13 }

    通过取模得到一个位置,如果是空的,那么把数放上去就行,否则向后找,直到找到一个空位置,放上去;查询时也是如此。

    一般来说,当p超过一千万时,冲突的概率就很小,因此每次操作的时间近似常数,而且只要p足够大,那么这样做结果一定是正确的。

  • 相关阅读:
    分享
    慕课网-软件测试基础-学习笔记
    向量内积(点乘)和外积(叉乘)概念及几何意义
    使用opencv3+python实现视频运动目标检测
    解决opencv3运行opencv2代码时报错的修改备忘录
    分享
    OpenCV学习笔记
    LeetCode
    LeetCode
    npm安装包很慢
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9746631.html
Copyright © 2011-2022 走看看