簡體   English   中英

C和圖靈機

[英]C and Turing Machines

我了解到Turing Machine很好用,因為它與計算機具有“相同的功能”。
另外,我的演講說,每個C代碼都可以由某個Turing Machine執行。 我相信這是解決這個問題的關鍵,但是我沒有找到任何證據。

將C代碼轉換為執行它並提供與C代碼所提供的某些輸入相同的輸出的圖靈機的算法是什么?

將(任意)C代碼轉換為圖靈表的算法將很難編寫,我認為這不會很有啟發性。 我寧願建議考慮以下內容:

  1. 要執行C程序,必須將其編譯為機器代碼 您的CPU可以理解以下代碼:機器代碼告訴CPU該怎么做。 例如,可以是“從內存中的某個位置讀取一個數字,從內存中的另一個位置讀取另一個數字,將兩個數字相加,然后將結果存儲在內存中的另一個位置”。 這大約是C編譯器根據a = b + c;創建的a = b + c; CPU只能執行“簡單的事情”,例如算術,訪問存儲器,並跳轉到程序中的不同位置。 最后一位用於實現循環和if-then-else構造:“如果某些條件為真,則跳至該位置並在此處執行代碼,否則,跳至另一位置”。
  2. 圖靈機也可以執行算術運算:假設我們在磁帶上存儲了兩個數字,以一元表示 ,例如,要計算4 + 5,我們的磁帶將看起來像#@||||#|||||##是空白磁帶的一部分, @是頭),要添加數字,我們的機器只需要除去內部的# ,然后用|代替即可| 並刪除一個| 從磁帶的開頭或結尾開始獲取#@|||||||||# 使用圖靈指令表,您可以根據磁帶的當前狀態做出決定:如果我們處於狀態A並看到|,則執行此操作(寫符號,移動磁頭,更改狀態),否則,執行某些操作其他。

因此,我的建議是,您不要嘗試從C轉到圖靈機,而是想像/查找/詢問現實中的CPU必須執行什么操作才能執行某個C語句,然后找出圖靈機可以做同樣的事情。

還有另一種方法:執行編譯的C程序的真實計算機包括

  • 一個“做事”的CPU
  • “存儲事物”的內存
  • 一個“協調事物”的程序

圖靈機包括

  • 可以在磁帶上讀寫的磁頭==做事
  • (無限!比PC還要好!)磁帶==存儲東西
  • 指令表==協調事物

我希望這有幫助。

許多年前,人們沒有太多的想法去解釋和可視化事物的工作方式。 在計算歷史中,有許多“機器”,其中最著名的一種是巴貝奇機器 ,它解釋並清楚地說明了如何解決簡單的數學問題,而這些問題對於當時的機器和可用的設備而言並不簡單時間。

圖靈機展示了如何從頭,磁帶,寄存器和查找表的計算基礎結構開始,並獲得一台可以正常運行的機器,那時候,這簡單的事情是開創性的,但實際上只要減少設置即可將有效狀態(有效寄存器)設置為0和1,您將了解現代CPU的基本原理。

通常,圖靈機+布爾代數是一門好的計算機科學課的轉折點,因為它們教給您使CPU以其工作方式工作的非常基本的邏輯。

如果您是程序員,則可以將Turing機器的本質抽象為帶有ifwhile結構,您可以輕松地猜測while作用以及if的條件。

在現代CPU上,您甚至可能沒有一個while循環,只是一個無休止的循環,因為一個CPU根本就不睡覺,它總是有事要做,即使什么也不做就意味着要為CPU做事,IDLE周期是為那。

您可以輕松地在Turing機器中實現一個非常簡單的算法,並發現運行它花費了宇宙的時間,甚至更長。 這並不意味着圖靈機是一個壞主意,而不僅僅是說晶體管是個壞主意。 但是,要獲得有用的計算設備,您可能需要考慮並行運行圖靈機(也許有很多圖靈機)。 這已經超越了我在過去50年中在計算領域所學到的任何知識。

理查德·穆林斯

暫無
暫無

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

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