亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

對程序設計初學者談程序的效率

2019-11-14 09:00:37
字體:
來源:轉載
供稿:網友

【摘要】設計高效率的程序是個重要話題。限于基礎,初學者往往不得要領。本文試圖較通俗地傳達算法設計和分析中的一些觀點、方法。幫助學生樹立算法的概念,注重將來算法理論的學習。

  在學習了循環以后,我們可以做程序,解決些大問題了。我想談談關于程序執行效率的問題。

  評價一個程序的標準中,第一是正確;第二是可讀性好,以此使程序易于修改和維護;第三就是效率的問題了,要求程序運行要盡可能快,占用內存空間要盡可能小。關注效率,可以使我們的好程序能在“小設備”上運行,這在移動計算、物聯網時代很要緊。還有些問題,復雜得不得了,也只有借助于設計高效率算法和程序的能力,才有可能將之解決。

  以計算1/2-2/3+3/4-…+19/20的程序為例說明。憑借以前的數學知識,同學們會將式子視為純粹的加法,待加的通項式為(-1)n×i/(i+1),可以編出如圖1所示的程序:

[cpp] view plain copy PRint?#include<Cmath>  int main()  {int i, sign, n=19;   double d,k;   i=1,k=0;   while(i<=n)   { sign=pow(-1,i);     d=double(i)/(i+1);     k=k+sign*d;     i++;   }   cout<<"k="<<k<<endl;   return 0;  }  

圖1  O(n2)級低效率的程序         

 

  圖1的程序沒有錯,但pow求冪運算本身是個復雜運算,應該要避免的。尤其在學習C語言和C++時,效率的觀念一定要有。否則i++和i=i+1、i+=2和i=i+2更沒有必要區別了。

  更進一步來些分析(此處引入了一些算法分析的知識,以后專業課中要學,我講得通俗些)。在while循環中,有加法、乘法、除法等運算。乘法需要的運行時間遠高于加法(理解一下,為什么?m*n是n個m相加嘛。)。除法和乘法一樣復雜。所以算法分析中找主要矛盾,忽略加法。為簡單起見,除法我們也不說了,就從乘法次數上說事。從表面上看,循環1次執行1次乘法,循環n次,共執行了n次乘法。但注意到循環中pow(-1,i)是需要用乘法實現的,pow(-1,i)需要執行i 次乘法。在n次循環中,用于計算pow(-1,i)的乘法次數分別為1、2、3……n,共計1+2+…+n=n(n-1)/2。此程序需要的乘法次數達n(n-1)/2+n=(n2+n)/2,從數量級上講,是n2級別的。(當n足夠大時,式子中的常系數1/2也可以被忽略)。在算法分析中,稱其時間復雜度為O(n2)。

  有沒有好的辦法?圖2給出了通過迭代變換通項符號的程序。不難發現,需要的乘法次數就是n次,時間復雜度為O(n)。

 

[cpp] view plain copy print?int main()  {int i,sign=1,n=19;   double d,k;   i=1,k=0;   while(i<=n)   { d=double(i)/(i+1);     k=k+sign*d;     sign=-sign;     i++;   }   cout<<"k="<<k<<endl;   return 0;  }  

            圖2  O(n)級高效率的程序

  

  圖1的算法很直觀,有人不想放棄這個算法。是不是可以改進pow函數的算法來做呢?

  下面的問題是:求x的n次冪,即xn=x*x*…*x(共n個)的值。

  直接用循環構造程序,程序段如圖3所示。

[cpp] view plain copy print?pow=1;  j=1;  while(j<=n)  {    pow=pow*x;    j++;  }  

  圖3 直接用循環構造求冪程序              

  還有一種快速求冪算法,如圖4所示。這段程序不分析了,同學們給出x和n值,如求37,走查一遍(一定要自己走查一下),數一數用了幾次循環,感嘆吧。設想n很大,如30或更大,接著感嘆吧。

