![](/img/trans.png)
[英]Design a turing machine that accepts the language L= {a^n+1 b^2n c^3n: n>=0}
[英]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,如下:
如果我們在這一點上繼續,那意味着我們已經驗證我們正在查看大於 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,我們可以立即停止拒絕。 相反,我們需要繼續檢查更大的可能除數。 這個階段我們需要:
如果我們繼續這個過程,我們最終會找到輸入磁帶上表示的數字的除數,如果該數字是合數的話。 然而,實際上,當第二條磁帶增加到與輸入相同的數字時,我們目前將暫停拒絕素數。 然后我們會發現質數會平分自己。 我們需要檢查一下; 一個好的位置是在上面最后一組 3 個步驟中的第 2 步和第 3 步之間,我們可以比較磁帶 #1 和 #2 看看它們是否完全匹配。 這就像可分性檢查一樣,但它最多只會從磁帶 #1 中刪除磁帶 #2 的一個副本,如果它變成空白/空白,它會停止接受而不是停止拒絕。
顯然,如果您想通過提供其轉換表來正式定義 TM,則需要填寫很多細節。 但是,這是可以做到的,並且可以使用此處概述的過程來解決此問題。 同樣,這不是解決此問題的最有效方法,但它是解決此問題的一種方法,通常在為某些問題尋找 TM 時就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.