數據結構算法的描述和分析

數據結構概論

高級語言程序設計在解決某一實際問題的一般步驟是:分析實際問題、確定數學模型、設計或選擇一個求解此數學模型的算法、編寫程序進行調試和測試解決問題等幾個步驟。

例1:已知:游泳池的長length和寬winde,求面積area。

問題設計的對象有:游泳池的長length和寬wide,面積area;對象之間的關係(數學模型):A=L*W;

程序:

Main()

{

int len,wide,area;

Scanf(“%d%d%\n”,&l,&w);

Area=len*winde;

Printf(“area=%d”,area);

}

 

解決游泳池面積或其他複雜的現實問題時,關鍵的不再是數學分析和計算方法,而是要設計出合適的數據結構,才能更有效有的解決生活的現實問題,著名的瑞士科學家沃思提出:程序設計=數據結構+算法      

簡單來說,數據結構是研究非數值的程序設計問題中計算機的操作對象以及它們之間的關係和操作的學科。

具體來說,數據結構指的是數據之間的結構關係如何表示,如何存儲,如何處理現實轉化問題,即按某種關係組織起來的一組數據,再按一定的方式把它們存儲在計算機的存儲器中,並在這些數據上定義的一個運算的集合,稱之爲數據結構。

基本概念和常用的術語

數據:是客觀事物的符號表示,在計算機科學中指所有能輸入到計算機並能被計算機程序進行處理的符號總稱。

數據元素:是數據的基本單位。在計算機程序中通常作爲一個整體考慮和處理。

數據項:一個數據元素通常由若干個數據項組成,數據項是不可分割的最小單位。

數據對象:是具有相同性質的數據元素的集合。

數據結構是帶有結構和操作的數據元素的集合。一般包含三個方面的內容。

  • 數據的邏輯結構

在任何問題中,數據元素都不是孤立存在的,而是在它們之間存在着某種關係,這種數據元素相互之間的關係存在某種關係,這種數據元素是相互之間的關係稱之爲數據的邏輯結構。根據數據元素之間關係的不同特性,通常有下列四種基本結構形式。

(1)集合:結構中的數據元素之間除了“同屬於一個集合”的關係外,別無其他關係,元素之間爲鬆散關係。

(2)線性結構:結構中的數據元素存在一對一的關係,除第一個和最後一個元素外,其他每個元素都有且僅有一個直接前驅和一個直接後繼。

(3)樹形結構:數據元素之間存在一對多的關係。一個數據元素可以與一個或多個元素存在關係,而且具有層次之分,其結構形式如倒立的生長的樹。

(4)圖狀結構或網狀結構:數據元素之間存在多對多的關係,不存在層次關係。在這種關係中,數據元素之間不受任何限制。

以上描述的4種關係是數據元素之間的邏輯關係,又稱之爲邏輯結構。

  • 數據的存儲結構

討論數據邏輯結構的目的是爲了在計算機中實現對它的操作,因此還要研究如何在計算機中表示它。

數據元素在計算機中的存儲(表示)方式稱之爲數據的物理結構,又稱存儲結構。它包含數據元素及數據元素之間關係的存儲。是依賴於計算機語言的。

在計算機內,數據的存儲結構可以用一下四種基本存儲方法實現

(1)順序存儲結構:是將邏輯上相鄰的元素節點存儲在物理位置上也相鄰的存儲單元中,元素之間的邏輯關係由存儲單元的鄰接關係表示。由此得到的存儲結構也稱之爲順序結構。該結構通常用數組來實現。

(2)鏈式存儲結構:不要求邏輯上相鄰的元素(節點)在物理位置上也相鄰,而是在結點中藉助指針域與該結點邏輯上相鄰元素在內存中的地址來實現結點間的邏輯關係。由此得到的存儲結構稱爲鏈式存儲結構。及藉助於引用或指針來表示數據元素之間的邏輯關係,被存放的元素被隨機的存放在內存中再用指針將它們鏈接在一起。

(3)索引存儲結構:在存儲元素信息的同時,還建立附加的索引表。

(4)散列存儲結構:根據元素的關鍵字直接計算出該元素的存儲地址。

三、數據的運算

數據的運算,即對數據元素施加的操作,是定義在數據的邏輯結構上的,每種邏輯結構都有一個運算的集合。

數據的運算地數據結構不可分割的一個方面,在給定了數據的邏輯結構和存儲結構之後,按照定義的運算集合及運算性質的不同,可能導致完全不同的數據結構。

另外,同一種邏輯結構,可以採用不同的存儲結構。選擇何種存儲結構來表示相應的邏輯結構,要根據具體問題具體分析,主要考慮的還是數據運算方便及算法的時間和空間上的要求。

算法的描述與分析

算法描述

算法:是對問題求解步驟的一種描述,是指令的有限序列。其中每條指令表示一個或多個操作。一個算法應具備以下5個特性:

有限性:算法必須在有限的步驟之後結束

確定性:算法的每一步都是確切的含義,無二義性。即在任何條件下,算法只有唯一的一條執行路徑,即對於相同的輸入只能得出相同的輸出

輸入:一個算法可以接受零個或多個輸入

輸出:一個算法至少有一個或多個輸出

可行性:算法中的每一步都可以通過已經實現的基本運算的有限次運行來實現

算法分析

求解一個問題可能有多種不同的算法,而算法的好壞直接影響程序的執行效率,且不同算法之間的運行效率相差巨大。

設計一個“好”得算法應考慮達到算法應達到的四個目標:正確性、可讀性、健壯性高效率與低存儲量需求

一個算法的評價可以從算法執行的時間與算法的所佔用的內存空間兩個方面來進行。

算法的時間複雜度(time completexity)又稱爲計算複雜度,是算法有效性的度量之一。

在解決實際問題的過程中不管是簡單或複雜的算法,都必須是經過對應着一定的基本操作的次數。顯然,如果一個算法中,運行基本操作的次數越少,那麼它運行的時間也就相對越少,反之,如果次數越多,其運行的時間也就相對越多。所以,通常用它來衡量一個算法的運行時間性能或稱之爲計算性能。

算法的空間複雜度(space completexity)是對一個算法在運行時佔用存儲空間大小的度量,也是衡量算法的有效性的一個重要的因素。因此,在分析一種算法的性能,不但需要分析算法的運行時間,還要分析算法所採用的的數據結構所佔的空間。

存儲空間包括內存和外存,一般用字節作爲空間的基本度量單位,問題的規模(或大小)爲n,算法所需空間的空間單元數s一般是問題規模n的函數f(n)記作:S(n)=O(F(n))

 

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