精華區beta Programming 關於我們 聯絡資訊
【 在 curry.bbs@cis.nctu.edu.tw ( 紅涵連理) 的大作中提到: 】 : ==> 在 daren.bbs@bbs.cs.nccu.edu.tw (藍藍的香蕉皮) 的文章中提到: : > ※ 引述《mue.bbs@bbs.cs.tku.edu.tw (閒人)》之銘言: : > : 【 在 Ray.bbs@bbs.ncku.edu.tw (雅閒居士) 的大作中提到: 】 : > : 一個演算法..對資料數n筆所花的時間成本..而估計方法有Big-Oh和Omega和Theta.. : > : 或許這不屬於資料結構的東西~~算是演算法的..在評估演算法的好壞時的一些比較方式.. : > : 在資料結潔構中的一些應用..通常會用這些來說明哪種資料結構配合的演算法所得的時間 : > : 複雜度是如何~~等等.. : > for example: : > for(int i=0;i<n;i++){ : > ..... : > ... : > } : > this is O(n) : > 也就是說這個Time complexity是隨著n的大小改變的 : > 若for(int i=0;i<n*n;i++).... : > 則O(n^2)..........就是這樣 : 對阿 ! 大概就是這樣子了 : 不過我覺得很疑惑ㄌㄟ : 這一種算法真的能夠大概比較出來嗎 ? : for(i=1;i<n;i++) : for(j=1;j<n;i++){ : a=+i; : cout << a; : } : for(i=1;i<n;i++) : for(j=1;j<n;j++){ : a=i*j+a; : cout << a; : } : 這兩種都是O(N^2) , 但是 a+=i; 可是比 a=i*j+a; 簡單的多了 : 如果換成機械碼的話 , 可能為差到兩倍的長度 : 哪如果差的更多的呢 ? : 這樣能單單只利用 Big-0 比較出來嗎 ? : 有沒有人為我解一下疑惑囉 : 不然真是想不通 : 要他幹嘛 ! : ^_^ 紅散雲天 藍普霞天 嗯..其實這個也只是估計罷了..而且是在估計做同一件事的兩個演算法.. 如排序or搜尋~~甚至是最短路徑的演算法等等..然後也是在n夠大的時候做比較.. 有的時候..的確不準確..但若一個演算法..是O(n^3)而另一演算法是O(2^n)就很明顯了 ...況且在求出來的big-O是一樣時~~也只說是相近~~而不能說是一樣..畢竟我們只是 做估計..如10*2^n+n與1000*2^n+2n的big-O都是2^n,我們所決定的是.... 當2^n*C(乘上一常數)使得這個函式在n夠大的情況下會大於以上的兩式這樣.... 也就是在n夠大時其餘的項式就顯得不重要了..我想你這二個程式做的應該不是同件 事..但即使是做同件事..而big-O相同時也不能說兩件事都一樣好~~只是相近罷了.. 而我們要用Big-O的原因是~~由於"確實"的較難去估計..所以求個大概..這樣.. -- ※ 來源:‧TKU CS BBS bbs.cs.tku.edu.tw‧[FROM: h234.s110.ts30.]