4th 2022/5/25 算法总结 哈希篇

4th 2022/5/25 算法总结 哈希篇

开头的话

这个算法,并不像大部分其它的算法那样,逻辑正确后,时间复杂度一般都是较稳定的,哪怕是最高和最低之间也没差多少

但哈希不一样,它时间复杂度较不稳定,虽然可以通过特殊方式尽量优化,但还是要慎用。

怎么回事呢?

在时间不够\(O(n^2)\),空间不够开桶,还要判重时,哈希有了一个用武之地,虽然判重可能有别的方法,但我还不知道啊。

(如果以后的童浏舟知道,请在这留下痕迹并告诉我,2022/5/30的童浏舟,谢谢)

而哈希,便成了一道利器,它有着接近\(O(n)\)

的时间复杂度,但也有着一点点的危险以至于卡成\(O(n^2)\)

普通哈希

赋予一个数n以特殊的值\(key(n)\),(请保证\(key(n)\)在数组范围!),并对所有数都进行同样操作,查看哈希表中第\(key(n)\)格,并作出操作如下:

  1. 当这个格为空,将n存入,退出

  2. 当这个格有数了,判断如果它和n相等,那么返回已经有过n这个数了并退出,否则操作下一个格

  3. 嗯,如果你找的这个格超出了数组范围,回到开始,0格!

这就是啦!

但请注意:如果你没有特殊判断,注意当你回到开始时,是第0格,这点请注意,你死过很多次了

字符串哈希

和上面操作基本一样,但请注意,你在判断字符串是否相等时,请注意你的字符串从字符数组第几格开始。。。你同样死过多次了

优化

对于所有

你的key值可以乘上一个大质数,这样不易被卡

对于字符串哈希

你的\(key\)值最好和你字符串中字符的位置有关,不然会浪费过多时间

总结

这个算法较有用,判重可以作为优化其他算法的一部分,应多练习和注意漏洞

posted @ 2022-09-23 19:12  Far_delivery  阅读(19)  评论(0)    收藏  举报