1. 程式人生 > >數據結構與算法解析(一)——數據結構與算法簡介

數據結構與算法解析(一)——數據結構與算法簡介

數據結構

數據結構與算法解析(一)——數據結構與算法簡介

本系列博客為學習狄泰學院《數據結構實戰開發教程》筆記並根據網絡資料總結而來。

一、數據結構簡介

數據結構是相互間存在特定關系的數據的集合,分為邏輯結構和物理結構。

1、邏輯結構

技術分享

集合結構:數據元素之間沒有特別的關系,僅同屬相同集合。

線性結構:數據元素間是一對一的關系

樹形結構:數據元素間存在一對多的層次關系

圖形結構:數據元素之間是多對多的關系

2、物理結構

物理結構是邏輯結構在計算機中存儲形式,分為順序存儲結構和鏈式存儲結構。

順序存儲結構將數據存儲在地址連續的存儲單元裏。

鏈式存儲結構將數據存儲在任意的存儲單元裏,通過保存地址的方式找到相關聯的數據元素。

技術分享

二、算法簡介

算法是特定問題求解步驟的描述,是獨立存在的一種解決問題的方法和思想。

1、算法的特性

輸入:有0個或多個輸入

輸出:至少有1個或多個輸出

有窮性:算法在有限的步驟後應該自動結束而不會無限循環。

確定性:算法中的每個步驟都有確定的含義,不會出現二義性

可行性:算法的每一步都是可行的

正確性:算法對於合法數據能夠得到滿足要求的結果,能夠處理非法輸入,並得到合理的結果。

可讀性:算法要便於閱讀、理解和交流

健壯性:算法不應該得到莫名其妙的結果

性價比:利用最少的資源得到滿足要求的結果

2、算法效率的度量

效率評估是工程中算法最重要的附加特性。

1)、事後統計法

比較不同算法對同一組輸入數據的運行處理時間。

缺點:

A、為了獲得不同算法的運行處理時間必須編寫相應程序

B、運行處理時間嚴重依賴硬件以及運行時環境

C、算法的測試數據選取困難

2)、事前分析統計

依據統計的方法對算法效率進行評估

影響算法效率的主要因素:

A、算法采用的策略和方法

B、問題的輸入規模

C、編譯器產生的代碼

D、計算機的執行速度

算法效率的簡單估算:

技術分享

技術分享

技術分享

三種求和算法的關鍵部分的操作數量分別為2nn1。隨著問題規模的增大,操作數量的差異會越來越大,效率差異也會越來越大。

技術分享

不同算法操作數量的對比

算法操作數量對比的實例一:

技術分享

n<=3時,算法B優於算法A。隨著n的規模增大,算法A優勢比較明顯。

算法操作數量對比的實例二:

技術分享

n=1時,算法C與算法D效率相同。隨著n規模的增大,算法C優勢明顯優於算法D

判斷算法的效率時,操作數量中的常數項和其他次階項常常可以忽略,只需要關註最高階項。

3、算法的復雜度

1)算法的時間復雜度

算法時間復雜度是算法運行後對時間需求量的定性描述。

由於主要關註算法的效率問題,因此主要討論算法的時間復雜度。

O表示法

算法的效率嚴重依賴於操作(Operations)數量,操作數量的估算可以作為時間復雜度的估算,在判斷時首先關註操作數量的最高階項。

O2==>O1

O3n+3==> O3n==>On

O3n^2+n+4==>On^2

常見的時間復雜度:

技術分享

技術分享

技術分享

技術分享

2)算法的空間復雜度

算法空間復雜度是算法運行後對空間需求量的定性描述。

通常使用Sn)表示算法的空間復雜度。使用時間復雜度的推導方法推導空間復雜度。

當算法所需的內存空間大小為常數時,算法的空間復雜度為S1)。

通常情況下,算法的時間復雜度更受關註。可以通過增加額外空間降低時間復雜度。

算法是解決具體問題的步驟,數據結構是算法解決問題的載體。

4、算法實例

一個數組中存儲著1——1000的數字,每個數字可能出現多次或者不出現,找出出現次數最多的數字。

void search(int array[], int len)

{

//總計可能出現1000種可能值

int sp[1000] = {0};

int max = 0;

for(int i = 0; i < len; i++)

{

//遍歷數組,數組中某個數組出現一次增加統計1

sp[array[i] - 1]++;

}

for(int i = 0; i < 1000; i++)

{

if(max < sp[i])

{

max = sp[i];

}

}

for(int i = 0; i< 1000; i++)

{

if(max == sp[i])

{

cout << "Number:" << i + 1 << endl;

cout << "Count:" << max << endl;

}

}

}

使用空間換時間,算法的時間效率為On)。

本文出自 “生命不息,奮鬥不止” 博客,謝絕轉載!

數據結構與算法解析(一)——數據結構與算法簡介