數據結構--緒論習題


  • 數據項 是數據的最小單位,數據元素 是數據的基本單位
  • 在規定時間內完成 不是算法的基本特新
  • 計算機所處理的數據一般具備某種內在聯系,這是指 元素和元素之間存在的某種關系
  • 一個算法具有 正確性,可讀性,健壯性,效率與存儲量需求
  • 數據的邏輯結構是指 數據元素之間邏輯關系 的整體
  • 算法的時間復雜度與 問題規模 有關
  • 某算法的時間復雜度 O(n2),表明該算法的 問題規模與n2成正比
  • 在數據的存儲結構中,一個結點通常存儲一個 數據元素
  • 數據采用鏈式存儲結構時,要求 每個結點占用一片連續的存儲區域

 

  • 數據的邏輯結構是指數據元素之間 邏輯關系 的整體
  • 數據結構通常分為以下4類基本結構:集合、線性結構、樹形結構和網狀結構
  • 順序存儲映像和非順序存儲印象,得到兩種不同的存儲結構:線性存儲結構和鏈式存儲結構
  • 在線性結構中,第一個結點 沒有 前驅結點,其余每個結點有且只有
  • 前驅結點;終端結點沒有后繼結點,其余每個結點的后繼結點可以有 多個
  • 在圖狀結構中,每個結點的前驅結點數和后繼結點數可以有 多個
  • 一個算法具有5個特性:有窮性,確定性,可行性,輸入和輸出
  • 算法中的每條指令都必須有確切的含義,不能具有二義性,表現算法特性中的 確定性
  • 數據在計算機的存儲器中表示時,邏輯上相鄰的兩個數據元素對應的物理地址也是相鄰的,這種存儲結構稱之為 順序存儲結構
  • 算法分析的目的是找出數據結構的合理性,算法分析的兩個主要方面是空間復雜度和時間復雜度
  • 數據對象就是一組任意數據元素的集合(×)數據對象是具有相同性質的數據元素的集合
  • 數據對象是由有限個類型相同的數據元素構成的(√)
  • 數據的邏輯結構與各數據元素在計算機中如何存儲有關(×)
  • 邏輯結構不相同的數據,必須采用不同類型的存儲方式(×)
  • 數據的邏輯結構是指數據的各數據項之間的邏輯關系(√)
  • 算法的優劣與算法描述語言無關,但與所用的計算機有關(×)
  • 程序一定是算法(×)
  • 算法最終必須由計算機實現(×)
  • 健壯的算法不會因為非法輸入數據而出現莫名其妙的狀態(√)

分析以下算法的時間復雜度

void func(int n){
    int i, k = 110;
    while(i <= n){
        k++;
        i += 2;
    }  
}

O(n)

void fun(int n){
    int i = 1;
    while(i <= n){
        i = i*3;
    }
}

O(log3(n))

void fun(int n){
    int i, j, k;
    for(i = 1; i <= n; i++){
        for(j = 1; j < = n; j++){
            k = 1;
            while(k <= n){
                k = 5*k;
            }
        }
    }
}

O(n2log5(n))

void func(int n){
    int i, j, k  = 0;
    for(i = 1;i < n; i++){
        for(j = i + 1; j <= n; j++){
             k++;
        }
    }
}

O(n2)

void fun(int n){
    int s = 0, i, j, k;
    for(i = 0; i <= n; i++){
        for(j = 0; j <= i; j++){
            for(k = 0; k < j; k++){
                s++;
            }
        }
    }      
}

O(n3)

void func(int n){
    int i = 0, s = 0;
    while(s <= n){
        i++;
        s = s + 1;
    }
}

O(n)

設n是偶數,試計算運行下列程序段后m的值,並給出該程序段的時間復雜度

int m = 0, i, j;
for(i = 1; i <= n; i++){
    for(j = 2*i; j <= n; j++){
         m++;
    }
}

O(n2)

int fact(int a[], int n, int x){
    int i = 0;
    while(i < n){
        if(a[i] == x){
            return i;
        }
        i++;
    }
    return -1;
}

O(n)

設計一個算法求解Hanoi問題:有3根柱子a、b、c,有n個半徑不同的中間有孔的圓盤,這n個圓盤在柱子a上,從上往下半徑一次增大

要求把所有圓盤移至目標盤c上,可將柱子b作為輔助柱,移動圓盤時必須服從以下規則:

  • 每次只可搬動一個圓盤
  • 任何柱子上都不允許大圓盤在小圓盤上面

分析算法時間復雜度

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM