如何python解约瑟夫环问题
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关如何python解约瑟夫环问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。约瑟夫环问题:已知n个人(以编号1,2,3..
千家信息网最后更新 2025年11月07日如何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安全错误
数据库的锁怎样保障安全
dhcp服务器是用什么协议的
点点怎么服务器异常了
昆山正规网络技术有哪些
上海运维软件开发公司
中国各行业网络安全市场占比
网络技术的技术层面的演进
安装数据库自动生成c盘文件
服务器可以用来训练模型吗
网络安全按需开放端口
wow 联盟哪个服务器
后端与数据库交互的技术
云服务器8核32G 5M带宽
网络安全进展
精通收银服务器连接数据库失败
不被允许连接数据库
深圳天融信网络安全技术
江苏软件开发技术服务公司
电能表软件开发公司
用友t3 数据库升级
互联网先进科技产业
云丁网络技术有限公司惠州
集成式软件开发
软件开发网站培训中心
南通工业网络技术服务
服务器设置地址
政府采购目录通用服务器
中原网络安全研究院在哪
《网络安全
数据库遇到错误打不开
淮安创新软件开发业务流程