博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
哈希模板
阅读量:6081 次
发布时间:2019-06-20

本文共 2597 字,大约阅读时间需要 8 分钟。

1 一维哈希 2 const int MAX=100007; 3 bool Hash[MAX]; 4 int idx[MAX]; 5 int val[MAX]; 6  7 void Insert(int id,int num) 8 { 9     int k=num%MAX;10     while(Hash[k] && val[k]!=num)11     {12         k++;13         if(k==MAX) k=k-MAX;14     }15     if(!Hash[k])16     {17         Hash[k]=1;18         idx[k]=id;19         val[k]=num;20     }21 }22 23 int found(int num)24 {25     int k=num%MAX;26     while( Hash[k] && val[k]!=num)27     {28         k++;29         if( k==MAX) k=k-MAX;30     }31     if( !Hash[k]) return -1;32     return idx[k];33 }34 二维哈希,而且优化。hash表如果用开放地址线性探测法解决冲突的话,很容易超时,35 而用链地址法解决冲突效果要好很多。36 这种哈希,相当于邻接表一样的。37 但是表头为空,所以memset()。其实也挺好理解的。38 39 struct hash40 {41     int x;42     int y;43     struct hash *next;44 };45 struct hash hash_table[1003];46 47 48 void Insert(int x,int y)49 {50     unsigned k=(x*x+y*y)%INF;51     struct hash *new_hash;52     new_hash=(struct hash *)malloc(sizeof(struct hash));53     new_hash->x=x;54     new_hash->y=y;//build 55 56     new_hash->next=hash_table[k].next;57     hash_table[k].next=new_hash;58 }59 bool found(int x,int y)60 {61     unsigned k=(x*x+y*y)%INF;62     struct hash *new_hash;63     new_hash=hash_table[k].next;64     while(new_hash!=NULL)65     {66         if(new_hash->x==x && new_hash->y==y)break;67         else new_hash=new_hash->next;68     }69     if(new_hash)return false;70     return true;71 }72 memset(hash_table,0,sizeof(hash_table));

 

 

 

字符串哈希

1 const int MAX = 100007; 2 bool Hash1[MAX]; 3 bool Hash2[MAX]; 4 int num1[MAX],num2[MAX]; 5 int val1[MAX],val2[MAX]; 6 char xx1[100002][22];int xlen1,cur; 7 char xx2[100002][82];int xlen2; 8  9 void Insert(int x,bool *hash,int *num,int *val,int len)10 {11     int k=x%MAX;12     while(hash[k]==true && num[k]!=x)13     {14         k++;15         if(k==MAX) k=k-MAX;16     }17     if(hash[k]==false)18     {19         hash[k]=true;20         num[k]=x;21         val[k]=len;22     }23 }24 bool found(int x,bool *hash,int *num,int *val)25 {26     int k=x%MAX;27     while(hash[k]==true && num[k]!=x)28     {29         k++;30         if(k==MAX) k=k-MAX;31     }32     if(num[k]==x)33     {34         cur=val[k];35         return true;36     }37     return false;38 }39 // ELF Hash Function40 unsigned int ELFHash(char *str)41 {42     unsigned int hash = 0;43     unsigned int x = 0;44     while (*str)45     {46         hash = (hash << 4) + (*str++);47         if ((x = hash & 0xF0000000L) != 0)48         {49             hash ^= (x >> 24);50             hash &= ~x;51         }52     }53     return (hash & 0x7FFFFFFF);54 }

 

 

转载于:https://www.cnblogs.com/tom987690183/p/3597146.html

你可能感兴趣的文章
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
Q85 最大矩形
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
Android获取设备採用的时间制式(12小时制式或24小时制式)
查看>>
前端面试中的常见的算法问题
查看>>
CENTOS7下安装REDIS
查看>>
hdu1236 排名(结构体排序)
查看>>
C# 99乘法表
查看>>
WCF 第五章 行为 系列文章
查看>>
全文检索、数据挖掘、推荐引擎系列3---全文内容推荐引擎之中文分词
查看>>