簡體   English   中英

設計一個圖靈機來接受 {1^n: n is prime number}

[英]Design a turing machine to accept {1^n : n is prime number}

設計一個圖靈機來接受 {1^n: n is prime number}。

我有這個家庭作業來制作一個識別器圖靈機,如果 1 的出現等於任何質數,它將被接受。 到目前為止,我仍然不知道如何找到與這個素數相關的解決方案。

我應該怎么go一下這個?

因為我們正在制造圖靈機並且我們沒有明確表示我們關心性能,所以我們很可能只關心證明 TM 可以解決這個問題 - 所以,任何解決方案,無論多么愚蠢,都應該足夠了。 什么是正確的,如果不必要的乏味,表明一元格式的數字(例如,1^p)是質數的方法? 一種方法是檢查 p 的數量是否可以被 2 和 p - 1(含)之間的任何數字整除。 對於圖靈機來說,這實際上很容易做到。 由於問題並沒有告訴我們不要這樣做,我們可以通過使用多帶圖靈機來構造它,從而使它變得更加簡單。

讓輸入在#1 磁帶上,並使用#2 磁帶記錄我們試圖除以輸入的當前事物。 在開始之前,我們可以驗證一下我們的p是否大於2,如下:

  • 查看當前磁帶方格是否為 1,如果是,則向右移動,否則停止拒絕,因為 0 不是素數
  • 查看當前磁帶方格是否為 1,如果是,則向右移動,否則,停止拒絕,因為 1 不是質數
  • 查看當前磁帶方格是否為 1,如果是,重置磁帶頭並繼續我們的除法過程,知道 p > 2; 否則,暫停接受,因為 2 是質數。

如果我們在這一點上繼續,那意味着我們已經驗證我們正在查看大於 2 的數字的一元編碼。我們需要這樣做,因為 2 是我們需要檢查整除性的第一個數字,我們不想說 2 是合數,因為 2 整除它。 在這個階段,我們可以在#2 磁帶上寫入 11(一元 2)。 如果願意,您可以在重置磁頭時執行此操作,如上所述。 否則,您可以使用一些專門用於該部分設置的新狀態。

我們現在正在查看這樣的 TM 配置:

#1111111111111111111111#
 ^
#11#
 ^

我們想看看第二張紙帶上的數字是否能整除第一張紙帶上的數字。 為此,我們可以重復“划掉”第一個磁帶上的數字,分組的大小與第二個磁帶的大小相同,直到我們用完第一個磁帶上的數字。 如果我們在划掉整個組的中間用完了,那么第一個磁帶上表示的數字不能被第二個磁帶上表示的數字整除,我們可以繼續檢查第二個磁帶上的遞增數字。 如果我們在划掉整個組后用完了,那么它可以被除 1 和它本身之外的數字整除,所以我們可以停止拒絕,因為這個數字不是質數。 處理我們的示例如下所示:

=>   #1111111#   =>   #x111111#   =>   #xx11111#   =>   #xx11111#
      ^                 ^                 ^                ^
     #11#             #11#             #11#             #11#
      ^                 ^                 ^               ^

=>   #xx11111#   =>   #xx11111#   =>   #xx11111#   =>   #xxx1111#
        ^                ^                ^                 ^
     #11#             #11#             #11#             #11#
      ^               ^                 ^                 ^

=>   #xxxx111#   =>  ... reset    =>   #xxxx111#   =>   ... cross
          ^           tape 2                ^            off another
     #11#             back to          #11#              pair of 1s
        ^             head ...          ^               ...

=>   #xxxxxx1#   =>   #xxxxxxx#
            ^                 ^
     #11#             #11#
      ^                 ^

在此階段,我們在第二盤磁帶上看到 1,在第一盤磁帶上看到空白; 這意味着這個數字不能被我們目前的猜測整除。 如果我們看到 blank/blank,我們可以立即停止拒絕。 相反,我們需要繼續檢查更大的可能除數。 這個階段我們需要:

  1. 將第一個磁帶頭重置為輸入的開頭,再次用 1 替換 x。
  2. 將額外的 1 添加到第二個磁帶頭以增加其值,然后將磁頭重置為其值的開頭。
  3. 重復上述可分性檢查。

如果我們繼續這個過程,我們最終會找到輸入磁帶上表示的數字的除數,如果該數字是合數的話。 然而,實際上,當第二條磁帶增加到與輸入相同的數字時,我們目前將暫停拒絕素數。 然后我們會發現質數會平分自己。 我們需要檢查一下; 一個好的位置是在上面最后一組 3 個步驟中的第 2 步和第 3 步之間,我們可以比較磁帶 #1 和 #2 看看它們是否完全匹配。 這就像可分性檢查一樣,但它最多只會從磁帶 #1 中刪除磁帶 #2 的一個副本,如果它變成空白/空白,它會停止接受而不是停止拒絕。

顯然,如果您想通過提供其轉換表來正式定義 TM,則需要填寫很多細節。 但是,這是可以做到的,並且可以使用此處概述的過程來解決此問題。 同樣,這不是解決此問題的最有效方法,但它是解決此問題的一種方法,通常在為某些問題尋找 TM 時就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM