數據結構和算法開篇

若是說,熟練掌握編程語言是外功,那麼數據結構可謂是內功心法了算法

如下是我學習數據結構的總結和一些筆記編程

數據結構(Data Structure)

  • 抽象數據類型(ADT)的物理實現數據結構

  • 「數據結構」是計算機中存儲,組織數據的方式。編程語言

  • 「數據結構是數據對象」以及存在於該對象的實例和組成實例的數據元素之間的各類聯繫函數

  • 解決問題方法的效率跟數據的組織方式空間的利用效率算法的巧妙程度有關學習

例子1:spa

void PrintN( int N )
{
    int i;
    for( i=1 ; i<N ; i++)
    printf("%d\n",i);
    return;
}
void PrintN( int N )
{
    if( N )
    {
        PrintN(N-1);
        printf("%d\n",N);
    } 
    return;
}

這個程序前一個用了循環實現打印1-N,後面一個採用遞歸的方法實現的,很明顯遞歸的效率很低,是由於,遞歸實現原理是以堆棧的方式,也就是說函數把 PrintN(N) 到PrintN(1)這N個函數壓入棧中,在依次打印出來,內存消耗巨大。
圖示:
clipboard.png3d

例子2:code

計算 clipboard.png對象

double f(int n , double a[], double x)
{
    int i;
    double p = a[0];
    for( i=1 ; i<=n ; i++)
        p+= ( a[i] * pow( x , i ));
    return p;
}
double f(int n , double a[], double x)
{
    int i;
    double p = a[0];
    for( i=n ; i>0 ; i--)
        p= a[i-1] +x*p;
    return p;
}

在計算機中,有屢次乘法與加法的運算時,通常按照權重,只需比較乘法次數就能夠了,第一個算法每一次循環執行了i+1次乘法,一共執行了(N^2+3*N)/2次,第二種算法執行了N次乘法,顯然第二種效率高,這就是算法的妙用

其實數據結構是由一些基本數據類型組合成了一個複雜的數據類型,用於解決某一類問題(基本問題有數據的增長,刪除,條件查詢,遍歷等)

總結:到底什麼是數據結構?

  • 數據對象在計算機中的組織方式

    1. 邏輯結構

    2. 物理存儲結構

  • 數據對象一定與一系列加在其上的操做相關聯

  • 完成這些操做所用的方法就是算法

抽象數據類型(Abstract Data Type)

  • 數據類型

    1. 數據對象集

    2. 數據集合相關聯的操做集

  • 抽象:描述數據類型的方法不依賴於具體實現

    1. 與存放的機器無關

    2. 與數據存儲的物理結構無關

    3. 與實現操做的算法和編程語言無關

算法

什麼是算法?

  • 一個有限指令集

  • 接受一些輸入(有些時候不須要輸入)

  • 產生輸出

  • 必定在有限步驟以後終止

  • 每一條指令必須

時間複雜度Tn

根據算法寫成的程序在執行時佔用存儲單源的長度

空間複雜度Sn

根據算法寫成的程序在執行時好費時間的長度

牛刀小試

用算法實現 求一個數列的最大子列和

clipboard.png

給出下列四個算法:

clipboard.png

clipboard.png

clipboard.png

clipboard.png

算法三能夠嘗試寫一下。以上資料來源於 MOOC 《數據結構》

相關文章
相關標籤/搜索