Hash表以及应用

哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构。

哈希表的原理非常简单,通过一个固定的算法将Key转为一个数字,然后将该数字对数组长度取余,将取余结果作为数组下标,然后将Value存储在该数字为下标的数组里。

不过想要找到一个好的哈希表非常难。原因就是通过那个固定算法得出的数字有可能会相同。显然一个下标指向的数组空间里是没有办法存储两个元素的,只能通过一些其他方法来解决冲突。这些方法虽然能够解决冲突,但是会使得查询等操作的操作速度下降。所以一个好的哈希表这样的冲突应该是要很少的。

解决哈希冲突的常见方法有两种:

开放定址法

简单来说,通过一个固定算法得出另一个数字下标,如果该位置为空,就插入,不然就重复进行。

这个方法实现起来很复杂,至今没有去实现过。

拉链法

简单来说,就是将数组和链表结合起来。在冲突的位置拉出一条链表来。

这个方法实现比较简单,但代码我都不知道扔哪去了。

值得一提的是,开放定址法得出来的是闭散列表,拉链法得出的是开散列表。

 

以下是哈希表的应用

Hash表以及应用_第1张图片

显然两个月前的我并不知道哈希表为何物,只是用了暴力法。

这里的代码没什么好说的,没必要说。

 

Hash表以及应用_第2张图片

一开始我就想岔了,平方查字典,后来想想,好像根本没必要。但是又想想,能用,就留着了。

这里的思路就是,将每次'快乐'得出的数字用字典记录下来,如果这次'快乐'得出的数字已经存在在字典里了,就return False,不是return 0,return 0就错了。如果'快乐'得出的数字是1,就return True。

你可能感兴趣的:(Python,算法)