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è)問(wèn)題有很多種解法,但其中存在一種最優(yōu)的算法,據(jù)我觀察和思考,‘懶人’是寫(xiě)不出那種最優(yōu)算法的,為什么呢?因?yàn)樽顑?yōu)算法有一個(gè)很明顯的特點(diǎn)就是算法本身集結(jié)了人類(lèi)的聰明才智,讓我來(lái)用一個(gè)實(shí)例來(lái)證明這個(gè)觀點(diǎn):

          問(wè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ù)部分,所以無(wú)需寫(xiě)成-(n - 1) / 2
          ??? }
          ??? System.out.println(result);
          ? }
          }

          人類(lèi)的智慧為計(jì)算機(jī)擔(dān)負(fù)了不少的計(jì)算量,“懶人”算法的時(shí)間復(fù)雜度為O(n),而“勤人”算法的時(shí)間復(fù)雜度僅為O(1),這題的最優(yōu)算法出世了!
          忠告各位喜愛(ài)編程的朋友,在解決問(wèn)題之前,請(qǐng)可憐可憐您使用的那臺(tái)精疲力盡的計(jì)算機(jī)吧,花些時(shí)間思考一下,您付出的一分一秒都會(huì)有回報(bào)的 :-)
          posted on 2006-10-14 18:05 山風(fēng)小子 閱讀(1567) 評(píng)論(10)  編輯  收藏 所屬分類(lèi): Algorithm
          主站蜘蛛池模板: 宁国市| 乌兰察布市| 云南省| 个旧市| 惠州市| 彰武县| 巫山县| 霸州市| 乐安县| 海丰县| 五原县| 陈巴尔虎旗| 许昌市| 长垣县| 老河口市| 应城市| 安溪县| 溧水县| 阿巴嘎旗| 谢通门县| 涞源县| 泸水县| 望城县| 泽州县| 当阳市| 东丰县| 中卫市| 夏津县| 太和县| 历史| 永嘉县| 广南县| 江西省| 临洮县| 大丰市| 葫芦岛市| 海阳市| 宁明县| 时尚| 玛纳斯县| 临江市|