[数据结构]hash算法
来源:互联网 发布:js控制视频播放暂停 编辑:程序博客网 时间:2024/06/05 09:32
hash函数
hash函数主要是利用了数组的快速定位特性,以及键值根据哈希函数来转换。
hash函数:根据key,计算出key对应记录的储存位置,position = f(key),不同的输入可能对应同样的输出。
hash函数的冲突处理:链地址法:对Hash表中每个Hash值建立一个冲突表,即将冲突的几个记录以表的形式存储在其中
开放地址法:这种方法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。
问题实例:海量数据分析
以下代码转自点击打开链接
<pre code_snippet_id="201562" snippet_file_name="blog_20140224_1_1145528" class="cpp" name="code">//有个例子,参考一下;#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define N 30#define L 38#define P 37typedef struct {char *name;char *py;int k;}old;old oldlist[N];typedef struct {char *name;char *py;int k; int b; }hx;hx hlist[L];void InputOldlist(){ int i,s=0,r;/*for(i=1;i<=N;i++){oldlist[i-1].name=(char*)malloc(sizeof(char)*20);printf("请输入人名:");gets(oldlist[i-1].name);oldlist[i-1].py=(char*)malloc(sizeof(char)*20);printf("请输入拼音:");gets(oldlist[i-1].py);}*/oldlist[0].name="栾雪峰";oldlist[0].py="luan xue feng";oldlist[1].name="刘翔";oldlist[1].py="liu xiang";oldlist[2].name="马三立";oldlist[2].py="ma san li";oldlist[3].name="李开复";oldlist[3].py="li kai fu";oldlist[4].name="李彦宏";oldlist[4].py="li yan hong";oldlist[5].name="王冰杰";oldlist[5].py="wang bin jie";oldlist[6].name="孟茂昌";oldlist[6].py="meng mao chang";oldlist[7].name="蒋睿杰";oldlist[7].py="jiang rui jie";oldlist[8].name="嫦娥";oldlist[8].py="chang er";oldlist[9].name="孙悟空";oldlist[9].py="sun wu kong";oldlist[10].name="猪八戒";oldlist[10].py="zhu ba jie";oldlist[11].name="徐琛";oldlist[11].py="xu chen";oldlist[12].name="唐僧";oldlist[12].py="tang seng";oldlist[13].name="周星驰";oldlist[13].py="zhou xing chi";oldlist[14].name="董寸瑞";oldlist[14].py="dong cun rui";oldlist[15].name="黄继光";oldlist[15].py="huang ji guang";oldlist[16].name="金庸";oldlist[16].py="jin rong";oldlist[17].name="杨过";oldlist[17].py="yang guo";oldlist[18].name="小龙女";oldlist[18].py="xiao long nv";oldlist[19].name="郭大侠";oldlist[19].py="guo da xia";oldlist[20].name="黄蓉";oldlist[20].py="huang rong";oldlist[21].name="老师";oldlist[21].py="lao shi";oldlist[22].name="学生";oldlist[22].py="xue sheng";oldlist[23].name="小平同志";oldlist[23].py="xiao ping tong zhi";oldlist[24].name="泽民";oldlist[24].py="ze min";oldlist[25].name="圣诞老人";oldlist[25].py="sheng dan lao ren";oldlist[26].name="朱德庸";oldlist[26].py="zhu de yong";oldlist[27].name="阿扁";oldlist[27].py="a bian";oldlist[28].name="连战";oldlist[28].py="lian zhan";oldlist[29].name="幸福";oldlist[29].py="xing fu"; for (i=0;i<N;i++){for(s=0,r=0;oldlist[i].py[r]!='\0';r++){ s=toascii(oldlist[i].py[r])+s;}oldlist[i].k=s;}}void hash(){int i,adr,d;float average,sum=0;for (i=0;i<L;i++) {hlist[i].name="";hlist[i].py="";hlist[i].k=0;hlist[i].b=0;} for (i=0;i<N;i++) { adr=(oldlist[i].k)%P;d=adr;if(hlist[adr].b==0){hlist[adr].k=oldlist[i].k;hlist[adr].name=oldlist[i].name;hlist[adr].py=oldlist[i].py;hlist[adr].b=1; sum=sum+1;} else{do{ d=(d+adr%10+1)%P;sum=sum+1;}while (hlist[d].b!=0);hlist[d].k=oldlist[i].k;hlist[d].name=oldlist[i].name;hlist[d].py=oldlist[i].py;hlist[d].b=1;}} average=sum/30; printf("平均查找长度为:%f\n",average); if(average>2) hash();}void findlist() {char c[20];int i=0,d,g,adr,s=0;printf("请输入你要查找的人的拼音:\n");getchar();gets(c);for(i=0;c[i]!='\0';i++){s=toascii(c[i])+s;} adr=s%P; d=adr;if(strcmp(hlist[adr].py,c)==0){printf("姓名:%s 拼音:%s 哈希表中存储位置:%d\n",hlist[adr].name,hlist[adr].py,adr);}else if(hlist[adr].b==0) { printf("哈希表中无记录!\n"); } else { g=0; for (i=0;g==0;i++) { d=(d+adr%10+1)%P; if(hlist[d].b==0) { printf("哈希表中无记录!\n"); g=1; } if(strcmp(hlist[d].py,c)==0) { printf("姓名:%s 拼音:%s 哈希表中存储位置:%d\n",hlist[d].name,hlist[d].py,d); g=1; } } }}void printlist(){int i;for(i=0;i<L;i++)printf("%s %s %d \n",hlist[i].name,hlist[i].py,hlist[i].k);}void main(){int ch;InputOldlist();hash();do{printf("1.查找 2.输出哈希表 3.退出程序\n");scanf("%d",&ch);switch(ch){case 1:findlist();printf("Press any key to continue.\n");break;case 2:printlist();printf("Press any key to continue.\n");break;case 3:break;default: printf("No this operation.\n");printf("Press any key to continue.\n");} getchar();}while (ch!=3);}
0 0
- 经典数据结构 [ Hash算法 ]
- 数据结构之Hash算法
- 经典数据结构 [ Hash算法 ]
- [数据结构]hash算法
- 数据结构之Hash算法
- 【数据结构与算法】Hash表
- 【数据结构和算法】Hash Table
- 【数据结构与算法】Hash Table
- 数据结构和算法系列 - 一致性hash算法
- 【数据结构与算法】十三 twoSum hash
- 算法与数据结构-Hash表的理解
- 数据结构(hash)哈希算法 及各算法比较
- 《数据结构与算法分析》读书笔记——hash表
- 数据结构与算法____散列表(hash table)
- 数据结构与算法分析——Hash表
- hash表、hash算法
- hash 算法
- Hash算法
- Handling Uncaught and Unexpected Exceptions (C++)
- 基因芯片(Affymetrix)分析2:芯片数据预处理
- 递归版快速排序
- A星算法
- Java面向对象——(其他对象)
- [数据结构]hash算法
- 你的底线,决定你的拥有【转】
- SQL操作全集
- Hive几种数据导入方式
- 浅学设计模式之观察者<Observer>模式及在android中的应用
- Linux管道命令
- Android Bluetooth HID实现详解
- NSString用法、Obj-C数组以及字符串拼接与分割
- IntelliJ IDEA 12.1.6的常用快捷键