數據結構(一)——數據結構簡介

數據結構(一)——數據結構簡介

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

    狄泰學院:https://dt4sw.ke.qq.com/數組

1、數據結構簡介

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

一、邏輯結構

f89ffac0f27a22773b514f8ea03976c3.jpg

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

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

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

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

二、物理結構

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

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

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

497c1003e0320602ddac08bea69c7fff.jpg

2、算法簡介

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

一、算法的特性

    輸入:有0個或多個輸入

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

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

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

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

    正確性:算法對於合法數據可以獲得知足要求的結果,可以處理非法輸入,並獲得合理的結果。

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

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

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

二、算法效率的度量

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

1)、過後統計法

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

缺點:

A、爲了得到不一樣算法的運行處理時間必須編寫相應程序

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

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

2)、事前分析統計

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

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

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

B、問題的輸入規模

C、編譯器產生的代碼

D、計算機的執行速度

算法效率的簡單估算:

2435a8bdaad13bbfc26a186308402464.png

dcedfaf0c818ec1d1a6ddb780e132c5b.png

2e53f2da89f3ea92326636b603ce799d.png

三種求和算法的關鍵部分的操做數量分別爲2nn1。隨着問題規模的增大,操做數量的差別會愈來愈大,效率差別也會愈來愈大。

f019b71c0542dfffe34916c5dafdbae3.png


不一樣算法操做數量的對比

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

1f1f4b220fd610f8d033b5f579c14014.png

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

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

0e2c64f8fc297539b47bd14862b49fe6.png

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

判斷算法的效率時,操做數量中的常數項和其餘次階項經常能夠忽略,只須要關注最高階項。

三、算法的複雜度

1)算法的時間複雜度

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

因爲主要關注算法的效率問題,所以主要討論算法的時間複雜度。

O表示法

算法的效率嚴重依賴於操做(Operations)數量,操做數量的估算能夠做爲時間複雜度的估算,在判斷時首先關注操做數量的最高階項。

O2==>O1

O3n+3==> O3n==>On

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

常見的時間複雜度:

3bad4e0bbb70214203b3f91ee1993a63.png

beba971dd6384780c363bf70deeacc36.png

4dae3d0ab36882f1648ba3bf0a2cafd6.png

64623a88c501b8a4926834f3b1293c7c.png

2)算法的空間複雜度

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

一般使用Sn)表示算法的空間複雜度。使用時間複雜度的推導方法推導空間複雜度。

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

一般狀況下,算法的時間複雜度更受關注。能夠經過增長額外空間下降時間複雜度。

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

四、算法實例

    一個數組中存儲着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)。

相關文章
相關標籤/搜索