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

哈希技术

时间:2015-03-11 16:55:15      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

哈希技术

哈希技术应用广泛,可用于判重,存取,查询,降低时间复杂度;

哈希可用STL中的set代替

技术分享
哈希可用STL中的set
set<int> ss;
ss.insert(t); //插入
if(ss.find(a)!=ss.end())... //找到
ss.clear(); //清空
STL_set

哈希模版

技术分享
const int HM=999983;  //采用质数可减小冲突

struct Hash
{
    long long date;
    Hash *next;
};Hash h[HM];

int h(long long date)
{
    int res=0;
    ....//随便算,位运算和加法比乘法更省时
    return abs(res)%maxn;
}

void insert(long long date,Hash *H)
{
    int key=h(date);    //哈希函数;
    Hash *pre=&H[key],*p=pre->next;
    while(p!=NULL){
        if(p->date=date) return;
        pre=p;
        p=p->next;
    }
    p=(Hash*)malloc(sizeof(Hash));
    p->date=date;p->next=NULL;  //注意此处要将p->next置空,否则runtime error
    pre->next=p;
}

bool find(long long date,Hash *H)
{
    int key=h(date);
    Hash *pre=&H[key],*p=pre->next;
    while(p!=NULL){
        if(p->date==date) return true;
        pre=p;
        p=p->next;
    }
    return false;
}

void Init(Hash *H) //初始化或清空哈希表
{
    memset(H,NULL,sizeof(H));
}
hash模版

显然,哈希比STL效率高得多

 

哈希技术

标签:

原文地址:http://www.cnblogs.com/--560/p/4330206.html

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