解決特定問題求解步驟的描述。在計算機中表現為指令的有限序列,每條指令可表示乙個或多個操作。
此外,乙個演算法還具有下列5個特性:有窮性,確定性,可行性,輸入,輸出。
演算法設計的要求:正確性,可讀性,健壯性,效率與低儲存量需求。
what?時間複雜度和空間複雜度
why?可以用度量演算法的好與壞
how?控制變化因素,估算n趨於無窮的複雜度
時間複雜度實際上就是乙個計算執行基本操作次數的函式,不受外界影響。
方法:大o漸進表示法:乙個演算法語句總的執行次數是關於問題規模n的某個函式,記為f(n),n稱為問題的規模。語句總的執行次數為t(n),當n不斷變化時,t(n)也在變化,演算法執行次數的增長速率和f(n)的增長速率相同。則有t(n)=o(f(n)),稱o(f(n))為時間複雜度的o漸進表示法。
常見的時間複雜度:
void test(int n)
} for (int k = 0; k < 2 * n; k++)
int count = 10;//(1次)
while (count--)//(10次) }
//語句總執行次數:f(n)=n*n+2*n+10
//則時間複雜度估算為:o(n*n)
//二分查詢
int binarysearch(int arr,int sz,int n)
else if (arr[mid] > n)
else
}return -1;
}//遞迴演算法
//求1+2+...+n之和
long sum(int n)
//求階乘
long long fac(int n)
//時間複雜度都為o(n)
總結:
找次數;
o();
用常數1取代執行時間中所有加法常數;
保留最高端;
若最高端不是1,則去掉1(即常數)。
函式中建立物件的個數關於問題規模的函式表示式。相當於求高度,一般用o漸進法表示。
//1.求前n項和
//空間複雜度o(1)
int sum(int n)
//2.斐波那契
//空間複雜度:o(n)
//時間複雜度:o(2^n)
long long fib(int n)
//求兔子個數問題
//空間複雜度:o(n)
//時間複雜度:o(2^n)
long fib(long first,long second,long n)
資料結構 演算法複雜度
二 演算法的效能評價 三 真題解析 資料結構的第一章 緒論 包含的最後乙個重要內容是關於演算法的複雜度。這個考點一般會單獨出現在選擇題的前兩道,需要你熟練掌握演算法的基本概念 演算法時間複雜度和空間複雜度的分析判斷等。其次,還會出現在大題的程式設計部分,將演算法複雜度作為乙個限制條件,要求你給出滿足...
資料結構之演算法時間複雜度
演算法的時間複雜度定義為 在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n 0 f n 它表示隨問題規模n的增大,演算法執行時間的埔長率和 f n 的埔長率相同,稱作演算...
資料結構之演算法時間複雜度
資料結構之演算法時間複雜度 演算法的時間複雜度定義為 在進行演算法分析時,語句總的執行次數t n 是關於問題規模n的函式,進而分析t n 隨n的變化情況並確定t n 的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作 t n 0 f n 它表示隨問題規模n的增大,演算法執行時間的埔長率和 f...