如何python解约瑟夫环问题
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章将为大家详细讲解有关如何python解约瑟夫环问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。约瑟夫环问题:已知n个人(以编号1,2,3..
千家信息网最后更新 2025年02月22日如何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安全错误
数据库的锁怎样保障安全
安徽电脑软件开发哪家便宜
mysql数据库授权
数据库建模
数据库系统的数据英文简称
五子棋源码java带服务器
新建微软数据库文件
服务器安全加密
企业级数据库技术期末
爆破网址数据库
c语言访问web服务器
服务器电源输出为什么没有电感
php连接数据库时间过长
佛山南海区服务器回收
伤害世界怎么开服务器
数据库敏感信息都加密
数据库技术三级考试知识点
数据库服务器的性能指标
四川江安网络技术员招聘
南宁网络安全实战培训收费标准
科技互联网公司前景如何
热血三国服务器端
新手软件开发的工作
中国汽车数据库系统吗
网络安全组件都有哪些
图书馆里的数据库
zabix数据库监控指标
网络安全宣传板内容
网络安全与道德的征文
手机明明有5g无法连接服务器
软件开发投入很小