欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python數(shù)據(jù)結(jié)構(gòu)隊(duì)列解決約瑟夫斯問題

 更新時(shí)間:2023年02月03日 14:02:20   作者:西召  
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)隊(duì)列解決約瑟夫斯問題

1、隊(duì)列

隊(duì)列是一種遵循先進(jìn)先出(FIFO)原則的數(shù)據(jù)結(jié)構(gòu)。

可以使用數(shù)組實(shí)現(xiàn)隊(duì)列的基本操作。當(dāng)進(jìn)行入隊(duì)操作的時(shí)候,即在隊(duì)列尾部插入一個(gè)元素,由于需要將所有元素向后移動(dòng)一個(gè)位置,因此添加操作的時(shí)間復(fù)雜度是O(n);

當(dāng)進(jìn)行出隊(duì)操作的時(shí)候,只需要在隊(duì)頭移除一個(gè)元素,其他元素的序號(hào)不變,因此移除操作的時(shí)間復(fù)雜度是O(1)。

使用Python數(shù)組實(shí)現(xiàn)隊(duì)列源碼:

class Queue:
    def __init__(self):
        self.items = []
    def is_empty(self):
        return self.items == []
    # 
    def enqueue(self, item):
        self.items.insert(0, item)
    # 
    def dequeue(self):
        return self.items.pop()
    def size(self):
        return len(self.items)

2、使用隊(duì)列解決約瑟夫斯問題

弗拉維奧·約瑟夫斯是公元1世紀(jì)著名的歷史學(xué)家。相傳,約瑟夫斯當(dāng)年和39個(gè)戰(zhàn)友在山洞中對(duì)抗羅馬軍隊(duì)。眼看著即將失敗,他們決定舍生取義。于是,他們圍成一圈,從某個(gè)人開始,按順時(shí)針方向殺掉第7人。約瑟夫斯同時(shí)也是卓有成就的數(shù)學(xué)家。據(jù)說,他立刻找到了自己應(yīng)該站的位置,從而使自己活到了最后。當(dāng)只剩下他時(shí),約瑟夫斯加入了羅馬軍隊(duì),而不是自 殺。

這個(gè)故事有很多版本,有的說是每隔兩個(gè)人,有的說最后一個(gè)人可以騎馬逃跑。不管如何,問題都是一樣的。

約瑟夫斯問題等價(jià)于一個(gè)兒童游戲:傳土豆。

在這個(gè)游戲中,孩子們圍成一圈,并依次盡可能快地傳遞一個(gè)土豆,在某個(gè)時(shí)刻,大家停止傳遞,此時(shí)手里有土豆的孩子就得退出游戲。重復(fù)上述過程,直到只剩下一個(gè)孩子。

import my_queue
def hotPotato(namelist, num):
    queue = my_queue.Queue()
    for name in namelist:
        queue.enqueue(name)
    while queue.size() > 1:
        for i in range(num):
            queue.enqueue(queue.dequeue())
        queue.dequeue()
    return queue.dequeue()
print(hotPotato([1, 2, 3, 4, 5, 6], 7))

執(zhí)行過程如下,最終輸出結(jié)果為 3 。

234561
345612
456123
561234
654321
543216
432165
43216 彈出4
3216 彈出3

3、雙端隊(duì)列

雙端隊(duì)列是一種允許我們同時(shí)從隊(duì)頭和隊(duì)尾進(jìn)行出隊(duì)和入隊(duì)操作的特殊隊(duì)列,它是隊(duì)列和棧的結(jié)合體。

使用數(shù)組實(shí)現(xiàn)雙端隊(duì)列源碼:

class Deque:
    def __init__(self):
        self.items = []
    def isEmpty(self):
        return self.items == []
    def addFront(self, item):
        self.items.append(item)
    def addRear(self, item):
        self.items.insert(0, item)
    def removeFront(self):
        return self.items.pop()
    def removeRear(self):
        return self.items.pop(0)
    def size(self):
        return len(self.items)

4、使用雙端隊(duì)列解決回文問題

回文是指從前往后讀和從后往前讀都一樣的字符串,例如radar、toot,以及madam。

