Python实现环性队列,解决约瑟夫斯站位问题

弗拉维奥·约瑟夫斯是公元1世纪著名的历史学家。相传,约瑟夫斯当年和39个战友在山洞中对抗罗马军队。眼看着即将失败,他们决定舍生取义。于是,他们围成一圈,从某个人开始,按顺时针方向杀掉第7人。约瑟夫斯同时也是卓有成就的数学家。据说,他立刻找到了自己应该站的位置,从而使自己活到了最后。当只剩下他时,约瑟夫斯加入了罗马军队,而不是自杀。这个故事有很多版本,有的说是每隔两个人,有的说最后一个人可以骑马逃跑。不管如何,问题都是一样的。

本题目尤其适合使用队列进行问题模拟,因为站位是一个环形剔除的问题。
队列的性质就是后进前出,如果每次都将pop的尾巴添加回到顶部,那么就动态地行成一个循环,然后只需要设定步长,定期弹出直到队列长度为1(剩下最后一个人),这样便轻易而且巧妙地解决了约瑟夫斯问题。

python实现:

#定义队列
class Queue:#初始化一个队列:def __init__(self):self.data = []def isempty(self):return self.data == []def enqueue(self,e):self.data.insert(0,e)def dequeue(self):return self.data.pop()def size(self):return len(self.data)#开始环形剔除操作:
def yue(nameList,num):symbol = Queue()#将名字数组添加到队列当中for name in nameList:symbol.enqueue(name)#只要不剩下最后一个人持续进行化环剔除操作while symbol.size() >1:for i in range (num):symbol.enqueue(symbol.dequeue())symbol.dequeue()#毁掉环队,弹出最后一个值return symbol.dequeue()s = ['Tom','Candy','Bob','Lisa','Hua','Wang']
print(yue(s,3))

Hua

以上就是环形队列了,希望对你的学习有所帮助!

约瑟夫斯问题,十步杀一人(环形队列)相关推荐

  1. 代码验证约瑟夫环百科词条中的故事(Python)——约瑟夫斯的故事、数学家加帕斯讲的故事,体验算法模板的奇妙。

    [点击此处跳转笔记正文] Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基 ...

  2. ucos-iii串口用信号量及环形队列中断发送,用内建消息队列中断接收

    串口发送部分代码: //通过信号量的方法发送数据 void usart1SendData(CPU_INT08U ch) {OS_ERR err;CPU_INT08U isTheFirstCh;OSSe ...

  3. 第七周实践项目2.3 顺序环形队列

    下图是数据存储结构设计及各种操作实现的要点: /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目2.3- *作 者 ...

  4. 单片机实现环形队列_单片机模块化程序: 难道有环形队列串口发送数据就万事大吉了吗...

    1.问个问题,下面程序有没有BUG数组 2.环形队列虽然解决了一开始的中断发送数据覆盖问题,可是呢却引入了新的问题函数 3.而后看看中断发送测试 4.想没想明白是什么问题spa 5.发送数据1 和发送 ...

  5. 每日一博 - 使用环形队列实现高效的延时消息

    文章目录 Pre 方案A 方案B 总结 Pre 来个场景: 24小时后将未进行某个Action的业务,执行另外一个动作. 比如 24小时未付款的订单,取消. 你可能会说 方案A 来个定时呗 ,每隔半小 ...

  6. (数据结构与算法)数组模拟队列和环形队列

    文章目录 数组模拟队列 思路 代码实现 问题分析并优化 数组模拟环形队列 思路 代码实现 数组模拟队列 队列是一个有序列表,可以用数组或是链表来实现. 遵循先入先出的原则.即:先存入队列的数据,要先取 ...

  7. 活用内核链表解决约瑟夫斯问题

    约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为"约瑟夫环",也有的地方叫做"丢手绢". 问题 ...

  8. 队列与环形队列使用数组模拟

    队列 该文是观看尚硅谷韩老师视频学习自己总结学习得,有的是来源于网络收集 队列引入 进的一端称为队尾(rear),出的一端称为队头(front).队列可以用顺序存储,也可以用链式存储. 队列介绍 队列 ...

  9. 算法笔记_029:约瑟夫斯问题(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 引用自<算法设计与分析基础>第三版: 约瑟夫斯问题,是以弗拉瓦斯.约瑟夫斯(Flavius Josephus)的名字命名的.约瑟夫斯是一 ...

最新文章

  1. JConsole的使用
  2. 【计算机网络】网络安全 : 实体鉴别 ( 实体鉴别过程 | 不重数机制 | 公钥体质加密不重数 | 中间人攻击 )
  3. Django之缓存和信号
  4. C语言指针:定义,使用及计算指针大小
  5. linux笔记 3-4 SMTP,.配置电子邮件传输
  6. C语言中字符型和字符串型的对比
  7. python叮当猫代码_详细介绍一个利用html+css实现叮当猫的实例代码
  8. 递归创建多级文件目录(PHP)
  9. 美团外卖返利小程序-饿了么外卖返利公众号系统 – 程序侠
  10. 华为交换机做qos案例_华为交换机QoS在企业网络中的应用
  11. MoSonic:对SubSonic的分布式存储、缓存改进方案尝试(1)
  12. JavaScript网页特效5则
  13. git报错the remote end hung up unexpectedly
  14. java 求一二次方程的根_java求一元二次方程的根
  15. 实用:python字符编码之间的转化(来猜猜博主的真实姓名)
  16. 技巧推荐 PDF文件怎么转成word文档
  17. 微信小程序接入环信客服
  18. ixia测试工具的全称_IXIA网络测试仪使用说明
  19. 山东莱芜市民在省内91家医院就医可即时结算
  20. 安全知识普及--总结什么是网络安全

热门文章

  1. C++课程设计——背单词程序
  2. outlook设置263邮件服务器,大神详解win10系统怎么在Outlook中添加263邮箱的详细教程...
  3. vue3+DataV+Echarts搭建数据大屏模板(建议收藏)
  4. 珠海炬力与SigmaTel全面和解内幕
  5. 【kubernetes】k8s集群的搭建安装详细说明【创建集群、加入集群、踢出集群、重置集群...】【含离线搭建方法】
  6. Flink学习记录--入门篇
  7. python DEA: 零和数据包络分析zero-sum gain Data envelopment analysis
  8. 瑞典奶爸“坐月子”很酷,他们的育儿神器连布拉德皮特都在用
  9. Joomla建站教程:Joomla建站存在的误区
  10. 你以为爱情是为了什么