Python 用自然语言/流程图描述算法并实现!

算法的定义及作用一、导入:编程解决问题的步骤分析问题 划分边界 设计算法 #importance 编写程序 调试测试 后期维护注:参考嵩天老师的《Python语言程序设计》二、生活中的算法问题:饮料换杯两个杯子,一杯装可乐,一杯装雪碧,怎样才能让装可乐的杯子装雪碧,装雪碧的杯子装可乐?再拿一个杯子。设计算法: t=a #第一步 a=b #第二步 b=t #第三步 编写代码:>>> a="可乐">>> b="雪碧">
摘要由CSDN通过智能技术生成

算法的定义及作用

一、导入:编程解决问题的步骤

  1. 分析问题
  2. 划分边界
  3. 设计算法 #importance
  4. 编写程序
  5. 调试测试
  6. 后期维护

注:参考嵩天老师的《Python语言程序设计》

二、生活中的算法问题:饮料换杯

两个杯子,一杯装可乐,一杯装雪碧,怎样才能让装可乐的杯子装雪碧,装雪碧的杯子装可乐?

再拿一个杯子。

  1. 设计算法:
    t=a #第一步
    a=b #第二步
    b=t #第三步
  2. 编写代码:
>>> a="可乐"
>>> b="雪碧"
>>> t=a
>>> a=b
>>> b=t
>>> print("a=",a,"b=",b)
a= 雪碧 b= 可乐
1234567

完成由算法到程序的过程。

算法的定义:解决问题的步骤
算法是有限步骤内求解某一问题所使用的一组定义明确的规则。

算法怎么描述

一、自然语言描述鸡兔同笼问题

我国古代数学著作《孙子算经》中应有“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各有几和?”

  1. 数学思维:假设法、列方程
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
匈牙利算法,也称为增广路径算法,用于求解二分图的最大匹配问题。下面是匈牙利算法的流程以及Python程序实现。 1. 定义一个二分图,其中左边的节点集合为X,右边的节点集合为Y。 2. 初始化一个与Y节点集合等大的数组match,并将所有元素初始化为-1,用于记录节点的匹配关系。同时定义一个数组vis,用于标记X中的节点是否被访问过。 3. 对于X中的每一个节点u,依次进行以下操作: a. 初始化vis数组,将其所有元素置为False。 b. 递归查找u的增广路径,如果找到了一条增广路径,则将匹配关系进行更新。 4. 定义递归函数findPath(u),用于查找从节点u开始的增广路径: a. 遍历Y中的每一个节点v,如果节点u和节点v之间存在边,并且节点v未被访问过,则进行以下操作: i. 将节点v标记为已访问。 ii. 如果节点v未被匹配,或者节点v已被匹配但是从match[v]出发可以找到增广路径,则将节点u和节点v之间建立匹配关系,然后返回True。 iii. 如果节点v已被匹配,并且从match[v]出发找不到增广路径,则继续查找其他节点。 b. 如果遍历完所有的节点后仍未找到增广路径,则返回False。 5. 输出匹配结果。 下面是Python程序实现: ```python def findPath(u): for v in range(len(Y)): if graph[u][v] and not vis[v]: vis[v] = True if match[v] == -1 or findPath(match[v]): match[v] = u return True return False def hungarian(): global match match = [-1] * len(Y) cnt = 0 for u in range(len(X)): global vis vis = [False] * len(Y) if findPath(u): cnt += 1 return cnt # 二分图的左边节点集合 X = [] # 二分图的右边节点集合 Y = [] # 初始化二分图的邻接矩阵 graph = [[0] * len(Y) for _ in range(len(X))] # 添加边到邻接矩阵 # 调用匈牙利算法求解最大匹配数量 max_matching = hungarian() # 输出匹配数量 print(max_matching) ``` 请注意,上述的程序实现中,X和Y分别表示二分图的左边和右边的节点集合,graph为二分图的邻接矩阵表示方式。在实际使用时,需要根据具体问题进行相应的修改和补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值