哈希表
- 哈希表、哈希函数和哈希碰撞
- Map和Set
- HashMap, HashSet, TreeMap, TreeSet
哈希表、哈希函数和哈希碰撞
-
如何快速地用O(1)的速度找到一个单词?
把单词作为key输入到hash function,这里key用了字母的ASCII码来表示,hash function是对单词的字母ASCII码求和再取30的模,对应了哈希表的索引值,就能找到单词。 -
那是否有可能出现另外一个单词,经过求哈希函数也是得到相同的值?
是有可能的,这就是hash collisions哈希碰撞。那怎么解决呢?
可以在相同位置的地方建一个链表,展开,这叫拉链法。
- List vs Map vs Set
list 就是我们常用的列表
map有映射关系,和dict一样,key:value
set 集合,类似于去重后的list,实现背后(哈希表或二叉树),查找是O(1)或logn,效率比list高
HashMap, HashSet, TreeMap, TreeSet
一种是用哈希表来存储(O(1)),另一种是用二叉搜索树来存储(O(logN))
用Tree存储,是排好序的,是相对有序排列的;用hash table是乱序的