如何python解约瑟夫环问题
发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,这篇文章将为大家详细讲解有关如何python解约瑟夫环问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。约瑟夫环问题:已知n个人(以编号1,2,3..
千家信息网最后更新 2024年10月17日如何python解约瑟夫环问题
这篇文章将为大家详细讲解有关如何python解约瑟夫环问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人被杀掉;他的下一个人又从1开始报数,数到k的那个人又被杀掉;依此规律重复下去,直到圆桌周围的人只剩最后一个。
思路是:当k是1的时候,存活的是最后一个人,当k>=2的时候,构造一个n个元素的循环链表,然后依次杀掉第k个人,留下的最后一个是可以存活的人。代码如下:
class Node(): def __init__(self,value,next=None): self.value=value self.next=nextdef createLink(n): if n<=0: return False if n==1: return Node(1) else: root=Node(1) tmp=root for i in range(2,n+1): tmp.next=Node(i) tmp=tmp.next tmp.next=root return rootdef showLink(root): tmp=root while True: print(tmp.value) tmp=tmp.next if tmp==None or tmp==root: breakdef josephus(n,k): if k==1: print('survive:',n) return root=createLink(n) tmp=root while True: for i in range(k-2): tmp=tmp.next print('kill:',tmp.next.value) tmp.next=tmp.next.next tmp=tmp.next if tmp.next==tmp: break print('survive:',tmp.value)if __name__=='__main__': josephus(10,4) print('-----------------') josephus(10,2) print('-----------------') josephus(10,1) print('-----------------')
输出结果如下:
第一种方法是直观暴力裸搞,确实不太简洁,下面写出我的第二种方法,求模来搞起,代码少了一些,如下:
def josephus(n,k): if k==1: print('survive:',n) return p=0 people=list(range(1,n+1)) while True: if len(people)==1: break p=(p+(k-1))%len(people) print('kill:',people[p]) del people[p] print('survive:',people[0])if __name__=='__main__': josephus(10,4) josephus(10,2) josephus(10,1)
运行结果和上面一样。为了进一步对比性能,我用josephus(100000,4)测试,即n=100000,k=4。为了去掉IO消耗的时间干扰,把"kill:"的print注释掉,只输出最后的"survive:"结果,测试结果如下:
结果表明,第一种循环链表的方式比第二种取模运算的方式要快,由于比例不是线性的,不能说是几倍,而且这个测试和python内部实现有关,换作C语言O3优化后结果就不一定一样了,所以测试结果不能说明什么哈~
关于如何python解约瑟夫环问题就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
结果
个人
测试
问题
瑟夫
代码
内容
圆桌
文章
方式
方法
时候
更多
知识
篇文章
环链
有关
输出
不错
简洁
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华三imc服务器的配置要求
steam链接服务器失败
宁夏软件开发制作
数字素养之网络安全手抄报
网络安全网关访问
国内不实名高防服务器
软件开发使用的框架
成都千成网络技术
网络安全的伦理问题实例分析
gateway 数据库动态路由
5g无线和网络技术架构
辽宁先进软件开发供应商
0基础能学网络安全吗
北邮网络技术研究院怎样
汇丰软件开发还是广发证券好
应用开发和软件开发的区别
数据库中什么叫简单查询的定义
空间数据库与遥感
辽源市工信局网络安全
北京综合软件开发代理价格
全国验案DNA数据库
数据库基础命令
山西通信软件开发服务应用
为什么要转换成数据库
大家一起做好网络安全工作
软件开发专用硬件
网站访问acess数据库
东莞家政软件开发市场价
安徽证券软件开发
杭州百世网络技术有限公司天眼查