字符串哈希和哈希表的本质

来源:互联网 发布:制冷系统理论计算软件 编辑:程序博客网 时间:2024/06/06 19:18

       很多人听到哈希, 是从md5开始的,  比如每一个字符串都有它的md5, 且两个不同字符串的md5值不一样, 而且根据md5值, 是无法求出原来的字符串的。 这就是字符串的哈希。 说白了, 哈希就是满足一定条件的变换, 本质就是变换, 思路简单得很。

       在数据结构中, 又有哈希表, 这个是什么玩意儿呢? 对于非计算机专业的我来说, 开始是不太好理解的, 其实思路非常非常简单。 我们来看个场景: 有系列字符串"beibei", "jingjing", "huanhuan", "yingying", "nini",  怎么判断给定的字符串"xxx"是否在其中呢? 这个简单, 一个一个比较嘛, 更高级点就是排序后二分查找嘛, 或者装逼地搞个二叉排序树嘛, 逼格更高可以搞个红黑树嘛, 然而, 这些方法在哈希表面前, 简直弱爆了。 下面, 我们直接用代码来辅助理解(PHP中有md5函数, 所以用PHP搞起):

<?php    $ht[md5("beibei")] = "beibei";    $ht[md5("jingjing")] = "jingjing";    $ht[md5("huanhuan")] = "huanhuan";    $ht[md5("yingying")] = "yingying";    $ht[md5("nini")] = "nini";        $x = "xxx";    if($ht[md5($x)] == $x)    {        echo $x . " ok\n";    }        $x = "jingjing";    if($ht[md5($x)] == $x)    {        echo $x . " ok\n";    }?>
      结果是:jingjing ok

      可见, 可以快速判断$x是否在一直的字符串集中中, 不需要轮询比较判断。 注意, 上述程序可以继续化简! 程序中的ht就是hash table


      其实, 这么简单的东西, 真的不需要再多说。