python数据结构与算法 15 队列应用之烫手的山芋

数据结构课程设计 数据结构课程设计,包含求字符串之间距离,后缀表达式计算,两个小游戏,二叉树结点染色问题,打印机任务队列,约瑟夫双向生死游戏,求解布尔表达式,谣言传播问题,分形问题,网络布线,数独游戏,中国邮路问题,最大匹配问题,最佳匹配问题,构造哈夫曼树(限选,解压缩软件(限选),小型文本编辑器,电梯模拟系统,决策树构造,关联规则求解,老鼠走迷宫,广义表实现,无向图的简单路径,工资管理系统,散列表的设计与实现,宿舍管理查询软件,最长公共子串,英文文章统计,本科生导师制问题,镜像树,堆栈应用,矩阵位置旋转,集合运算,保龄球计分,车位管理,学生成绩管理系统,英文单词填空游戏,城市管理,数字图像处理,三子棋游戏,模拟人工洗牌,英文单词查询系统,选择合适的存储结构表示二元多项式,并实现基本的加减运算,先中后序线索二叉树 立即下载

为了展示队列的应用,我们模拟一种真实的先进先出的情形。作为开始,我们观察一种儿童游戏,叫烫手的山芋(hotpotato),在这个游戏中(图2),孩子们排成一圈,把手里的东西一个传一个,在某种情形下,停止传递,手上拿着烫手的山芋的人就要被清出来,其他的人继续玩,直到只剩一个人。


从现代意义上说,这个游戏等价于著名的约瑟夫问题。据说,一世纪左右,历史学家弗拉维约瑟夫与犹太人一起反抗罗马。一次,约瑟夫和他的39个同志一起在山洞里抵抗,不过眼看就要失败了,他们决定宁死也不做罗马的奴隶。他们围坐成一圈,一个人一个编号,按时针方向,每第七个人就要被杀死。据说约瑟夫是个数学家,他马上就知道按这规则,应该坐在哪个位置会留到最后。看来约瑟夫最后没有自杀,相反却投降了。这个故事有很多版本,有的版本说是每3个人杀一个,有的说最后一个人可以骑马逃脱,但不管怎样,思想是相同的。

我们引入一个烫手的山芋的模拟过程,参数是一个名字列表和一个常数num。num用来计数,最后函数返回经多轮计数后,剩下的最后一个人的名字。后来发生什么,就看你的了。

为了模拟这个圆圈,我们使用队列(图3)。假定开始拿着山芋的孩子站在队伍的前端,一经传出山芋后,模拟程序只需要简单地把这个孩子移出队列,然后再将他加入尾部,然后他在尾部再逐步前移,直到再次轮到他。

经过num次出队入队之后,前端的孩子最终被完全清出队列,然后剩余的人继续游戏,直到最后一个。



下面是实现代码,最后面是用7个名字和数字3来调用这个方法,最后剩下那个叫Susan。

from pythonds.basic.queue import Queue
 
def hotPotato(namelist, num):
    simqueue = Queue()
    for name in namelist:
        simqueue.enqueue(name)
 
    while simqueue.size() >1:
        for i in range(num):
           simqueue.enqueue(simqueue.dequeue())
 
        simqueue.dequeue()
 
    return simqueue.dequeue()
 
print(hotPotato(["Bill","David","Susan","Jane","Kent","Brad"],7))


(译者注)译者认为这个算法与约瑟夫问题差别明显,具体讨论在http://blog.youkuaiyun.com/python2014/article/details/21231985

Hot potato ---- practice about socket programming Developed a game called hot potato. It is a good practice about socket programming in Linux environment. 立即下载

相关推荐

巧接面试的七大烫手山芋.pptx

巧接面试的七大烫手山芋.pptx

程序员必须掌握的数据结构 2

无论是任何程序员,不论是算法,还是其他,都需要掌握一定的数据结构。本文以最优雅的方式,基于Python,完成算法,不要问,背下来就好。代码量更少,更好背。 源码:github.com/SpikeKing 第2篇 栈与队列:括号匹配(栈)、二进制转换(栈)、烫手的山芋(队列)、回文(双端队列)、反转链表(链表); 1. 括号匹配 括号匹配,判断字符串中括号是否匹配。当为左括号时入栈,为右括号时出栈...

weixin_34310369的博客 307

vivado运行时报错 license文件更新操作

vivado使用:SYNTHESIS->Run Synthesis 时报错 [Common 17-345] A valid license was not found for feature ‘Synthesis’ and/or device ‘xc7vx485t’. Please run the Vivado License Manager for assistance in determiningwhich features and devices are licensed for your sy

qq_44692266的博客 2万+

循环队列--击鼓传花或者叫烫手的山芋(hot potato)

之前我们已经实现了一个Queue的构造函数。这里使用它来模拟一个击鼓传花的游戏。 function hotPotato(name_list, num) { var queue = new Queue(); for(var i=0; i<name_list.length; ++i) { queue.enqueue(name_list[i]); } var eliminated = "

qq_21058391的博客 2503

jenkins安装、打包、部署

一个可以让小白部署发布项目的软件;git 配置 一定要配置git的命令路径jenkins启动命令,一定要加这一段 -Dhudson.util.ProcessTree.disable=true一定要配置jenkins的节点,BUILD_ID和DONTKILLME 否则会导致打包后,会将运行的java程序进程也杀死创建任务SSH中执行服务器B的命令的时候,cd /opt;一定要cd 打开那个目录,否则文件无法传输过去。

学海无涯,我用JAVA 5217

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

击鼓传花 Python

有多少种不同的方法可以使得从小赛手里开始传的花,传了m次以后,又回到小赛手里。对于传递的方法当且仅当这两种方法中,接到花的同学按接球顺序组成的序列是不同的,才视作两种传花的方法不同。比如有3个同学1号、2号、3号,并假设小赛为1号,花传了3次回到小赛手里的方式有1->2->3->1和1->3->2->1,共2种。 m代表第m次传递,n代表话到这个人手中的次数。d...

jianyuchen23的博客 2670

紫光同创PGL50H开发板实战:盘古50KN网口板的高速通信与数据处理

本文详细介绍了紫光同创PGL50H开发板(盘古50KN网口板)在高速通信与数据处理领域的实战应用。文章从开箱、核心芯片解析、开发环境搭建入手,重点讲解了如何配置与测试其8路千兆以太网接口和SFP光纤接口,并深入探讨了FPGA与DDR3协同进行多路数据汇聚处理的系统架构与调试方法,为网络通信与高速数据处理系统开发提供了宝贵的实践经验。

weixin_28256233的博客 452

数据结构与算法python版本之线性结构之队列Quene

队列是一种有次序的数据集合,其特征是:新数据项的添加总发生在一端(通常称为“尾rear”端),而现存数据项的移除总发生在另一端(通常称为“首front”端);当数据项加入队列,首先出现在队尾,随着队首数据项的移除,它逐渐接近队首。新加入的数据项必须在数据集末尾等待,而等待时间最长的数据项则是队首;这种次序安排的原则称为**(FIFO:First-in-first-out)先进先出;**队列的列子出现在我们日常生活的方方面面:排队计算机科学中队列的例子:打印机、进程调度、键盘缓冲。

qq_41780297的博客 1233

避坑指南:英飞凌TC3XX的MCMCAN初始化常见错误及解决方法

本文针对英飞凌TC3XX系列MCU的MCMCAN模块初始化难题,深入剖析了寄存器配置时序、总线监控模式误用、中断映射错误及Message RAM地址冲突四大常见陷阱。通过实战代码示例和诊断流程,提供了清晰的避坑指南和解决方案,帮助嵌入式开发者高效解决CAN FD通信故障,确保汽车电子与工业控制项目的稳定运行。

weixin_29193259的博客 244

Android UI 组件系列(二):Button 进阶用法

在这篇博客中,我们深入探讨了 Button 的进阶用法,重点介绍了如何通过 事件处理 来响应用户的操作,如何使用 自定义样式 来提升按钮的外观,并利用 StateListDrawable 来管理按钮在不同状态下的表现。这些技巧能够帮助你打造更具交互性、视觉吸引力和动态响应的按钮,提升用户体验。

weixin_39339407的博客 1625

算法之路,坎坷多艰

数据结构与算法!!声明(想用本专栏学习算法的看这)!!参考书目:1.介绍1.1 目标1.2 快速开始1.3 什么是计算机科学1.4 什么是编程1.5 为什么要学习数据结构和抽象数据类型1.6 为什么要学习算法1.7 回顾Python基础2.算法分析2.1 目标2.2 什么是算法分析2.3 大O符号2.4 一个乱序字符串检查的例子2.5 Python数据结构的性能2.6 列表2.7 字典2.8 总...

Nebularr的博客 548

SAP Gateway 中事务码 /IWFND/MAINT_SERVICE 的用法介绍

本文系统梳理了SAP Gateway中/IWFND/MAINT_SERVICE事务码的核心功能与运维实践。作为OData服务管理中樞,它支持服务注册激活、ICF节点配置、系统别名绑定、批量处理等关键操作。文章详解了服务目录、ICF节点、系统别名的配置要点,提供了批量激活、缓存清理、性能监控等实用技巧,并针对常见陷阱(如传输配置、删除残留)给出解决方案。通过制造业批量激活、零售业OAuth集成等案例,展示了事务码在企业级应用中的实际价值,为SAP Gateway运维提供了一套完整的治理清单。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 306

python编程练习(四)

一:搬圆桌 小A有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1, y1)。每次移动一步,小A都得在圆桌边界上固定一个点,然后将圆桌绕这个点旋转。 问最少需要几步才能把圆桌移到目标位置? 分析: 答案是【注意题目指的是中心,其中心位于(x,y),现在他想把圆桌的中心移到(x1, y1)】 (0,2r]-1;(2r,4r]-2;(4r,6r]-3 import ma...

qq_27163197的博客 1372

ArcGIS Pro符号化教程

本文详细介绍了ArcGIS Pro的软件设置和符号化操作步骤。主要包括:1)设置默认工程目录和关闭地图自动加载;2)创建新工程的基本流程;3)点要素的单一符号化方法,包括样式修改和图层调整;4)图表符号显示过滤器的使用,涉及字段添加、图表类型选择和背景设置。文章还提供了操作截图和数据下载链接,适合GIS初学者学习ArcGIS Pro的基础符号化操作。

