連載2---第1章:算法在計算機中的角色(1.2:算法作爲一種技術)

1.2:算法作爲一種技術

假設計算機足夠快,內存是免費的,還需要算法嗎?答案是肯定的,你還需要正確的算法幫助你正確的解決問題

如果計算機足夠快,任何一個正確的算法都能解決問題,在這種情況下,你想不想要一種最簡單的方法解決問題?

雖然計算機可以更快,但是不會無限的快,內存可以更便宜,但是不會免費,算法還是幫助你節省時間的有效辦法.

 

效率:

解決同一個問題,不同的算法在效率上會差別很大,這種差別遠比計算機硬件和軟件對效率的影響大

看一個排序例子:

我們看兩種排序的算法:

1.插入排序(insertion sort),排序n個元素,需要時間c1n2 (其中c1是跟n沒有關係的常量)

2.合併排序(merge sort),排序n個元素,需要時間c2nlgn(其中c2是跟n沒有關係的常量,lgn是log2n)

插入排序的常量通常比合並排序的小,所以c1<c2

我們可以看到常量對時間的影響比n小的多,插入排序在n小的時候比合並排序效率高,但是當n很大的時候,合併排序就比插入排序效率高很多.

我們選用一臺快的機器(computer A)運行插入排序對比一臺慢的機器(computer B)運行合併排序,它們各自都排序一組106個的數.

假設computer A每秒執行10億條指令,即109/s,computer B每秒執行1000萬條指令,即107/s,則computer A是computer B執行速度的100倍,在computer A上執行算法是用最快的執行語言:機器語言,排序n個元素需要2n2

即c1=2,在computer B上執行算法採用高級語言寫的算法,排序n個元素需要50nlgn,既c2=50。

排序100萬個數

                 computer A需要:(2*(1062 instructions)/(109 instructions/second)=2000seconds

                 computer B需要:(50*106lg106 instructions)/(107 instructions/second)約=100seconds

結論:computer A性能比computer B高,需要時間是computer B的20倍,如果n更大,那麼倍數將更大,有興趣可以算一下

 

算法和其他技術

上面的例子說明:算法和計算機硬件等,都是一種技術

你可能對算法的影響產生疑問,是否有其他的因素?

        例如:時鐘頻率更高的硬件,更容易使用的用戶界面,網絡的速度等等都可能是影響因素

答案是肯定的。雖然一些應用在應用層次上不需要算法(例如一些簡單的web應用),但是他們本身需要算法,例如,考慮一個基於web的服務,如何從一端到另一端。這樣的服務跟硬件速度,用戶界面接口,網絡速度都有關係,可是它也需要算法來完成某個操作,例如尋找路由(可能用到最短路徑算法)

 

習題(答案只是寫的一些自己知道的,希望大家踊躍討論,互相學習,我也會在以後的學習中補充):

1。舉例,一個應用程序在應用層次需要算法的例子並且討論其中的算法

答:這樣的例子很多,例如把學生成績進行排序

2。假設我們在同一臺機器上比賽插入排序和合並排序.輸入n個元素,插入排序執行8n2步,合併排序執行64nlgn步,問哪些n插入排序比合並排序執行效率高?

答:8n2<64nlgn

3。找出最小的n,一個時間爲100n2的算法在同一臺機器上比一個時間爲2n的算法執行的快.

答:100n2<2n

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章