判斷乙個演算法的效率時,函式中的常數和其它次要項常常可以忽略,而更應該關注主項(最高項)的階數。
演算法時間複雜度的定義:在進行演算法分析時,語句中的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸進時間複雜度,簡稱為時間複雜度。其中f(n)是問題規模n的某個函式。
一般情況下,隨著輸入規模n的增大,t(n)增長最慢的演算法為最優演算法。
如何分析乙個演算法的時間複雜度:
int sum = 0, n = 100;
printf("hello, world!\n");
printf("hello, world!\n");
printf("hello, world!\n");
printf("hello, world!\n");
printf("hello, world!\n");
printf("hello, world!\n");
sum = (1 + n) *n / 2;
時間複雜度為o(1)。
一般含有非巢狀迴圈涉及線性階,線性階就是隨著問題規模n的擴大,對應計算次數呈直線增長。
int i, n = 100, sum = 0;
for (i = 0; i < n; i ++)
上述**的時間複雜度為o(n)
int i, j, n = 100;
for (i = 0; i < n; i ++)
}
時間複雜度為o(
n2)
int i =0, n = 100;
while (i < n)
這個迴圈的時間複雜度為o(logn)。
演算法的空間複雜度通過計算演算法所需的儲存空間實現,演算法的空間複雜度的計算公式記作:s(n) = o(f(n)),其中,n為問題的規模,f(n)為語句關於n所佔儲存空間的函式。
可以用空間來換時間
資料結構和演算法
程式是什麼?好多書上都寫著 程式 資料結構 演算法。可是怎麼去理解呢?好多程式設計人員對資料結構和演算法說不上熟悉,因為在他們所從事的工作中很少用到這些知識點。但並不表示他們不重要。還有一些人是這樣的想法 大公司才會注重這些知識點,小公司可能就不注重了。寫這篇文章之前我也是持這種想法的。但是,此時此...
資料結構和演算法
一 資料結構 1.概念 資料結構就是資料之間的結構關係,或者理解成資料元素之間存在的一種或者多種特定關係的集合,在傳統上資料結構分為邏輯結構與物理結構 1 邏輯結構 只反映資料元素之間的邏輯關係的資料結構,其中的邏輯關係是指資料元素之間的前後關係,而與他們在計算機中的儲存位置無關,有以下四類 集合結...
資料結構和演算法
資料結構和演算法 什麼是資料結構 概念 官方定義 資料結構是一門研究非數值計算的程式設計問題中的操作物件,以及它們之間的關係和操作等相關問題的學科。我的理解 程式設計 資料結構 演算法 常用結構 陣列 在程式設計中,為了處理方便,把具有相同型別的若干 變數 按有序的形式組織起來。這些按序排列的同類資...