[英]Turing machine that adds 2-digit binary numbers
嘿,正如標題所說,我正在嘗試創建一個添加 2 個 2 位二進制數的圖靈機。
到目前為止,我設法使它適用於 10 + 01 的情況,但我不能使它適用於所有數字組合。 有人可以幫忙嗎? 到目前為止,這是我的代碼。
輸入格式為 X NUM1 NUM2 X NUM3 NUM4 (x10x01):
State Read Write Direction NextState
0 X X R 0
0 1 1 R 0
0 0 1 L 1
1 X 0 L 1
1 0 0 L 1
1 1 0 L 2
2 X 0 R 2
2 0 0 R 2
2 1 1 R 0
3 _ _ N HALT
您 TM 執行以下操作:
這個邏輯似乎沒有添加任何東西。 在輸入x10x01
上,它將:
x10x01
,state 0,頭在 position 1 ( x
)。 向右移動直到我們讀取 0,寫入 1,向左移動,然后 go 到 state 1。x11x01
,state 1,頭在 position 2 ( 1
)。 向左移動直到我們讀到 1,然后寫入 0,向右移動,然后 go 到 state 2。x01x01
,state 2,頭在 position 3 ( 1
)。 向右移動直到我們讀到 1,向右移動和 go 到 state 0。x01x01
,state 0,頭在 position 4 ( x
)。x01x11
,state 1,頭在 position 4 ( x
)。x00x11
,state 2,頭在 position 4 ( x
)。x00x11
,state 0,頭在 position 6( 1
)。 此時機器將永遠循環或崩潰,具體取決於您的實現細節,因為它將讀取未初始化的磁帶。 雖然看起來機器添加了01
和10
以獲得11
,但實際上它只是隨意地將1
s 和0
s 左右移動。
實際添加的 TM 需要做的事情比你的機器做的要多。 具體來說:
由於您只擔心兩位數字,因此您可以跳過標記數字,而只需使用其他狀態來跟蹤您正在使用的位。
您也可以對所有可能的輸入進行硬編碼(只有 16 個),但這可能不符合您分配的作業的精神。
例如,要實際添加兩個一位數,您可能需要這樣的算法:
在此示例中,狀態 1 和 2 跟蹤第一個數字是 0 還是 1。狀態 3、4 和 5 將數字相加。 State 3 是當兩者都是 0。State 4 是當一個是 1。State 5 是當兩者都是 1 時。
對應的 TM 可能如下所示:
State Read Write Direction NewState
0 X X R 0
0 0 0 R 1
0 1 0 R 2
1 X X R 1
1 0 0 N 3
1 1 1 N 4
2 X X R 2
2 0 0 N 4
2 1 1 N 5
3 _ 0 N Halt
4 _ 1 N Halt
5 _ 1 R 3
我將由您來決定如何將這個概念的兩次迭代連接在一起以添加兩個 2 位數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.