最近开始写LeetCode算法题,第一道就是两数之和,其中一解便是使用哈希表,比双层循环暴力枚举更高效,遂开始学习哈西函数,哈希表这一知识
首先,哈西函数是一个你给予一个物品它就返回一个数字的函数,而将这个物品以及得到的返回数去一一对应填入一个数组、表中,这便是哈希表,在理想情况下查找效率达到了O(1),因为你可以直接通过返回数(作为该物品的索引)直接获得该物品的及其信息。普遍应用便是通讯录查找,网页跳转缓冲。
既然有理想情况,那当然也有不理想的,那种情况我们称之为冲突。什么情况下会冲突呢,很简单,当你给了两个不同的物品给哈希函数,而哈希函数却给出了一个相同的数字,这就会导致你最终的表中有格子里面会有多样信息,从而致使查找出错,解决方法就是在那个拥挤的格子处建一个链表,分开存多个物品。所以在最糟糕的情况下,哈希表的查找效率会是O(n)