美文网首页
python中队列的应用:约瑟夫斯问题

python中队列的应用:约瑟夫斯问题

作者: 金融测试民工 | 来源:发表于2020-03-24 21:55 被阅读0次

    著名的 约瑟夫斯问题(Josephus Problem)是应用队列(确切地说,是循环队列)的典型案例。 约瑟夫斯问题 讲的是,参与者围成一个圆圈,从某个人(队首)开始报数,报数到num的人退出圆圈,然后从退出人的下一位重新开始报数;重复以上动作,直到只剩下一个人为止。

    这个问题我们采用队列来解决,通过队列来存放所有参加游戏的人名,根据报数方向从队首排到队尾,保持队首始终是报数的人

    报数开始,只需要将队首的人出队,随即再到队尾入队,算是报数的一次传递。传递到num次后,将队首的人移除不再入队。如此反复,直到只剩下一个人为止。

队列实现约瑟夫斯问题

    实现代码如下,其中使用的Queue模块是我上一篇文件写的Queue队列封装模块:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

def josephus(namelist, num):

    simqueue = Queue()

    for name in namelist:

        simqueue.enqueue(name)

    while simqueue.size() > 1:

        for i in xrange(num):

            simqueue.enqueue(simqueue.dequeue())        //一次传递

        simqueue.dequeue()

    return simqueue.dequeue()

if __name__ == '__main__':

    print(josephus(["Bill", "David", "Kent", "Jane", "Susan", "Brad"], 3))

运行结果:

$ python josephus.py

Susan

相关文章

  • python中队列的应用:约瑟夫斯问题

    著名的约瑟夫斯问题(Josephus Problem)是应用队列(确切地说,是循环队列)的典型案例。约瑟夫斯问题讲...

  • 约瑟夫问题-队列

    如果说我比别人看得更远些,那是因为我站在了巨人的肩上。---牛顿 先前[https://www.jianshu.c...

  • 用队列解决约瑟夫环问题-Python

    已发布于同名公众号:车湾里 什么是约瑟夫环问题 约瑟夫问题 ,有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学...

  • 队列实现约瑟夫问题

    约瑟夫问题传说犹太人反叛罗马人,落到困境,约瑟夫和39 人决定殉难,坐成一圈儿,报数1~7,报到7的 人由旁边杀死...

  • 约瑟夫问题

    约瑟夫问题 一、数组解法 二、循环队列 三、数学解法

  • 算法面经---单向循环链表(解决约瑟夫问题)

    单向循环链表--解决约瑟夫问题 一、单向循环链表的应用场景 1.1 问题描述 Josephu(约瑟夫、约瑟夫环) ...

  • Python实现:链表、队列、堆栈、AVL树、红黑树

    一、链表 二、队列 附个实例:约瑟夫斯问题 三、堆栈 四、AVL树(平衡二叉树) 详细关于AVL树请阅读:浅谈【树...

  • 约瑟夫环问题

    约瑟夫环问题约瑟夫环描述:约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围...

  • 约瑟夫问题的一个简单java实现

    约瑟夫问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约...

  • 约瑟夫斯环问题

    大体思路是使用循环链表结合一个带模的计数器,计数器递增的同时链表向前遍历,计数器抵达指定次数时将链表当前节点从环中...

网友评论

      本文标题:python中队列的应用:约瑟夫斯问题

      本文链接:https://www.haomeiwen.com/subject/knwayhtx.html