數據結構與算法(一)基礎概念

基礎概念

數據結構討論的範疇,算法、數據結構概念,算法和算法的度量

算法討論的範疇

算法:處理問題的策略。

數據結構:問題的數學模型(非數值計算)及其上的操作在計算機中的表示和實現。數值計算使用計算數學。

數據結構

算法:處理問題的策略。

數據結構:帶結構的數據元素的集合。

數據

可輸入到計算機中且被計算機處理的符號集合。

數據元素

數據中的一個個體,數據結構中討論的基本單位。

數據項

數據結構中討論的最小單位。數據元素是數據項的集合。

數據的邏輯結構

線性結構、樹形結構、圖狀結構、集合結構

數據結構形式定義

數據結構=(D,S),D是數據元素的有限集,S是D上關係的有限集。

數據的存儲結構

邏輯結構在存儲器中的映像。

數據元素的映像方法

bit串。

關係的映像方法

順序映像:以存儲位置的相鄰(或者一個固定間隔),表示後繼關係。整個存儲結構中只包含數據元素本身的信息。

鏈式映像:存儲位置不確定,以附件信息(指針)表示後繼關係。

數據類型

是一個值的集合和定義在此集合上一組操作的總稱,也可以稱爲數據結構。

抽象數據類型(ADT)

一個數學模型以及定義在這個數學模型上的一組操作。

特點

數據抽象

強調實體的本質特徵、所能完成的功能及與外部用戶的接口(外界使用它的方法)。

數據封裝

將實體外部特性與內部實現分離,並對外部用戶隱藏內部實現細節。

描述方法

(D,S,P),D是數據對象,S是D上的關係集,P是對D的基本操作。

算法和算法的度量

算法

解決某種問題而確定的一個有限長的操作序列。

特徵

有窮性:對於任意一組合法的輸入值,在執行有窮步驟後,一定能結束。即每個步驟都可以在有限時間內完成。

確定性:對於每種情況下所應執行的操作,在算法中都有確切規定,使算法的執行者或者閱讀者都能明確其含義及如何執行。並且在任何條件下,算法都只有一條執行路徑。

可行性:算法中所有步驟必須足夠基本,都可以通過已實現的基本操作運算有限次實現。

有輸入:算法加工的對象,可以在算法執行過程中輸入,也可以隱含在算法中。

有輸出:是一組與“輸入”有確定關係的量值,是算法進行信息加工後的結果,這種確定關係爲算法的功能。

算法設計原則

正確性
  • 首先,算法應滿足以特定的“規格說明”方式給出的需求。,其次對算法是否“正確”的理解有以下四個層次,通常以c作爲衡量算法合格的標準。

  • a.程序中不含有語法錯誤。

  • b.程序對於幾組輸入能夠得出滿足要求的結果。

  • c.對於精心選擇的、典型、苛刻且帶有刁難性的幾組輸入數據,能夠得出滿足要求的結果。

  • d.對於一切合法的輸入都能得出滿足需求的結果。

可讀性

便於理解和調試。

健壯性

當輸入數據非法時,算法應作出恰當反映或進行相應處理,而不是產生莫名其妙的結果。並且,處理“出錯”的方法不應是中斷程序,而是返回一個表示錯誤或錯誤性質的結果,以便高層調用處理。

高效率與低存儲需求

效率指算法的執行時間,存儲需求指執行過程中所需最大存儲空間,兩者與問題規模有關。

算法效率的衡量和準則

事後統計

缺點:1-必須執行程序。2-其他因素掩蓋算法本質。

事前分析估算
時間相關因素

1-算法選用的策略

2-問題的規模

3-編寫程序的語言

4-編譯的機器代碼的質量

5-計算機執行指令的速度

算法執行時間增長率和f(n)增長率相同(n-工作量)。

T(n)=O(f(n)),T(n)爲算法的時間漸進複雜度。

算法=控制結構+原操作(固有數據類型的操作)。

算法的執行時間=Σ原操作的執行次數*原操作的執行時間。算法的執行時間與原操作執行次數之和成正比。

算法的空間複雜度,S(n)=O(g(n)),隨着問題規模增大,算法運行所需存儲的增長率與g(n)相同。

輸入數據所佔空間。

程序本身所佔空間。

輔助變量所佔空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章