博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
例27:哈希查找
阅读量:6266 次
发布时间:2019-06-22

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

哈希查找本身听着很是高端,然后呢,听着感觉很难的样子,但是其原理也是非常简单,其实他的意思就是说通过一个函数,直接把值的地址与值本身之间关联起来,成为一个地址 = F(值)的函数,所以这种方式的查找速度为O(1),是一种很快的查找方式。

1.在查找之前首先先建立哈希表,其实就是按照 地址=F(值) 函数给出值所应存储的地址。常用的哈希函数有五种:直接定址法,除数取余法,数字分析法,平方取中法,折叠法。具体方法此处不详细介绍了,读者可以上网搜索一下,很多介绍很详细的。

2.如果此地址已经保存了某个值,那么可以用解决冲突的方法解决,常用方法有开放地址法和链地址法。同样,此处不详细介绍,文末结束处会放个链接,大家可以看一下这篇介绍哈希查找的文章,大多方法都有介绍。

3.我们采用的是除数取余法(题目中给定H(key) = key%11),和开放地址法(“采用线性探测再散列”)的方法。

代码如下:

1 #include
2 #include
3 #include
4 #include
5 6 void InsertHash(int hash[],int nCount,int Value) 7 { 8 int hashAddress = Value%nCount; 9 while(hash[hashAddress] != 0)10 {11 hashAddress = (++hashAddress)%nCount;12 }13 hash[hashAddress] = Value;14 }15 16 int SearchHash(int hash[],int nCount,int Value)17 {18 int hashAddress = Value%nCount;19 while(hash[hashAddress] != Value && hash[hashAddress] != 0)20 {21 hashAddress = (++hashAddress)%nCount;22 }23 if(hash[hashAddress] == 0)24 {25 return -1;26 }27 else 28 {29 return hashAddress;30 }31 }32 33 int main()34 {35 int hash[11],nCount,Value,Address;36 while(~scanf("%d",&nCount) && nCount)37 {38 memset(hash,0,sizeof(hash));39 srand((unsigned long)time(0));40 printf("nCount: %d\n",nCount);41 for(int i = 0;i

另外文章地址:http://blog.csdn.net/xiaoping8411/article/details/7706376

转载于:https://www.cnblogs.com/FWFC/p/6292570.html

你可能感兴趣的文章
程序员的罪与罚
查看>>
SQL*LOADER错误总结
查看>>
SQL日志收缩
查看>>
【转】MySQL Query Cache 小结
查看>>
SVN分支和合并的简单例子
查看>>
PHP实现的封装验证码类
查看>>
Augular初探
查看>>
PHPStorm下XDebug配置
查看>>
【LeetCode】55. Jump Game
查看>>
Android应用盈利广告平台的嵌入方法详解
查看>>
Linux(CentOS6.5) 开放端口,配置防火墙
查看>>
Func与Action
查看>>
Android ViewPager 应该及技巧
查看>>
ODI KM二次开发手册
查看>>
iOS通讯录整合,兼容iOS789写法,附demo
查看>>
如何将内核静态库编译连接到驱动程序中去【转】
查看>>
GNU KHATA——开源的会计管理软件
查看>>
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 用SPD开发SharePoint应用程序...
查看>>
Java读取文件加锁代码Demo(利用Java的NIO)
查看>>
ES6 中 Symbol.split的用法
查看>>