天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

淺談代碼的執行效率(1):算法是關鍵

  前一段時間在博客園里看到這樣一篇文章,那位兄弟談到程序效率的關鍵是“簡短”。他說,“程序越簡短,其可執行代碼就越少,就越有效率”,而在編寫程序的時候,“要盡量改進我們的算法,而改進算法中最重要的一條,就是減少語句”。這句話從表面上似乎正確,但我認為性能這問題不能用“簡短”這種方式去思考,否則會進入一些誤區。我整理了一下思路,希望可以從幾個方面把詳細談一下這個問題。

首先,如果說“簡短的代碼效率高”,那么什么叫作“簡短”呢?姑且理解為“代碼少”吧。如果“代碼少”能夠得出“效率高”,那我認為還需要其他一些條件,例如:

  • 代碼完全是順序執行的
  • 每行代碼的效率相同

  但是,這對于使用高級語言的程序員來說,這兩條基本上都無法成立,因為:

  • 代碼中有條件跳轉(如循環),因此一段簡短的代碼最終執行的“次數”可能比一段復雜的代碼要多。這是很常見的情況,并非如那位兄弟所說“兩三行代碼寫出死循環”這樣的“特例”。
  • 每行代碼的效率幾乎不可能相同。試想一個i++和一個方法調用,他們的性能開銷怎么可能相同呢?再者,這個特性并非是“高級語言”特有的,連CPU指令也是一樣(以后我們再來詳談這個問題)。

  其實這就是目前編程工作中不可能回避的現狀,那就是高級語言并不直接反映出機器的執行過程。同時,我們不能從代碼表面的簡短程度來判斷程序效率的高低。正如那位朋友所談,影響程序的關鍵因素之一是算法的選擇,但我不同意他說算法優化的關鍵在于“減少語句”。從一定程度上講,選擇高效的算法的確是為了減少指令執行的“總量”,但它并不是如那篇文章所說通過“少一些變量”,“少一些判斷”來進行的,而是在于大幅的邏輯改變來減少總體的操作。

  事實上,我們很容易便能舉出代碼簡短,但是性能較差的算法。就拿最常見的排序算法來說,冒泡排序不可謂不簡單:

public void BubbleSort(int[] array)
{
for (int i = array.Length - 1; i >= 0; i--)
{
for (int j = 1; j <= i; j++)
{
if (array[j - 1] > array[j])
{
int temp = array[j - 1];
array[j
- 1] = array[j];
array[j]
= temp;
}
}
}
}

it知識庫淺談代碼的執行效率(1):算法是關鍵,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 2021久久精品免费观看 | 美女露出逼 | 97在线看视频福利免费 | 国产午夜在线视频 | 亚洲精品无码不卡在线播HE | 国产三级在线免费 | 成年人视频在线免费播放 | 欧美高清xxx | 伊人情涩网 | 亚洲色图另类小说 | 亚洲色播永久网址大全 | 久久受www免费人成_看片中文 | 伊人不卡久久大香线蕉综合影院 | 青青青久久久 | 农民下乡在线观看3 | 国产免费午夜 | 无遮掩H黄纯肉动漫在线观看星 | 国产精品你懂的在线播放 | 色欲国产麻豆精品AV免费 | 日本高清不卡一区久久精品 | 国自产精品手机在线视频 | 中文字幕在线视频免费观看 | 日本视频一区二区免费观看 | 精品人伦一区二区三区潘金莲 | 岳扒开让我添 | 久久99AV无色码人妻蜜柚 | 无码乱人伦一区二区亚洲 | 国产成人在线播放 | 香蕉人人超人人超碰超国产 | 国产黄A片在线观看永久免费麻豆 | 国产亚洲精品久久久久久国模美 | 最新国自产拍 高清完整版 最新国产在线视频在线 | 欧美黑人经典片免费观看 | 新影音先锋男人色资源网 | 国产在线亚洲精品观看不卡 | 久久国产视频网站 | 国产亚洲精品久久久无码狼牙套 | 久久99热狠狠色AV蜜臀 | 99亚洲精品 | 亚洲精品无码葡京AV天堂 | 精品视频免费在线观看 |