1、什麼是大o
o(f(n))表示執行演算法所需要執行的指令數,和f(n)成正比
從圖中可以看出來n的差距是量級上的差距,可以看出來前面的常數可以忽略不計不同複雜度的函式
在學術上來講o(f(n))表示演算法執行的上界
歸併排序複雜度是o(nlogn)的,但同時也是o(n^2)的,因為o表示時間的上界,這個演算法真正執行的指令數可能是cnlogn 可能<= an^2的
但是業界就用o表示演算法的執行最低上界
一般不會說歸併排序是o(n^2)的
乙個演算法有多個部分組成,複雜度取最大的(前提是對應的n數量級是差不多的)
如果o(alonga+b) ,o(aloga+b^2),這樣的就不行1、如果想在1s內解決問題:
o(n2)的演算法可以處理大約104級別的資料
o(n)的演算法可以處理大約10^8級別的資料
o(nlogn) 的演算法可以處理大約10^7級別的資料
2、空間複雜度
多開乙個輔助陣列:o(n)
多開乙個輔助二維陣列:o(n^2)
多開常數空間:o(1)
遞迴呼叫是有空間代價的
void swap(int &a ,int &b)
//反轉字串
//判斷是不是質數
bool isprime(int n)
//遞迴的二分查詢
int binarysearch(int arr,int l,int r,int traget)else if(arr[mid]>target)else
}
O n 2 時間複雜度的演算法 學習筆記二
wikipedia上的定義 氣泡排序 英語 bubble sort 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 ...
演算法01 時間複雜度
演算法,通俗來說,就是被設計出來用於解決某個或某類問題,具有一定通用性的計算流程和方法。解決某個問題,通常有不止一種演算法。評價乙個演算法的優劣,從3個方面進行考察 時間複雜度 額外空間複雜度 常數項時間 通常用最壞時間複雜度 大寫o 來表示乙個演算法的時間複雜度。通常估計乙個演算法的時間複雜度是這...
01 時間複雜度 空間複雜度
1 時間頻度 乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n n稱為問題的規模,當n不斷變化時,時間頻度t n 也會不斷變化。2 時間複雜度 若有某個輔助函式f n 使得當n趨近於無窮大時,t n f n 的極限值為不等於零的常數,則稱f n 是t n 的同數量級函式。記作t n f ...