簡體   English   中英

圖靈機算法

[英]Turing Machine Algorithm

請你幫助我好嗎? 我需要為使用以下兩個字母 a 和 b 的單磁帶圖靈機編寫代碼。
所以程序應該顯示兩個詞的共同前綴。
例如:
g(aab,aaaba) -> aa; g(_,abab) -> _; g(aaba,baa) -> _; g(_,_) -> _; g(babaab,babb) -> bab
其中g是機器的function,下划線表示一個空詞,詞之間有空格
我試圖實現以下選項:
如果在開頭我們看到字母a ,那么我們將其刪除並移至第二個單詞的開頭。 如果我們還在那里看到一個字母a ,我們也會將其刪除,並且在兩個單詞之后,我們通過一個空格寫一個a。 之后我們回到第一個單詞的開頭並重復這個操作。 當第一個單詞的第一個字母和第二個單詞的第一個字母不再匹配時,我們會刪除剩下的所有內容。 但是我在代碼上遇到了一些麻煩,因為每次操作后兩個單詞之間的空格會變長,我不知道如何控制它。 當第一個或第二個單詞完全是公共前綴時也會出現問題,如下所示:
g(baa,baabab) -> baa

你的方法似乎很合理。 從您的描述看來,您只是難以概括某些單獨的步驟。

例如,要處理兩個單詞之間不斷增長的空格,請記住,在程序中的任何時候,這兩個單詞都被一個或多個空格分隔。 因此,針對該一般情況實施您的查找操作。

對於常見的前綴情況,您必須處理最終用完字符來比較的情況。 所以從第一個單詞中刪除字符后,在尋找第二個單詞的開頭時,檢查你傳遞的第一個字符是字母還是空格。 如果它是一個空格,那么你在前綴的情況下,需要注意你以后不要試圖回到第一個單詞,因為你已經刪除了所有的單詞,只剩下空格了。 同樣,如果第二個單詞是前綴,您可以在查找 output 時檢測到這一點。

嘗試將算法分解為其基本步驟,並單獨測試每個步驟。 當您可以孤立地專注於一個簡單的步驟時,確保正確處理極端情況會容易得多,而不必將其作為更大算法的一部分進行測試。 這樣做是調試代碼的一項基本技能,因此認為這是一個很好的練習。 即使一開始看起來很痛苦,也要確保你有一種結構化的方法來分析問題並將代碼分解成更小的部分,最終你將能夠解決任何問題。 快樂編碼!

暫無
暫無

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

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