关键词搜索

源码搜索 ×
×

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

发布2017-09-23浏览8633次

详情内容

     说明: 后来发现, 本文的逻辑有点问题, 实际上,在计算ht[...]时候, 可能涉及到查找(以C++ STL为例)

   

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

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

  1. <?php
  2. $ht[md5("beibei")] = "beibei";
  3. $ht[md5("jingjing")] = "jingjing";
  4. $ht[md5("huanhuan")] = "huanhuan";
  5. $ht[md5("yingying")] = "yingying";
  6. $ht[md5("nini")] = "nini";
  7. $x = "xxx";
  8. if($ht[md5($x)] == $x)
  9. {
  10. echo $x . " ok\n";
  11. }
  12. $x = "jingjing";
  13. if($ht[md5($x)] == $x)
  14. {
  15. echo $x . " ok\n";
  16. }
  17. ?>
      结果是:jingjing ok

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

   

      上面的程序还可以继续优化, ht的值可以用0,1来标识。

  

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



相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载