簡體   English   中英

用於二進制數加法和比較的圖靈機

[英]Turing machine for addition and comparison of binary numbers

今天是個好日子!

我正在嘗試解決此練習以進行學習。 有人可以指導我解決這三個問題嗎?

就像我嘗試了第一個問題,以“+”分隔的 2 個二進制數相加。 在那里我通過用相應數量的 1 或零表示每個數字來嘗試 2 個數字加法,例如 5 = 1 1 1 1 1 或 0 0 0 0 0 然后將它們相加,結果也將與所表示的格式相同,但如何添加或表示 2 個二進制文件並用 + 分隔它們,沒有得到任何線索。 圖靈機的頭部會從左邊移動到加號然后左右移動+號嗎? 但是將如何執行添加。 就我的一點知識而言,TM 不能簡單地添加二進制文件,我們必須制定一些邏輯來表示它的二進制文件,就像簡單地將 2 個數字相加一樣。 比較2個二進制文件的情況類似嗎? 問候

我將從問題 2 和 3 開始,因為它們實際上比問題 1 容易。

我們假設我們有有效的輸入(兩邊的非空二進制字符串,沒有前導零),所以我們不需要做任何輸入驗證。 要檢查數字是否相等,我們可以簡單地在 = 符號上來回彈跳並一次划掉一位數字。 如果我們在任何時候發現不匹配,我們就會拒絕。 如果我們在左邊有一個數字,而在右邊找不到一個,我們就拒絕。 如果左邊的數字用完而右邊還有一些,我們拒絕。 否則,我們接受。

Q    T    Q'    T'    D

q0   0    q1    X     right    // read the next (or first) symbol
q0   1    q2    X     right    // of the first binary number, or
q0   =    q7    =     right    // recognize no next is available

q1   0    q1    0     right    // skip ahead to the = symbol while 
q1   1    q1    1     right    // using state to remember which
q1   =    q3    =     right    // symbol we need to look for
q2   0    q2    0     right
q2   1    q2    1     right
q2   =    q4    =     right

q3   X    q3    X     right    // skip any crossed-out symbols
q3   0    q5    X     left     // in the second binary number
q3   1,b  rej   1     left     // then, make sure the next
q4   X    q4    X,b   right    // available digit exists and
q4   0,b  rej   0,b   left     // matches the one remembered
q4   1    q5    X     left     // otherwise, reject

q5   X    q5    X     left     // find the = while ignoring
q5   =    q6    =     left     // any crossed-out symbols

q6   0    q6    0     left     // find the last crossed-out
q6   1    q6    1     left     // symbol in the first binary
q6   X    q0    X     right    // number, then move right
                               // and start over

q7   X    q7    X     right    // we ran out of symbols
q7   b    acc   b     left     // in the first binary number,
q7   0,1  rej   0,1   left     // make sure we already ran out
                               // in the second as well

這個 TM 可以首先通過確保兩個二進制字符串都是非空的並且不包含前導零(划掉它找到的任何東西)來清理輸入。

做“大於”,你可以很容易地做到以下幾點:

  1. 檢查第一個二進制數的長度(去除前導零后)是否大於、等於或小於第二個二進制數(去除前導零后)的長度。 如果第一個比第二個長,請接受。 如果第一個比第二個短,則拒絕。 否則,繼續執行步驟 2。

  2. 像在另一個問題中一樣檢查相等性,但是如果在任何時候第一個數字中有 1 並且在第二個數字中有 0,則接受。 這是有效的,因為我們知道沒有前導零,數字具有相同的位數,並且我們正在按重要性的降序檢查數字。 如果您發現其他不匹配或您確定數字相等,則拒絕。

