1. 程式人生 > >算法分析| 集1(漸近分析)

算法分析| 集1(漸近分析)

style 獲得 判斷 永遠 算法 大小為n 大於 set 讓我

為什麽分析算法性能?
  應該照顧好許多重要的事情,如用戶友好,模塊化,安全性,可維護性等。為什麽要擔心性能?
  對此的答案很簡單,只有我們有表現,才能有上述所有的東西。

  比如我們如果表現像貨幣,我們可以買到所有上述的東西。研究表演的另一個原因是 - 速度很有趣!


給出兩個任務的算法,我們如何找出哪一個更好?

  通常對於我們來說,一個天真(“地道”)的方法是實現這兩種算法,在計算機上運行兩個程序以獲得不同的輸入,並查看哪一個花費更少的時間。這種算法分析方法存在很多問題。
1)對於某些輸入,第一種算法可能比第二種算法性能更好,然而對於另外一些輸入,第二種算法可能比第一種算法性能更好。
2)對於一些輸入,第一種算法在一臺機器上表現更好,而另一種輸入則在其他機器上第二種算法運行得更好。

  漸近分析是解決上述問題的重要思想。在漸近分析中,我們根據輸入大小來評估算法的性能(我們不測量實際的運行時間)。我們計算,算法的時間(或空間)如何隨輸入大小而增加。
  例如,讓我們考慮排序數組中的搜索問題(搜索給定項目)。搜索的一種方法是線性搜索(增長順序是線性的),而另一種方法是二進制搜索(增長順序是對數)。要了解漸近分析如何解決上述分析算法中的問題,現在假設我們在慢速計算機上運行線性搜索和在較快速是計算機上運行二進制搜索。對於輸入數組大小為n的小值,快速計算機可能需要更少的時間。但是,在輸入數組大小的某些值之後,即使二進制搜索在慢速計算機上運行,??二進制搜索很明顯地會比線性搜索花費更少的時間。

原因是二進制搜索在輸入大小對數方面的增長順序,而線性搜索的增長順序是線性的。因此,在輸入值的某些值之後,總是可以忽略與機器相關的常量。

漸近分析總是有作用嗎?
  漸近分析並不完美,但這是分析算法的最佳方法。例如,有兩種排序算法分別在機器上分別取1000nLogn和2nLogn時間。這兩種算法都是漸近相同的(增長順序是nLogn)。所以,隨著漸近分析,我們不能判斷哪一個更好,因為我們忽略漸近分析中的常數。
  另外,在漸近分析中,我們總是談論大於常量的輸入規模。這些大的輸入可能是永遠不會用於你的軟件和一個漸近慢的算法,它總是對你的具體情況更好。因此,您可能會選擇一種算法,漸近漸近,但對於你的軟件來說速度更快。

  首次翻譯文章,雖然google可以翻譯出一部分,但是感覺Google翻譯的不地道,很多地方翻譯的意思不對。原文鏈接:http://www.geeksforgeeks.org/analysis-of-algorithms-set-1-asymptotic-analysis/

算法分析| 集1(漸近分析)