WwLK123的博客 548

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python之队列模拟算法(烫手山芋问题)

烫手山芋即击鼓传花,7人传山芋,叫到7的人退出,直到最后一人。 完整代码: # 自定义队列类 class Queue(object): def __init__(self): #初始化空队列 self.items = [] def isEmpty(self): #是否为空 return self.items == [] ...

夜空下的凝视 988

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python 爬虫入门到精通——Selenium

selenium本身是一个自动化测试工具。它可以让python代码调用浏览器。并获取到浏览器中加载的各种资源。我们可以利用selenium提供的各项功能。帮助我们完成数据的抓取。

fight fight fight,never ever ever give up 539

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python 常见的算法 & 数据结构

文章目录常见的算法 & 数据结构时间复杂度分析算法时,需要考虑的时间复杂度的基本计算规则栈队列两个队列生成一个栈烫手的山芋双端队列内存顺序表链表链表排序两个队列生成一个链表数组和链表的区别1.链表是什么2.单向链表3.双向链表4.循环链表5.数组和链表的区别?6.链表的应用、代码实践二叉树二叉树的插入二叉树的遍历排序二叉树二分查找排序算法冒泡算法选择排序插入排序希尔排序快速排序 常见的算法 & 数据结构 时间复杂度 评判规则:量化算法执行步骤的数量 最重要的项 :时间复杂度表达式中最有意义

