如上:a+b+c=1000, a平方+b平方=c平方 求出所有abc可能的組合?
思路方法:用列舉法,a,b,c 乙個乙個試。
//列舉法://a=0 ... a=1000;
//b=0 ... c=1000;
//c=0 ... c=1000;
//三個巢狀迴圈實現
如果 a+b+c= 3000時間複雜度則可看做為:
t = 3000*3000*3000*2
如果 a+b+c= n時間複雜度則可看做為:
t = n*n*n*2
t(n)=n^3*2
t(n)=n^3*10 (細化分:不是很關注的,對於這個)
t(n)=n^3*k (k 細分的係數對,可以忽略,不考慮那麼細緻可以看做 t(n) = n^3)
係數對資料走勢並不影響,可以忽略,主要是和n有關的幾次方影響資料走向的態勢。
漸進函式與時間複雜度
t(n) = k*g(n)+c k常數,c實常數
g(n) = n^3
g(n) 叫作 t(n) 的漸進函式
如上例項的:g(n) 就可以看作是 時間複雜度t(n) 的大o表示法, n就是解決問題的規模
時間複雜度基本操作,即只有常數項,認為其時間複雜度為o(1)t(n) = k*g(n)+c
大o表示法就是:
o(n) = g(n) = n^3 (忽略掉常數和實常數)
順序結構,時間複雜度按加法進行計算
迴圈結構,時間複雜度按乘法進行計算
分支結構,時間複雜度取最大值
判斷乙個演算法的效率時,往往只需要關注運算元量的最高次項,其它次要項和常數項可以忽略
在沒有特殊說明時,我們所分析的演算法的時間複雜度都是指最壞時間複雜度
時間複雜度 大O演算法
演算法的執行效率,就是演算法 的執行時間。我們需要能夠用肉眼就看出一段 的執行時間。int cal int n return sum 2,3行都執行了1個unit time的執行時間,4,5行都執行了n遍,所以是2n unit time的執行時間,所以一共是 2n 2 unit time。所有的 的...
大O符號與時間複雜度
大o符號 big o notation 是用於描述函式漸進行為的數學符號。也可以這麼說 用乙個大o,在其括號 中,用另乙個函式來描述原來的函式的數量級的漸進上界 電腦科學中,用於分析演算法複雜性非常有用 這個符號有兩種形式上很接近但迥然不同的使用方法 無窮大漸近與無窮小漸近。然而這個區別只是在運用中...
大O表示法 時間複雜度
引入原因 用另乙個 通常更簡單的 函式來描述乙個函式數量級的漸近上界。定義 如果乙個問題的規模是n,解這一問題的某一演算法所需要的時間為t n 它是n的某一函式。t n 稱為這一演算法的 時間複雜度 某個演算法的複雜度到達了這個問題複雜度的下界,那就稱這樣的演算法是最佳演算法 決定演算法複雜度的是執...