蓝桥杯丨哈希算法

简介: 蓝桥杯丨哈希算法

前言

在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匹配。


总结

一些关于哈希表的应用。

目录
相关文章
|
1月前
|
机器学习/深度学习 算法 C++
【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
题目要求根据城堡北墙和西墙箭靶上的箭数,推断骑士从西北角到东南角的唯一路径。每步移动时向正北和正西各射一箭,同一格不重复经过。通过DFS回溯模拟“拔箭”过程,验证路径合法性。已知箭数约束路径唯一,最终按编号输出行走顺序。
|
6月前
|
存储 监控 算法
内网监控桌面与 PHP 哈希算法:从数据追踪到行为审计的技术解析
本文探讨了内网监控桌面系统的技术需求与数据结构选型,重点分析了哈希算法在企业内网安全管理中的应用。通过PHP语言实现的SHA-256算法,可有效支持软件准入控制、数据传输审计及操作日志存证等功能。文章还介绍了性能优化策略(如分块哈希计算和并行处理)与安全增强措施(如盐值强化和动态更新),并展望了哈希算法在图像处理、网络流量分析等领域的扩展应用。最终强调了构建完整内网安全闭环的重要性,为企业数字资产保护提供技术支撑。
151 2
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
210 3
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
331 3
|
10月前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
315 6
|
10月前
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
239 5
|
11月前
|
算法 安全
散列值使用相同的哈希算法
当使用相同的哈希算法对相同的数据进行散列时,所产生的散列值(也称为哈希值或摘要)总是相同的。这是因为哈希算法是一种确定性的函数,它对于给定的输入将始终产生相同的输出。 例如,如果你用SHA-256算法对字符串"hello world"进行哈希处理,无论何时何地,只要输入是完全一样的字符串,你都会得到相同的160位(40个十六进制字符)的SHA-256散列值。 但是,需要注意的是,即使是输入数据的微小变化也会导致产生的散列值完全不同。此外,不同的哈希算法(如MD5、SHA-1、SHA-256等)会对相同的数据产生不同的散列值。 哈希算法的一个关键特性是它们的“雪崩效应”,即输入中的一点小小
217 4
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
556 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
存储 算法 C#
C#哈希查找算法
C#哈希查找算法
104 1
下一篇
开通oss服务