1. 程式人生 > >有哪些研究資料結構的好的方法?

有哪些研究資料結構的好的方法?

來源:我是碼農,轉載請保留出處和連結!

本文連結:http://www.54manong.com/?id=17

image.png

研究資料結構是為了編寫程式,編寫程式是為了解決問題。用計算機求解一個現實問題,一般可用以下的問題求解模型加以描述:

現實問題→數學模型→演算法→程式→解

也就是說,首先要從現實問題出發,抽象出一個適當的數學模型,然後設計一個解此數學模型的演算法,最後根據此演算法編出程式,經過測試、排錯、執行直至得到最終的解答。(現實)問題、數學模型、演算法和程式是問題求解過程中出現的四個不同的概念。

問題(problem):從直覺上講,問題無非是一個需要完成的任務,即對應一組輸入有一組相應的輸出。在問題的定義中不應包含有關怎樣解決該問題的限制。只有在問題被準確定義並完全理解後才有可能研究問題的解決方法。然而在問題的定義中應該包含對所有解決方案所需要的資源(比如說,計算機的主儲存器和磁碟空間以及執行時間)的限制。

數學模型(mathematical model):問題的數學模型是指用數學的方法精確地把問題描述成函式。

函式(function):是輸入(即定義域)和輸出(即值域)之間的一種對映關係。函式的輸入是一個值或一些資訊,這些值組成的輸入稱為函式的引數。不同的輸入可以產生不同的輸出,但對於給定的輸入,每次計算函式時得到的輸出必須相同。

演算法(algorithm):是指解決某個問題(其數學模型)的一種方法(將給出演算法的更詳細的定義)。如果將問題抽象為數學模型,那麼它僅是精確地定義了輸入和輸出的對映關係,而演算法則能把輸入轉換為輸出。一個問題可以有多種演算法。

一個演算法如果能在所要求的資源限制內將問題解決好,則稱這個演算法是有效率的。一個演算法如果比其他已知演算法需要更少的資源,則稱這個演算法是更有效率的。

程式(program):一個計算機程式被認為是對一個演算法使用某種程式設計語言的具體實現。由於使用任何一種現代計算機程式設計語言都可以實現任何一個演算法,所以可能有許多程式都是同一個演算法的實現。雖然演算法是獨立於程式的,但因為最終的目標是問題求解,所以在定義演算法時,必須提供足夠多的細節,以便必要時轉換為程式。在本書中我們經常直接提供C(或用C++的一個子集編寫的)程式作為演算法的描述。

在問題求解模型中關鍵的一步是建立數學模型,而尋找(或者說將問題抽象成)數學模型的實質是分析問題,從中提取出要進行處理的物件,並找出這些物件之間內在的相互關係,然後用數學語言加以描述。

被處理物件在計算機中的表示就是資料,資料結構實際上就是一種數學模型。選擇正確的恰當的資料結構對問題的求解是至關重要的。