- 數據項 是數據的最小單位,數據元素 是數據的基本單位
- 在規定時間內完成 不是算法的基本特新
- 計算機所處理的數據一般具備某種內在聯系,這是指 元素和元素之間存在的某種關系
- 一個算法具有 正確性,可讀性,健壯性,效率與存儲量需求
- 數據的邏輯結構是指 數據元素之間邏輯關系 的整體
- 算法的時間復雜度與 問題規模 有關
- 某算法的時間復雜度 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作為輔助柱,移動圓盤時必須服從以下規則:
- 每次只可搬動一個圓盤
- 任何柱子上都不允許大圓盤在小圓盤上面
分析算法時間復雜度