簡體   English   中英

算法和數據結構如何與圖靈機相關?

[英]How are algorithms and data structures related to Turing Machines?

的計算機算法設計和分析副本今天到了。 在第一章中,作者介紹了圖靈機。 我還有另外兩本算法教科書,算法導論算法設計手冊 ,但它們都沒有談到圖靈機,盡管它們在算法和數據結構方面很有名。

我想了解圖靈機和算法/數據結構之間的關系是什么。 了解圖靈機成為算法專家真的很重要嗎?

圖靈機只是分析計算的理論工具,即。 我們可以通過創建一個計算它的圖靈機來指定一個算法。 它們在可計算性研究中非常有用,也就是說,如果有可能計算函數。 霍普克羅夫特和烏爾曼的經典作中討論了圖靈機和其他幾種形式語言結構。 在討論NP完全性時,例如圖靈機也出現這種書,由Garey和約翰遜。

書籍和圖靈機一般都是理論上的。 如果你對學術方面的algorihhms感興趣,我會推薦它們。 但是,如果你想要真實地理解在真實計算機上實現的算法並運行真實數據,那么我會說,對圖靈機進行粗略的理解是非常重要的。

圖靈機在描述數據結構和算法時很重要的原因是它們提供了一個數學模型,我們可以在其中描述算法是什么。 大多數情況下,使用高級語言或偽代碼來描述算法。 例如,我可能會描述一種算法來查找數組中的最大值,如下所示:

Set max = -infinity
For each element in the array:
    If that element is greater than max:
        Set max equal to that element.

從這個描述中可以很容易地看出算法是如何工作的,並且很容易將其轉換為源代碼。 但是,假設我寫了這個描述:

Guess the index at which the maximum element occurs.
Output the element at that position.

這是一個有效的算法嗎? 也就是說,我們可以說“猜測指數”並嚴格定義它的含義嗎? 如果我們允許這樣做,需要多長時間才能做到這一點? 如果我們不允許,為什么不呢? 第二個第一個描述有什么不同?

為了對算法進行數學上嚴格的定義,我們需要有一些關於計算機如何工作以及它能做什么和不能做什么的正式模型。 圖靈機是正式定義計算的一種常用方法,雖然還有其他一些也可以使用( 注冊機 ,字符串重寫系統,教堂的lambda演算等)。一旦我們定義了計算的數學模型,我們就可以開始談論什么樣的算法描述是有效的 - 即那些可以使用我們的計算模型實現的算法描述。

許多現代算法嚴格依賴於底層計算模型的屬性。 例如, 緩存遺忘算法假設計算模型具有一些未知大小的內存緩沖區和一個雙層內存。 有些算法要求底層機器是跨文件的 ,這意味着機器字的大小必須至少足以容納任何問題的大小。 隨機算法需要randomess的正式定義以及機器如何使用隨機值。 非確定性算法需要一種指定非確定性計算的方法。 基於電路的算法必須知道哪些電路原語是不允許的。 量子計算機需要正式定義什么操作是不允許的,以及算法的定義是什么,輸出是概率性的。 分布式算法需要跨機器的通信的正式定義。

簡而言之,在描述算法時明確說明是什么和不允許的是很重要的。 但是,要成為一名優秀的程序員或掌握算法,您不需要知道圖靈機的內部和外部,也不需要知道如何使用它們編碼特定問題的具體細節。 但是,您應該知道的是計算模型能夠做什么和不能做什么,以及每次操作的成本是多少。 通過這種方式,您可以推斷出算法的有效性,它們使用的各種資源(時間,空間,內存,通信,randomess,非確定性等)的大小。 但是,如果您不了解基礎模型,請不要驚慌。

還有另外一個原因要考慮計算的基礎模型 - 討論它的局限性。 每種計算模型都有其局限性,在某些情況下,您可以證明某些算法對某些問題不可能存在,或者任何解決某些問題的算法必然必須使用一定數量的給定資源。 算法設計中最常見的例子是NP硬度的概念。 一些問題被推測為非常“難以”解決,但這種困難的正式定義依賴於圖靈機和非確定性圖靈機的知識。 在這種情況下理解模型很有用,因為它允許您推斷某些問題的計算可行性。

希望這可以幫助!

暫無
暫無

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

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