要添加數字,問題說要遞增和遞減,但我覺得只添加進位不會太難。 該程序的概要是這樣的:

  1. 以進位 = 0 開始。
  2. 轉到第一個數字的最低有效位。 進入狀態(dig=X,carry=0)
  3. 轉到第二個數字的最低有效位。 轉到狀態(和=(X+Y+進位)%2,進位=(X+Y+進位)/2)
  4. 跟隨第二個數字並寫下總和數字。
  5. 返回並繼續該過程,直到其中一個數字用完數字。
  6. 然后,繼續使用仍然有數字的任何數字,只添加這些數字和進位。
  7. 最后,擦除原始輸入並將總和向后復制到磁帶的開頭。

磁帶可能經歷的不同步驟的示例:

#1011+101#
#101X+101#
#101X+10X#
#101X+10X=#
#101X+10X=0#
#10XX+10X=0#
#10XX+1XX=0#
#10XX+1XX=00#
#1XXX+1XX=00#
#1XXX+XXX=00#
#1XXX+XXX=000#
#XXXX+XXX=000#
#XXXX+XXX=0000#
#XXXX+XXX=00001#
#XXXX+XXX=0000#
#1XXX+XXX=0000#
#1XXX+XXX=000#
#10XX+XXX=000#
#10XX+XXX=00#
#100X+XXX=00#
#100X+XXX=0#
#1000+XXX=0#
#1000+XXX=#
#10000XXX=#
#10000XXX#
#10000XX#
#10000X#
#10000#

有兩種方法可以解決加法問題。 假設您的輸入磁帶采用^a+b$形式,其中^$是告訴您已經到達輸入的正面和背面的符號。

  1. 您可以每一步增加b並減少a 1直到a為 0,此時b將是您的答案。 這是假設您可以輕松編寫可以遞增和遞減的 TM。
  2. 您可以使用進位實現全加 TM,就像在紙上添加二進制數一樣。

對於任一選項,您都需要代碼來查找ab的最低有效位。 該問題指定最重要的位是第一位,因此您需要從+開始a$開始b

例如,假設我們要增加1011$ 我們將使用的算法是找到最不重要的未標記數字。 如果它是一個0 ,用一個1替換它。 如果是1 ,則向左移動。

  1. 首先找到 $,將讀取頭移到那里。 將讀取頭向左移動。
  2. 你看到一個1 將讀取頭向左移動。
  3. 你看到一個1 將讀取頭向左移動。
  4. 你看到一個0 1 .
  5. 將讀取頭返回到 $。 二進制數現在是1111$

要比較兩個數字,您需要跟蹤已查看過的值。 這是通過使用“標記”字符擴展字母表來完成的。 0可以標記為X1標記為Y X意思是“這里有一個 0,但我已經看到了。

因此,對於平等,我們可以開始^a=b (假設輸入看起來像^a=b$ 。)算法是找到ab的開始,比較每個的第一個未標記位。 第一次達到不同的值時,停止並拒絕。 如果您到達=$ ,請停止並拒絕。

讓我們看看輸入^11=10$

  1. 讀取頭從 ^ 開始。
  2. 向右移動頭部,直到我們找到一個未標記的位。
  3. 閱讀1 Y 磁帶讀取^Y1=10$ 我們處於表示已讀取1
  4. 向右移動頭部,直到找到=
  5. 向右移動頭部,直到我們找到一個未標記的位。
  6. 閱讀1 這與我們之前閱讀的位相匹配。 寫一個Y
  7. 將頭向左移動,直到找到^
  8. 轉到步驟 2。
  9. 這一次,我們要讀1a與閱讀0b 我們會停下來拒絕。

希望這有助於您入門。

以下程序受edX / MITx 課程 Paradox 和 Infinity 的啟發,展示了如何使用圖靈機執行二進制加法,其中將要相加的數字輸入到圖靈機中並用空格分隔。

圖靈機

  • 使用第二個數字作為計數器
  • 將第二個數字減一
  • 將第一個數字加一

直到第二個數字變為 0。

在此處輸入圖片說明

以下圖靈機模擬動畫顯示了如何將 13(二進制1101 )和 5(二進制101 )相加以產生 18(二進制10010 )。

在此處輸入圖片說明

暫無
暫無

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

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