First they ignore you
          then they ridicule you
          then they fight you
          then you win
              -- Mahatma Gandhi
          Chinese => English     英文 => 中文             
          隨筆-221  評(píng)論-1047  文章-0  trackbacks-0
          ??????? 每個(gè)問題有很多種解法,但其中存在一種最優(yōu)的算法,據(jù)我觀察和思考,‘懶人’是寫不出那種最優(yōu)算法的,為什么呢?因?yàn)樽顑?yōu)算法有一個(gè)很明顯的特點(diǎn)就是算法本身集結(jié)了人類的聰明才智,讓我來用一個(gè)實(shí)例來證明這個(gè)觀點(diǎn):

          問題:
          請(qǐng)計(jì)算當(dāng)參數(shù)為 n(n很大) 時(shí), 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會(huì)舍棄小數(shù)部分,所以無需寫成-(n - 1) / 2
          ??? }
          ??? System.out.println(result);
          ? }
          }

          人類的智慧為計(jì)算機(jī)擔(dān)負(fù)了不少的計(jì)算量,“懶人”算法的時(shí)間復(fù)雜度為O(n),而“勤人”算法的時(shí)間復(fù)雜度僅為O(1),這題的最優(yōu)算法出世了!
          忠告各位喜愛編程的朋友,在解決問題之前,請(qǐng)可憐可憐您使用的那臺(tái)精疲力盡的計(jì)算機(jī)吧,花些時(shí)間思考一下,您付出的一分一秒都會(huì)有回報(bào)的 :-)
          posted on 2006-10-14 18:05 山風(fēng)小子 閱讀(1565) 評(píng)論(10)  編輯  收藏 所屬分類: Algorithm
          主站蜘蛛池模板: 灌南县| 永川市| 涞水县| 治县。| 黑山县| 连州市| 平顺县| 桃江县| 西丰县| 高唐县| 治多县| 诸暨市| 虞城县| 北碚区| 遂宁市| 广东省| 大竹县| 张家港市| 咸丰县| 汕尾市| 彰武县| 杭锦旗| 鄂托克前旗| 忻城县| 合川市| 苍南县| 房山区| 定边县| 大姚县| 乐安县| 平利县| 吉林省| 沂南县| 青铜峡市| 登封市| 岳阳市| 南华县| 神木县| 海兴县| 新巴尔虎左旗| 鲁甸县|