研究过哈希函数的朋友请赐教,谢谢

来源:百度知道 编辑:UC知道 时间:2024/07/01 08:08:36
我知道哈西函数似乎有很多种,就是把一个字符串转换成一个整数,请问,能不能通过这个整数在把原来的字符串还原出来,谁有现成的例子最好了,希望各位不吝赐教,小弟愿散尽家资。

哈希函数最有名的特点是不可逆的
这个有人会的话
头送他

不能

首先注明:哈希函数的自变量不一定是字符串,整数、浮点数等等都可以

基本上不存在反哈希函数
众所周知,只有当一个函数的自变量与因变量成一一对应关系的时候,该函数才存在反函数
也就是说,只有当哈希函数的任意两个不同的自变量一定不会取到相同的哈希函数值时,才有可能通过哈希函数值还原出原先的自变量
但是在这种情况下,哈希函数通常形式都非常简单,只需要建立一个布尔形的数组并将其元素与各个自变量一一对应即可。这种情形的哈希函数应用范围也相当小。也只有这种情况下,才能够通过哈希函数值反推原先的自变量
更通常情况下,自变量的取值范围非常大以至于不可能把自变量所有的可能的取值一一记录,但是自变量的被取用的次数相对很少,因此可以建立哈希表,构造哈希函数,利用哈希函数将自变量与哈希表的元素间建立映射关系
现在很多介绍哈希表的书籍、文章中都只用了很小的篇幅来介绍哈希表的实现原理,而绝大部分内容都是关于如何设计哈希函数使得哈希函数值的分布尽可能平均、随机并且使哈希函数的运算效率高,以及当哈希表的同一个元素对应了多个自变量时如何高效的记录与查找
可见哈希表最广泛的应用都是在多个自变量对应一个哈希函数值的情形下的
在这种普遍情形下,会有很多个自变量的哈希函数值相同,因而不可能通过哈希函数值反推出自变量

理论上是能,不过那样散列就没啥意义了。
字符串每个字符本身就是一个整数,当然可以把所有字符连接成一个大整数,这样也就能还原字符串了。不过这就是把n个元素散列到n个位置。。。

通常情况下,一个位置会同时对应几个元素,元素各不相同,只靠一个整数也就还原不了了。

hash函数的用突在于快速判断一个元素是否出现过,而不是可以用于反向查找。
比如linux下的md5sum,就可以计算一个文件的hash值,可以用于判断文件是否损坏。
如果你需要反响查找,可以考虑用两棵平衡二叉树,基本上C++里面可以直接用stl的map

你可以把整数看成数组的下标,数组里存的是字符串元素。