2017年12月24日 星期日

無限猴子定理-----bogo排序

無限猴子定理的表述如下:讓一隻猴子在打字機隨機地按鍵,當按鍵時間達到無窮時,幾乎必然能夠打出任何給定的文字,比如莎士比亞的全套著作。
在這裡,幾乎必然是一個有特定含義的數學術語,「猴子」也不是一隻真正意義上的猴子,它被用來比喻成一個可以產生無限隨機字母序列的抽象設備。這個理論說明把一個很大但有限的數看成無限的推論是錯誤的。猴子精確地通過鍵盤敲打出一部完整的作品比如說莎士比亞的哈姆雷特,在宇宙的生命周期中發生的機率也是極其低的,但並不是零。
這個理論的變化形式包括多個甚至無限多個打字員,以及目標文本從一個完整的圖書館到一個簡單的句子。這些表述可以追述到亞里士多德的《論產生和毀滅》和西塞羅的的《論神之本性》,經過布萊茲·帕斯卡喬納森·斯威夫特,最後到現在的形象的打字員的表述形式。在20世紀早期,埃米爾·博雷爾亞瑟·愛丁頓運用這個理論在統計力學基礎中闡述隱式時間標尺。


"""
無限猴子定理的表述如下:讓一隻猴子在打字機上隨機地按鍵,
當按鍵時間達到無窮時,幾乎必然能夠打出任何給定的文字,
比如莎士比亞的全套著作。
(引用自維基百科)這是機率論裡學者提出的一個例子,
但是現實生活中,不可能有猴子可以活到無窮,
也有學者提出猴子要打出一句合乎文法的句子的機率可以說是趨近於零,
所以我們現在將它做一點修改,就是如果猴子打的文字,去掉某幾個字
元之後,如果符合我們給定的文字,就算達成任務了。


現在給你一個指定的文字和猴子輸入的文字,請你檢查是不是符合我們的條件。

輸入說明:
輸入兩個字串,第一個是指定的文字,第二個是猴子輸入的文字。
輸出說明:
如果猴子輸入的文字去掉某幾個(包含0個)字元之後,可以和指定的文字完全相同,
則輸出 YES,否則輸出 NO。(註:大小寫視為不同字元)

範例輸入:
輸入1:
ABC AXBXC

輸入2:
YES YyesS
範例輸出 :

輸出1:
YES

輸出2:
NO
"""

#bogo排序
#@author: wklken@yeah.net

import random
def is_order(l): #判断序列是否有序
    for i in range(len(l)-1):
        if l[i] > l[i+1]:
          return False
    return True

def bogo_sort(l):
    while not is_order(l):
        random.shuffle(l) #随机重排
        print (l)

list1=[1,3,4,5,6,7,2]

print(bogo_sort(list1))

===================== RESTART: F:/Python_APSC/b009-1.py =====================
1 [3, 1, 7, 2, 5, 4, 6]
2 [3, 2, 1, 7, 4, 5, 6]
3 [5, 6, 2, 3, 7, 1, 4]
4 [5, 4, 7, 1, 6, 2, 3]
5 [3, 6, 2, 4, 7, 1, 5]
6 [4, 5, 3, 1, 2, 6, 7]
7 [3, 6, 7, 5, 4, 2, 1]
8 [2, 6, 1, 5, 3, 7, 4]
9 [2, 5, 1, 6, 7, 4, 3]
.
.
.
.

876 [4, 6, 7, 5, 3, 1, 2]
877 [6, 2, 3, 1, 4, 5, 7]
878 [2, 6, 7, 1, 5, 4, 3]
879 [1, 6, 7, 5, 4, 3, 2]
880 [5, 4, 1, 7, 6, 2, 3]
881 [6, 2, 3, 7, 5, 1, 4]
882 [3, 6, 1, 2, 5, 7, 4]
883 [7, 4, 2, 6, 1, 3, 5]
884 [1, 2, 3, 4, 5, 6, 7]
None
>>> 


沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...