01.資料結構概念與演算法基礎,01資料結構

來源:互聯網
上載者:User

01.資料結構概念與演算法基礎,01資料結構
資料結構概念與演算法基礎一、資料結構概念1.資料:是描述客觀事務的符號,是電腦中可以操作的對象,是能被電腦識別,並輸入給電腦處理的符號集合。資料不僅僅包括整型、實型等數值類型,還包括字元及聲音、映像、視頻等非數值類型。2.資料元素:是組成資料的、有一定意義的基本單位,在電腦中通常作為整體處理,也被成為記錄。比如畜類中,牛、馬、羊都屬於資料元素。3.資料項目:一個資料元素可以由若干個資料項目組成,資料項目是資料不可分割的最小單位。比如人這樣的資料元素,可以有眼、耳、鼻等資料項目。4.資料對象:是性質相同的資料元素的集合,是資料的子集。所謂性質相同,是指資料元素具有相同數量和類型的資料項目。比如人都有姓名、生日、性別等相同的資料項目。從某種意義上來說,資料對象也稱之為資料(資料對象是資料的子集)。5.資料結構:不同資料元素之間不是獨立的,二是存在特定的關係,這些關係可被稱之為結構。所謂資料結構,即指是相互之間存在一種或多種特定關係的資料元素的集合-----資料的組織形式。6.邏輯結構與物理結構(1)邏輯結構:是指資料對象中資料元素之間的相互關係。邏輯結構是針對具體問題的,是為瞭解決某個問題,在對問題的理解的基礎上,選擇一個合適的資料結構表示資料元素之間的邏輯關係。   a.集合結構:集合結構中的資料元素除了同屬於一個集合外,它們之間沒有其他關係    b.線性結構:線性結構中的資料元素之間是一對一的關係。    c.樹形結構:樹形結構中的資料元素之間存在一種一對多的層次關係。     d.圖形結構:圖形結構的資料元素是多對多的關係。 注釋:我們在用表示資料的邏輯結構時,需注意的是將每一資料元素看作一個結點(用圓圈表示);元素之間的邏輯關係用結點之間的連線表示。(2)物理結構:是指資料的邏輯結構在電腦中的儲存形式,即實際上就是如何把資料元素儲存到電腦的儲存空間(記憶體)中,資料的儲存結構反映資料元素之間的關係。    a.順序儲存結構:是把資料元素存放在地址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的。     b.鏈式儲存結構:是把資料元素存放在任意的儲存單元裡,這組儲存單元可以是連續的,也可以是不連續的。資料元素的儲存關係並不能反映其邏輯關係,因此需要用一個指標存放資料元素的地址,這樣通過地址就可以找到相關聯資料元素的位置。總結:邏輯結構是面向問題的。而物理結構是面向電腦的,其基本的目標就是將資料及邏輯關係儲存到電腦的記憶體中。7.資料類型與抽象資料類型(1)資料類型:是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱。(2)抽象資料類型(ADT):是指一個資料模型及定義在該模型上的一組操作。"抽象"的意義在與資料類型的數學抽象特性,一個抽象資料類型定義了:一個資料對象,資料對象中各資料元素之間的關係及資料元素的操作。總之,抽象資料類型體現了程式設計中問題分解、抽象和資訊隱藏的特徵。抽象資料類型把實際生活中的問題分解為多個規模很小且容易處理的問題,然後建立一個電腦能處理的數學模型。並把每個功能模組的時間細節作為一個獨立的單元,從而使具體實現過程隱藏起來。 描述抽象資料類型的標準格式:

    ADT 抽象資料類型名    Data        資料元素之間邏輯關係的定義    Operation        操作1            初始條件            操作結果描述        操作2            ....        操作n            ....    endADT   二、演算法基礎 1.什麼是演算法?    演算法是解決特定問題求解步驟的描述,在電腦中表現為指令的有限序列,並且每條指令表示i一個或多個操作。具體的說,為瞭解決某個或某類問題,需要把指令表示成一定的操作序列,操作序列包括一組操作,每個操作都完成特定的功能,這就是演算法了。 2.演算法有哪些特性?(1)輸入輸出:演算法具有零個或多個輸入;至少有一個或多個輸出。(2)有窮性:指演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每一個步驟在可以接受的時間內完成。(3)確定性:演算法的每一步驟都具有確定的含義,不會出現二義性。(4)可行性:演算法的每一步都必須是可行的 3.演算法的設計要求有哪些?(1)正確性(2)可讀性(3)健壯性:指當輸入資料不合法時,演算法也能作出相關處理,而不是產生異常或莫名奇妙的結果(4)時間效率高和儲存量低 4.演算法效率的度量方法(1)事後統計方法:這種方法主要是通過設計好測試程式的資料,利用電腦計時器對不同演算法編製的程式的已耗用時間進行比較。(2)事前分析估算方法:一個用進階程式編寫的程式在電腦上啟動並執行所消耗的時間取決於:演算法採用的策略和方法(演算法好壞的根本);編譯產生的代碼品質(軟體環境決定);問題的輸入規模;機器指令執行的速度(硬體決定)。    注意:測定已耗用時間最可靠的方法就是計算對已耗用時間有消耗的基本操作的執行次數,已耗用時間與這個計數成正比。          某個演算法,隨著n的增大,它會越來越優於另一演算法,或者越來越差於另一演算法。 三、演算法時間複雜度 1.定義:在進行演算法分析時,語句的執行次數T(n)是關於問題規模n的函數,進而分析T(n)隨n的變化情況並確定T(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:T(n)=O(f(n))---它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函數。     其中,O()來體現演算法時間複雜度的記法(大O記法)。一般情況下,隨著n的增大,T(n)增長最慢的演算法為最優演算法。 2.推到大O階方法:分析一個演算法的時間複雜度,其原則具體表現如下:
原則一:用常數1取代已耗用時間中的所有加法常數-------------------舉例:f(n)=3,則根據大O階方法時間複雜度為O(1)原則二:在修改後的運行次數函數中,只保留最高階項--------------舉例:f(n)=3n+1原則三:如果最高階項存在且不是1,則去除與這個相乘的常數。-----舉例:---------則根據大O階方法時間複雜度為O(n)0
3.常見時間複雜度:根據程式語句執行的次數,可以求得演算法的時間複雜度(1)常數階源碼:int sum=0,n=100;    /*執行一次*/      sum=(1+n)*n/2;      /*執行一次*/      printf("%d",sum);   /*執行一次*/程式執行次數為3次,根據原則一可知,時間複雜度為O(1)。(2)線性階源碼:    int i;    for(i=0;i<n;<i++)    {        ..../*時間複雜度為O(1)的程式步驟序列*/    }
程式的執行次數為(n+a),其中a為常數。根據原則二、三可知,演算法的時間複雜度為O(n)。要確定某個演算法的階次,我們常常需要確定某個特定語句或某個語句集啟動並執行次數。因此,我們要分析演算法的複雜度,關鍵就是要分析迴圈結構的運行情況。(3)對數階源碼:int count=1;      while(count<n)      {            count=count*2;            ..../*時間複雜度為O(1)的程式步驟序列*/       }    由於每次count乘以2之後,就距離n更近一份,也就是說有多少個2相乘就後大於n,則會退出迴圈。由2^x<n得x<log2^n,程式的執行次數為log2^n=log(2*2*2*2*...*n)。根據原則二、三得演算法的時間複雜度為O(logn).(4)平方階源碼1:    int i、j;    for(i=0;i<m;i++)    {        for(j=0;j<n;j++);        {            ..../*時間複雜度為O(1)的程式步驟序列*/        }    }    程式語句執行的次數為f(n)=m*n+1+a,其中a為常數。根據大O階方法可知,演算法的時間複雜度為O(m*n).源碼2:    int i,j;    for(i=0;i<n;i++)    {        for(j=i;j<n;j++)        {            /*時間複雜度為O(1)的程式步驟序列*/        }    }分析當i=0時,內迴圈執行n次;當i=1時,執行了n-1次;....當i=n-1時,執行了1次。所以,程式語句執行的次數為f(n)=n+(n-1)+(n-2)+...+1=n(n+1)/2=n^2/2+n/2+a,其中a為常數。根據大O階方法可知,演算法的時間複雜度為O(n^2)。

4.最壞情況和平均情況(1)最壞情況:最壞情況已耗用時間是一種保證,那就是已耗用時間將不會再壞了。在應用中,這是一種最重要的需求。通常,除非特別指定,我們提到的已耗用時間都是最壞情況的已耗用時間。 (2)平均情況:平均已耗用時間是所有情況中最有意義的,因為他是期望的已耗用時間。 四、演算法空間複雜度
    演算法的控制項複雜度通過計算演算法所需的儲存空間實現,演算法控制項複雜度的計算公式記作:S(n)=O(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存控制項的函數。"時間複雜度"指已耗用時間的需求,"空間複雜度"指空間需求。總之,演算法的優劣直接決定了程式啟動並執行效率。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.