需要構(gòu)建一個(gè)程序,它接受一個(gè)字符串并且檢測(cè)其是否為回文。

import my_deque
def palchecker(aString):
    chardeque = my_deque.Deque()
    for ch in aString:
        chardeque.addRear(ch)
    stillEqual = True
    while chardeque.size() > 1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False
    return stillEqual
print(palchecker('aaaabaaaa'))
print(palchecker('aaaabaaab'))

輸出結(jié)果為:

True
False

以上就是Python數(shù)據(jù)結(jié)構(gòu)隊(duì)列解決約瑟夫斯問題的詳細(xì)內(nèi)容,更多關(guān)于Python數(shù)據(jù)結(jié)構(gòu)隊(duì)列的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python基礎(chǔ)之Spyder的使用

    Python基礎(chǔ)之Spyder的使用

    Spyder是一個(gè)用于科學(xué)計(jì)算的使用Python編程語言的集成開發(fā)環(huán)境(IDE),它結(jié)合了綜合開發(fā)工具的高級(jí)編輯、分析、調(diào)試等功能,需要的朋友可以參考下
    2023-05-05
  • 使用Kivy將python程序打包為apk文件

    使用Kivy將python程序打包為apk文件

    本文給大家分享的是使用Kivy將python程序打包為apk文件的方法,包括安裝步驟及相關(guān)代碼,有需要的小伙伴可以參考下
    2017-07-07
  • Django中ORM找出內(nèi)容不為空的數(shù)據(jù)實(shí)例

    Django中ORM找出內(nèi)容不為空的數(shù)據(jù)實(shí)例

    這篇文章主要介紹了Django中ORM找出內(nèi)容不為空的數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python Multinomial Naive Bayes多項(xiàng)貝葉斯模型實(shí)現(xiàn)原理介紹

    Python Multinomial Naive Bayes多項(xiàng)貝葉斯模型實(shí)現(xiàn)原理介紹

    這篇文章主要介紹了Python Multinomial Naive Bayes多項(xiàng)貝葉斯模型實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • 低版本中Python除法運(yùn)算小技巧

    低版本中Python除法運(yùn)算小技巧

    這篇文章主要介紹了低版本中Python除法運(yùn)算小技巧,python 2.5版本中存在兩種除法運(yùn)算,即所謂的true除法和floor除法,本文講解了兩種方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • python爬蟲中PhantomJS加載頁面的實(shí)例方法

    python爬蟲中PhantomJS加載頁面的實(shí)例方法

    在本篇文章里小編給大家整理了關(guān)于python爬蟲中PhantomJS加載頁面的實(shí)例方法,有需要的朋友們可以參考下。
    2020-11-11
  • python 控制臺(tái)單行刷新,多行刷新實(shí)例

    python 控制臺(tái)單行刷新,多行刷新實(shí)例

    今天小編就為大家分享一篇python 控制臺(tái)單行刷新,多行刷新實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

    關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

    我們?cè)陂_發(fā)過程中,編寫項(xiàng)目時(shí)所使用的路由往往是指代了框架/項(xiàng)目中用于完成路由功能的類,這個(gè)類一般就是路由類,簡(jiǎn)稱路由,這篇文章主要介紹了有關(guān)flask路由app.route及路由參數(shù)的各種用法解析,需要的朋友可以參考下
    2024-03-03
  • TensorFlow中tf.batch_matmul()的用法

    TensorFlow中tf.batch_matmul()的用法

    這篇文章主要介紹了TensorFlow中tf.batch_matmul()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python打印異常信息的方法示例詳解

    Python打印異常信息的方法示例詳解

    在 Python 編程中,異常是指程序執(zhí)行過程中出現(xiàn)的錯(cuò)誤或異常情況,當(dāng)程序遇到異常時(shí),為了更好地調(diào)試和定位問題,我們需要打印異常信息,本文將詳細(xì)介紹如何在 Python 中打印異常,并提供一些示例和注意事項(xiàng),需要的朋友可以參考下
    2023-12-12

最新評(píng)論