关于查找的问题

liuweiwei1 2002-05-13 04:52:54
在一本C语言编程常见问题的书中,提到一种叫做哈希查找的算法,我想请都大家哈希查找的过程是什么?它的作用是什么,它与其它的查找方法有什么区别?多谢了
...全文
26 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiphop 2002-05-25
  • 打赏
  • 举报
回复
同海星~
liuweiwei1 2002-05-25
  • 打赏
  • 举报
回复
lizhongkun(泛型)
能说清楚一点吗解释一下好吗
加上注释
lizhongkun 2002-05-24
  • 打赏
  • 举报
回复
给你个实例:
viod Countwords (hashTable& table)// 计算文件中单词个数
{ std: string word;
while (cin>>word,!cin.eof())
{
object& obj=table.find (association (*new string(word)));
if (obj .Isfull ())
table.insert(*new association (
*new string (word),*new Counter(1));
else{
association& assoc =dynamic_cast<association&> (obj);
Counter& i= dynamic_cast<Counter&> (assoc.value());
++i;
}//else
}//while
cout<< table<<endl;
}
liuweiwei1 2002-05-23
  • 打赏
  • 举报
回复
还有谁能说说自己的看法吗?
starfish 2002-05-15
  • 打赏
  • 举报
回复
简单来说,hash就是找到一种数据内容和数据存放地址之间的映射关系。比如,由若干字符串要存放到一个哈西表中,希望能够在O(1)的时间内在表中定位某个特定的字符串,我们可以用数组来实现哈西表,找到某种函数sting -> integer,记为 p = f(s),其中p是一个整数,s是一个字符串,p就是字符串s在数组中的下标。这样如果需要在数组中定位s,只要直接根据函数p=f(s)就可以计算s的位置。在哈西表中添加一个字符串也类似,根据字符串的值计算出其应该存放在数组中的位置,然后将字符串放入。但是这种函数(成为哈西函数)很难找,找到一个一一对应的函数几乎不可能,所以经常采用非一一对应的哈西函数。比如对于上面的例子,我们可以设计一个简单的哈西函数,我们设f(s)定义为s的各个字符的Ascii码的和除以n的余数,这里n是我们的数组的长度,我们假设了哈西表中最多需要存储n个元素。但是这个哈西函数有个显而易见的缺点,比如对于字符串s1= "abc"和s2="acb",显然计算出来的哈西函数值都是一样的,但是一个位置上只能存放一个元素,如果先将s1放入哈西表的位置p1,再将s2放入哈西表,这时候因为计算出p2=f(s2) = p1,所以s2应该放置的位置已经被s1占据了,所以就出现了麻烦。这就叫做“冲突”。解决这个冲突的一个简单的办法是,因为p1已经被s1占据,我们就看p1+1,如果该位置为空,则放入s2,否则继续看p1+2,……一直找到一个空位。假设我们将s2放在p1+1,但是这时候要加入s3,而f(s3)恰好等于p1+1,s3的位置又被s2占据了,我们可以继续看p1+2,p1+3……是否为空,直到找到一个空位放入s3,依此类推。在查找s2的时候,我们先根据f(s2)计算出s2应该在p1位置上,然后我们看p1位置上的元素,发现不是s2(该位置上是s1),于是我们继续看p1+1,p1+2,……一直到找到s2,或者到表尾,或者发现一个空位就可以中止了,后两种情况表示s2不在表中。
显而易见,如果冲突发生的太多的话,哈西表的效率会下降。事实上我刚才举的例子中的哈西函数很不好,所以冲突发生的可能性很大。如果找一个比较好的哈西函数,哈西表的效率还是很高的。至于找哈西函数的方法,要根据具体的数据类型和应用场合来分析,也有一些原则,这里就不一一介绍了~~

liuweiwei1 2002-05-13
  • 打赏
  • 举报
回复
能够更详细一点吗
hiphop 2002-05-13
  • 打赏
  • 举报
回复
KEY值的比较。。。。。
flyaramy 2002-05-13
  • 打赏
  • 举报
回复
哈希查找,就类似于查字典,用某个哈希函数使查找关键字与实际内容相对应。

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