前言
在Python中,主要通过对字典的操作来实现哈希算法。
一、两个数的和问题
给定一个数字s,在列表中找出两个数,其和等于s
算法设计
1.
s=int(input()) lst=list(map(int,input().split(' '))) def f(lst,s): mydict={} for i in range(len(lst)): m=lst[i] if s-m in mydict: return mydict[s-m],i else: mydict[m]=i print(f(lst,s))
算法分析
这段代码可以用于找到数组中两个数的索引,使得它们的和等于给定的目标值s。算法的时间复杂度为O(n),其中n是数组的长度。
首先,我们使用一个字典来存储数组中每个元素的值和索引。然后遍历数组中的每个元素m,并检查是否存在目标值s减去m的补数在字典中。如果补数存在,则表示我们已经找到了两个元素的索引,这两个元素的和等于目标值s。我们可以通过字典中补数的索引和当前元素的索引来返回这两个元素的索引。
如果没有找到补数,则将当前元素及其索引添加到字典中。继续遍历数组中的下一个元素。如果数组中没有符合条件的元素对,则返回None。
总体而言,这段代码可以用于解决“两数之和”问题,其基本思路是使用哈希表来优化查找过程。
二、模式匹配问题
判断某个列表的元素是否与另一个列表的元素为一对一的关系
算法设计
def f(games,players): if len(players)!=len(games): return False mydict={} used={} for i in range(len(games)): if games[i] in mydict: if mydict[games[i]]!=players[i]: return False else: if players[i] in used: return False mydict[games[i]]=players[i] used[players[i]]=True return True games=list(map(int,input().split(' '))) players=list(map(int,input().split(' '))) f(games,players)
算法分析
这段程序是一个函数,函数名为f,有两个参数:games和players。它的作用是判断给定的游戏id和玩家id是否匹配。
首先,它判断游戏id和玩家id数量是否相同,如果不同就直接返回False。然后,它创建了两个字典:mydict和used。mydict用于记录游戏id和对应的玩家id,used用于记录已经使用过的玩家id。
之后,它遍历游戏id和玩家id列表,对于每一个游戏id和玩家id的组合,它会检查mydict中是否已经有这个游戏id了。如果有,就判断之前记录的玩家id是否和当前玩家id相同,如果不同就返回False。如果没有这个游戏id,就检查当前玩家id是否已经被使用过,如果已经被使用过就返回False,否则就将游戏id和玩家id记录到mydict和used字典中。
最后,如果没有出现错误就返回True,表示所有游戏id和玩家id匹配。
总结
一些关于哈希表的应用。