[cpp] view plain copy print?pow=1  while (n > 0)  {    if (n%2 == 1)       pow=pow * x;    x = x * x;    n = n / 2;  }  圖4 快速求冪算法

 

  由此可見,圖2的算法比圖1的算法絕對好。無論在圖1的局部做多少努力,大局不可改變。

  不想費腦筋的同學可以直接看下一段??焖偾髢缢惴ǖ谋澈笫菙嫡撝械囊粋€結論(我不知道定理名稱,想知道百度一下即可,實際上定理叫什么并不重要要了)。這個結論是:任何一個正整數,都可以表示為一個偶數加1或0。多么樸素的結論。18=18+0,17=16+1。顯然得不得了。繼續下去,18或者16除以2后,無論是奇數還是偶數,也可以用同樣的形式表示。品一品,循環、迭代的味道出來了。例如:18=9*2+0=(4*2+1)*2+0=((2*2+0)*2+1)*2+0,再明確些是18=1×24+0×23+1×21+0×21。這不是十進制轉二進制的方法嗎?就這樣用上了。的確,輸入是x=3,n=18,即要計算時318時,走查一下,和上式的分解是一樣的。算法的設計實際上就是基于這樣的數學知識得來的。數學在計算機科學中如此重要,咱就不講大道理了??傊?,學多少數學,都不算多,當然要學會用數學知識。

  有些同學會拿出并行計算、高性能計算等說理,講不必這么摳算法的效率,認為當計算硬件和平臺足夠強大時,這樣的思維并不顯得有太大的價值。甚至我親自聆聽過一位著名教授的言論:“我們不需要在算法方面花那么大的精力,利用機群,增加并行度,是一種更直接和簡單的方法。”我們不應該忽視了教授此言之中暗含的前提而就此將教授奚落一番了事。此言有點道理,但事情并非如些。

  面對一塊巨石,等待一位大力士將之移開是一種辦法。但為什么不找來一根杠桿,用很小的力量將之撬動呢?這里需要的是智慧的力量,體現出的是智慧的美。當這塊巨石足夠大,以至于任何大力士都無法憾動時,我們依靠的只有智慧了。

  學習計算機,學習用編程的方法解決問題,注重效率是一種基本的品質。你將來在算法科學的領域內,會掌握更多處理問題的典型方法。這是我們要的基本功,是職業素養的表現。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品爽黄69| 亚洲天堂网站在线观看视频| 亚洲精品美女网站| 九九九久久久久久| 2019中文字幕免费视频| 中文字幕亚洲无线码在线一区| 国产一区二区色| 亚洲欧洲自拍偷拍| 亚洲国产精彩中文乱码av在线播放| 欧美交受高潮1| 色综合久久久久久中文网| 91香蕉亚洲精品| 国产欧美一区二区三区久久| 国产精品视频99| 欧美成人精品影院| 日本久久久a级免费| 亚洲免费一在线| 亚洲人a成www在线影院| 亚洲男人天堂手机在线| 日韩中文字幕网址| 精品国内亚洲在观看18黄| 8x海外华人永久免费日韩内陆视频| 欧美亚洲一级片| 另类专区欧美制服同性| 4k岛国日韩精品**专区| 国产精品福利在线观看| 国产综合色香蕉精品| 精品国产精品三级精品av网址| 日本中文字幕不卡免费| 黄色一区二区在线观看| 日本高清不卡的在线| 国产婷婷成人久久av免费高清| 4388成人网| 九色精品免费永久在线| 欧美国产激情18| 永久免费看mv网站入口亚洲| 少妇高潮久久久久久潘金莲| 欧美综合第一页| 亚洲国产精品成人av| 国产日韩欧美影视| 亚洲天堂av网| 超薄丝袜一区二区| 精品小视频在线| 久久精品99国产精品酒店日本| 少妇高潮久久久久久潘金莲| 中文字幕日韩欧美精品在线观看| 国产丝袜一区二区三区免费视频| 国产一区二区三区毛片| 成人国产精品久久久| 97在线免费观看视频| 中文字幕一区二区精品| 欧美性猛交xxxx乱大交蜜桃| 国产免费亚洲高清| 精品偷拍一区二区三区在线看| 琪琪亚洲精品午夜在线| 中文字幕欧美精品在线| 综合激情国产一区| 91最新在线免费观看| 欧美大片在线免费观看| 欧美黑人巨大xxx极品| 国产精品欧美日韩一区二区| 亚洲第一av网| 日韩精品免费观看| 国产精品扒开腿做爽爽爽男男| 大荫蒂欧美视频另类xxxx| 国产精品高潮在线| 久久精品视频中文字幕| 亚洲一级黄色片| 日韩黄色在线免费观看| 国产香蕉一区二区三区在线视频| 社区色欧美激情 | 久久久亚洲欧洲日产国码aⅴ| 亚洲精品成人久久电影| 国产一区二区日韩| 欧美午夜激情视频| 夜夜嗨av色综合久久久综合网| 国产成人精品日本亚洲| 国产成+人+综合+亚洲欧洲| 亚洲人精品午夜在线观看| 1769国内精品视频在线播放| 亚洲在线一区二区| 亚洲最大成人免费视频| 日韩高清a**址| www日韩欧美| 麻豆国产精品va在线观看不卡| 亚洲一区二区免费在线| 亚洲欧美在线x视频| 欧美日韩国产专区| 欧美性猛交99久久久久99按摩| 97国产在线视频| 91精品久久久久久综合乱菊| 国产精品一区二区av影院萌芽| 色偷偷偷综合中文字幕;dd| 国产成人综合一区二区三区| 欧美成人精品不卡视频在线观看| 日韩女优在线播放| 欧美性视频精品| 国产精品永久免费观看| 国产精品成人久久久久| 亚洲福利视频久久| 欧美在线精品免播放器视频| 国产精品三级网站| 成人在线精品视频| 久久久久国产精品一区| 亚洲视频在线观看网站| 欧美刺激性大交免费视频| 久久精品中文字幕电影| 亚洲第一色在线| 亚洲一区www| 在线观看日韩专区| 欧美—级高清免费播放| 大荫蒂欧美视频另类xxxx| 欧美成aaa人片在线观看蜜臀| 91精品啪aⅴ在线观看国产| 日韩毛片中文字幕| 亚洲精品在线91| 亚洲男人av在线| 日韩精品视频中文在线观看| 国产91成人video| 亚洲欧美日韩一区二区三区在线| 国产亚洲精品美女久久久| 欧美成人在线免费视频| 欧美性做爰毛片| 国产免费一区视频观看免费| 91天堂在线视频| 日韩成人在线视频网站| 国产一区二区丝袜高跟鞋图片| 欧美亚洲另类视频| 亚洲aⅴ男人的天堂在线观看| 国产一区二区视频在线观看| 亚洲色图15p| 色偷偷91综合久久噜噜| 欧美激情一区二区三级高清视频| 视频在线观看一区二区| 亚洲欧洲中文天堂| 91精品国产精品| 国产精品久久999| 久久免费视频网站| 中文字幕av一区中文字幕天堂| 亚洲天堂男人天堂| 在线播放国产一区二区三区| 亚洲精品一区二区三区不| 国产婷婷97碰碰久久人人蜜臀| 91视频国产一区| 国产精品成人av性教育| 色偷偷偷综合中文字幕;dd| 97在线视频观看| 久久久欧美一区二区| 欧美激情在线有限公司| 国产+成+人+亚洲欧洲| 欧美日韩国产精品一区| 欧美激情一二三| 日韩精品视频在线播放| 日韩中文字幕网| 欧美理论电影在线观看| 91精品久久久久久久久不口人| 97**国产露脸精品国产| 91精品在线观| 久久99精品久久久久久噜噜| 日韩精品视频在线观看网址| 欧美日韩在线免费| 久久久久久久久久婷婷| 久久久久久久久国产精品| 日韩美女在线播放|