讀一本書以前,先讀它的目錄,瞭解整本書的結構。算法
第1章 緒論:緒,絲端也。――《說文》。也就是指一篇文章的開端。編程
1.1 什麼是數據結構 :數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。一般狀況下,精心選擇的數據結構能夠帶來更高的運行或者存儲效率。數據結構每每同高效的檢索算法和索引技術有關。數據結構
1.2 基本概念和術語 :這一節是講基本概念和術語。編程語言
1.3 抽象數據類型的表示與實現:抽象數據類型(Abstract Data Type 簡稱ADT)是指一個數學模型以及定義在此數學模型上的一組操做。抽象數據類型須要經過固有數據類型(高級編程語言中已實現的數據類型)來實現。抽象數據類型是與表示無關的數據類型,是一個數據模型及定義在該模型上的一組運算。對一個抽象數據類型進行定義時,必須給出它的名字及各運算的運算符名,即函數名,而且規定這些函數的參數性質。一旦定義了一個抽象數據類型及具體實現,程序設計中就能夠像使用基本數據類型那樣,十分方便地使用抽象數據類型。函數
1.4 算法和算法分析:算法是對特定問題求解步驟的一種描述,它規定了解決問題的運算序列。算法分析是對一個算法須要多少計算時間和存儲空間做定量的分析。 算法(Algorithm)是解題的步驟,能夠把算法定義成解一肯定類問題的任意一種特殊的方法。在計算機科學中,算法要用計算機算法語言描述,算法表明用計算機解一類問題的精確、有效的方法。算法+數據結構=程序,求解一個給定的可計算或可解的問題,不一樣的人能夠編寫出不一樣的程序,來解決同一個問題,這裏存在兩個問題:一是與計算方法密切相關的算法問題;二是程序設計的技術問題。算法和程序之間存在密切的關係。分析算法能夠預測這一算法適合在什麼樣的環境中有效地運行,對解決同一問題的不一樣算法的有效性做出比較。測試
1.4.1算法優化
1.4.2算法設計的要求:spa
一個優秀的算法應該具有的設計要求主要有如下幾點:
設計
算法的正確性是指算法至少具備輸入,輸出和加工處理無歧義,而且能夠正確反映問題的需求,以及正確獲得問題的答案。
關於「正確」的理解一共有四個層次:
調試
第四點比較難,由於咱們幾乎不可能對全部的狀況都逐一進行驗證,因此,通常來講,可以知足前3條就是一個正確性比較好的算法了。
算法設計的另外一個目的是爲了便於閱讀,理解和溝通,若是寫的代碼只有你和上帝能看懂,那這個算法只能說明很失敗,由於算法越難理解,就越難找到他的bug,對於調試和修改就更難了
當輸入的數據不合法的時候,算法也能給出相關的處理,而不是產生異常或者莫名起碼的錯誤。
1.4.3算法效率的度量:算法執行時間需經過依據該算法編制的程序在計算機上運行時所消耗的時間來度量。而度量一個程序的執行時間一般有兩種方法。(1)過後統計的方法。(2)事前分析估算的方法。因過後統計方法更多的依賴於計算機的硬件、軟件等環境因素,有時容易掩蓋算法自己的優劣。所以人們經常採用事前分析估算的方法。
1.4.4 算法的存儲空間需求:
相似於算法的時間複雜度,空間複雜度能夠做爲算法所需存儲空間的量度。
記做:
S(n)=O(f(n))
若額外空間相對於輸入數據量來講是常數,則稱此算法爲原地工做。
若是所佔空間量依賴於特定的輸入,則除特別指明外,均按最壞狀況來分析。