weixin_43939159的博客 1645

队列应用之热土豆传递问题Python

队列应用之热土豆传递问题 热土豆传递问题:假设有N个人,有一个热土豆在这N个人中传递,每经过一个人称为传递一次,假设传递m次,最后在哪个人的手中,该人就出去,然后自动落到下一个人手中。如此往复下去,求最后剩下的那个人(因为只有一个人了,所以不可能再传递下去)? 其实这道题就是一个循环判断问题。每次循环时将此时第m个位置的人去掉即可,然后将第m+1个人作为第一个人,继续循环。这个问题用循环队列比较简单。因为在复习队列,所以直接用队列做了。 这里换个角度思考一下,因为土豆是传递的,所以它的位置是不断变化的,

qq_42907161的博客 1498

python--使用队列结构来模拟烫手山芋的游戏

基本功,磨起来。 # coding = utf-8 class Queue: def __init__(self): self.items = [] def is_empty(self): return self.items == [] # 入队列,加在首部 def enqueue(self, it...

weixin_30482181的博客 257

python数据结构与算法 14 队列的python实现

队列的python实现 在建立抽象数据类型之后,可以建立一个类来实现队列的。和以前一样,我们采用python内置的列表作为工具来建立队列类。 队列也是有序的,所以需要决定队列的哪一头作为队列的前端和尾端。在下面的实现代码中,我们约定列表的0位置是队列的尾部,这样的好处是,可以直接使用列表的insert方法在队尾加入数据,使用pop方法在队列的前端(这时是列表的最后一个数据)删除数据。从性能

量变到质变 2318

python-队列

from pythonds.basic.queue import Queue import random def hotPotato(namelist,num):     simqueue = Queue()     for name in namelist:         simqueue.enqueue(name)     while simqueue.size()&gt;1:      ...

Leohfan的博客 337

动态规划:击鼓传花

题目描述 学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。 聪明的小赛

怀念过去 4989

击鼓传花

题目描述 学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演...

释晓的博客 2633

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 404
上一篇: python数据结构与算法 14 队列的python实现
下一篇: PyQt4之对话框示例
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值