[英]C and Turing Machines
我了解到Turing Machine很好用,因為它與計算機具有“相同的功能”。
另外,我的演講說,每個C代碼都可以由某個Turing Machine執行。 我相信這是解決這個問題的關鍵,但是我沒有找到任何證據。
將C代碼轉換為執行它並提供與C代碼所提供的某些輸入相同的輸出的圖靈機的算法是什么?
將(任意)C代碼轉換為圖靈表的算法將很難編寫,我認為這不會很有啟發性。 我寧願建議考慮以下內容:
a = b + c;
創建的a = b + c;
。 CPU只能執行“簡單的事情”,例如算術,訪問存儲器,並跳轉到程序中的不同位置。 最后一位用於實現循環和if-then-else構造:“如果某些條件為真,則跳至該位置並在此處執行代碼,否則,跳至另一位置”。 #@||||#|||||#
( #
是空白磁帶的一部分, @
是頭),要添加數字,我們的機器只需要除去內部的#
,然后用|
代替即可|
並刪除一個|
從磁帶的開頭或結尾開始獲取#@|||||||||#
使用圖靈指令表,您可以根據磁帶的當前狀態做出決定:如果我們處於狀態A並看到|,則執行此操作(寫符號,移動磁頭,更改狀態),否則,執行某些操作其他。 因此,我的建議是,您不要嘗試從C轉到圖靈機,而是想像/查找/詢問現實中的CPU必須執行什么操作才能執行某個C語句,然后找出圖靈機可以做同樣的事情。
還有另一種方法:執行編譯的C程序的真實計算機包括
圖靈機包括
我希望這有幫助。
許多年前,人們沒有太多的想法去解釋和可視化事物的工作方式。 在計算歷史中,有許多“機器”,其中最著名的一種是巴貝奇機器 ,它解釋並清楚地說明了如何解決簡單的數學問題,而這些問題對於當時的機器和可用的設備而言並不簡單時間。
圖靈機展示了如何從頭,磁帶,寄存器和查找表的計算基礎結構開始,並獲得一台可以正常運行的機器,那時候,這簡單的事情是開創性的,但實際上只要減少設置即可將有效狀態(有效寄存器)設置為0和1,您將了解現代CPU的基本原理。
通常,圖靈機+布爾代數是一門好的計算機科學課的轉折點,因為它們教給您使CPU以其工作方式工作的非常基本的邏輯。
如果您是程序員,則可以將Turing機器的本質抽象為帶有if
的while
結構,您可以輕松地猜測while
作用以及if
的條件。
在現代CPU上,您甚至可能沒有一個while
循環,只是一個無休止的循環,因為一個CPU根本就不睡覺,它總是有事要做,即使什么也不做就意味着要為CPU做事,IDLE周期是為那。
您可以輕松地在Turing機器中實現一個非常簡單的算法,並發現運行它花費了宇宙的時間,甚至更長。 這並不意味着圖靈機是一個壞主意,而不僅僅是說晶體管是個壞主意。 但是,要獲得有用的計算設備,您可能需要考慮並行運行圖靈機(也許有很多圖靈機)。 這已經超越了我在過去50年中在計算領域所學到的任何知識。
理查德·穆林斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.