???????
每個問題有很多種解法,但其中存在一種最優(yōu)的算法,據(jù)我觀察和思考,‘懶人’是寫不出那種最優(yōu)算法的,為什么呢?因?yàn)樽顑?yōu)算法有一個很明顯的特點(diǎn)就是算法本身集結(jié)了人類的聰明才智,讓我來用一個實(shí)例來證明這個觀點(diǎn):問題:
請計算當(dāng)參數(shù)為 n(n很大) 時, 1-2+3-4+5-6+7+......+n 的值
‘懶人’解法:
public class Lazy {
? public static void main(String[] args) {
??? int n = 10000;
??? int result = 0;
??? for (int i = 0, flag = 1; i < n; i++) {
????? result += flag * (i + 1);
????? flag =?-flag;
??? }
??? System.out.println(result);
? }
}
‘勤人’解法:
public class Diligent {
? public static void main(String[] args) {
??? int n = 10000;
??? int result = 0;
??? if (0 == n % 2) {
????? result = -n / 2;
??? } else {
????? result = -n / 2 + n;?
//由于-n / 2會舍棄小數(shù)部分,所以無需寫成-(n - 1) / 2
??? }
??? System.out.println(result);
? }
}
人類的智慧為計算機(jī)擔(dān)負(fù)了不少的計算量,“懶人”算法的時間復(fù)雜度為O(n),而“勤人”算法的時間復(fù)雜度僅為O(1),這題的最優(yōu)算法出世了!
忠告各位喜愛編程的朋友,在解決問題之前,請可憐可憐您使用的那臺精疲力盡的計算機(jī)吧,花些時間思考一下,您付出的一分一秒都會有回報的 :-)
posted on 2006-10-14 18:05
山風(fēng)小子 閱讀(1561)
評論(10) 編輯 收藏 所屬分類:
Algorithm