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

本文探讨了哈希的概念,从字符串的哈希到数据结构中的哈希表。通过实例展示了如何使用哈希表快速判断一个字符串是否存在于一系列字符串中,揭示了哈希表在查找效率上的优势。

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

   

     很多人听到哈希, 是从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)]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值