哈希算法简要学习:
一、常见算法简介
顺序查找:是最简单的查找方法。需要对数据集中的逐个匹配。所以效率相对较低,不太适合大量数据的查找问题。
二分法查找:效率很高,但是要求数据必须有序。面对数据排序通常需要更多的时间。
深度优先和广度优先算法:对于大量的数据查找问题,效率并不高。这个我们后面专门讲解。
阿希查找算法:查找速度快,查询插入,删除操作简单等原因获得广泛的应用。
二、哈希的原理
以a = [1, 17, 5, 8, 2, 9, 20, 3, 2, 5]这个数组为例,如果要查找1到10是否在这个数组内,采用顺序查找的方式话,将会依次遍历整个数组,每次都要扫描十次,每次都要扫描n次,时间复杂度为O(n)。
此时如果使用哈希算法,可以先建立一个长度为20的table,用table的下标记录a[i]的出现次数,可以参考下图,直到遍历完整个数组
三、程序实现
python代码实现:
def twosum(nums, target):
#这个函数只能解决两个数字和,且答案有且仅有一个的情况
dict = {}
for i in range(len(nums)):
num = nums[i]
if target - num in dict:#判定target - m 是否在字典中
return (dict[target-num]+1, i +1) #存在返回连个数的下标
dict[num] = i #若不存在则记录键值对的值
s =twosum( [1, 17, 5, 8, 2, 9, 20, 3, 2, 5],11)
print('下标是:',s)
# 下标是: (5, 6)
此方法相当于,把数组num的值与位置记录在了dict字典中,再依次遍历比较得到符合条件的两数对应数组的下标。