如何python解约瑟夫环问题
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章将为大家详细讲解有关如何python解约瑟夫环问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。约瑟夫环问题:已知n个人(以编号1,2,3..
千家信息网最后更新 2025年02月16日如何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安全错误
数据库的锁怎样保障安全
dnf台服服务器端
服务器远程启动教程
怎么设置代理服务器上网防网警
软件开发进度控制
联想s650服务器接口
严重侵害了软件开发者的权益
江苏品牌网络技术参考价格
qq收藏文件上传至服务器
建筑企业数据库怎么建立
数据库中什么是代理主键
计算机网络技术社会认可度
内外网镜像服务器
大专无线网络技术
停车场一般用什么数据库
软件开发技术问题督促函
数据库签名
网络暴力属于网络安全范畴吗
远程管理服务器的利器
网络安全局长是什么等级
高级网络技术实践
360安全云盘停止服务器
数据库输出前三个数据
小工控主机可以装服务器系统吗
济南博赛网络技术
阿里云服务器配置iis
天门高级戴尔服务器
泉州微信插件 软件开发
信息网络安全的第一个是的
青岛公司软件开发
数据库字段下划线转驼峰