字符串学习笔记·哈希(Hash)与字典树(Trie)

这篇博客我打算皮一下qwq,适合初学者阅读(因为讲的是在太细了)

一、首先理解字符串操作的意义:

没意义

emmmmmm其实字符串操作的意义是很浅显的,比如百度的推荐搜索啊,比如查找比对一篇题解里有多少个相同或者不同的脏字然后kkksc03再根据其数量、恶劣程度决定用多大的刀将博主kill掉。。。所以字符串操作很重要啊喂qwq。

再来考虑时间:如果百度对于一个人的一次“常搜”推荐需要10s,那么对于全国网友来说,同时上网的人群基数很高,那么如果服务器性能不好的话,怕不是要三星note7 qwq???

所以啊,打造高效的字符串算法是很有必要滴!

二、言归正传,浅析字符串哈希

哈希其实是所有字符串操作中,笔者认为最简单的操作了(except输入输出qwq)。哈希的过程,其实可以看作对一个串的单向加密过程,并且需要保证所加的密不能高概率重复(就像不能让隔壁老王轻易地用它家的钥匙打开你家门一样qwq),通过这种方式来替代一些很费时间的操作。

比如,最常见的,当然就是通过哈希数组来判断几个串是否相同(洛谷P3370)。此处的操作呢,很简单,就是对于每个串,我们通过一个固定的转换方式,将相同的串使其的“密”一定相同,不同的串 尽量 不同。

此处有人指出:那难道不能先比对字符串长度,然后比对ASCLL码之和吗?事实上显然是不行的(比如ab和ba,并不是同一个串,但是如是做却会让其认为是qwq)。这种情况就叫做 hash h a s h 冲突,并且在如此的单向加密哈希中, hash h a s h 冲突的情况在所难免(bzoj就有这种让你给出一组样例,使得一段哈希代码冲突的题,读者可以尝试尝试)。

而我们此处介绍的,即是最常见的一种哈希:进制哈希。进制哈希的核心便是给出一个固定进制 base b a s e ,将一个串的每一个元素看做一个进制位上的数字,所以这个串就可以看做一个 ba

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值