a) ++x; s=0;
b) for (int i=1; i<=n; i++) { ++x; s+=x; }
c) for (int i=1; i<=n; i++) { for (int j=1; i<=n; j++) { ++x; s+=x; } }
上邊這個例子中老翘,a 代碼的運(yùn)行了 1 次,b 代碼的運(yùn)行了 n 次凭疮,c 代碼運(yùn)行了 n*n 次宜猜。
時間復(fù)雜度的表示
算法的時間復(fù)雜度的表示方式為:
O(頻度)
這種表示方式稱為大“O”記法院溺。
注意,是大寫的字母O,不是數(shù)字0彻坛。
對于上邊的例子而言,a 的時間復(fù)雜度為O(1)踏枣,b 的時間復(fù)雜度為O(n)昌屉,c 的時間復(fù)雜度為為O(n2)。
如果a茵瀑、b间驮、c組成一段程序,那么算法的時間復(fù)雜度為O(n2+n+1)马昨。但這么表示是不對的蜻牢,還需要對n2+n+1進(jìn)行簡化烤咧。
簡化的過程總結(jié)為3步:
去掉運(yùn)行時間中的所有加法常數(shù)。(例如 n2+n+1抢呆,直接變?yōu)?n2+n)
只保留最高項(xiàng)煮嫌。(n2+n 變成 n2)
如果最高項(xiàng)存在但是系數(shù)不是1,去掉系數(shù)抱虐。(n2?系數(shù)為 1)
所以昌阿,最終a、b和c合并而成的代碼的時間復(fù)雜度為O(n2)恳邀。
常用的時間復(fù)雜度的排序
列舉了幾種常見的算法時間復(fù)雜度的比較(又小到大):
O(1)常數(shù)階?<?O(logn)對數(shù)階?<?O(n)線性階?<?O(n2)平方階?<?O(n3)(立方階)?<?O(2n) (指數(shù)階)