評估算法的性能


我們要想去度量一個算法的性能,有多種方法,比如度量算法的運行時間,統計指令,度量算法所使用的內存等方法,下面我們一個一個的來解讀一下

1.度量算法的運行時間

度量算法的運行時間的一種方法是,利用計算機自帶的一個計時器,來獲取一個循環所執行的運行時間,我們通過連續幾個循環的執行時間從而找出每一個循環之間數字和時間的關系,比如每一次循環的時間都會以指數級增長等。我們來看看下面的python代碼,這一段代碼設計了多次循環,並利用計算機本身的時鍾進行計時,每一個循環之間的時間關系是怎樣的呢?

import time
problemSize=100000
for count in range(10):
    start=time.time()
    work=1
    for x in range(problemSize):
        work+=1
        work-=1
    elapsed=time.time()-start
    print("%12d%16.3f"%(problemSize,elapsed))
    problemSize*=2

這段Python代碼的運行結果為:

      100000           0.015
      200000           0.028
      400000           0.052
      800000           0.101
     1600000           0.205
     3200000           0.419
     6400000           0.862
    12800000           1.699
    25600000           4.483
    51200000           6.667

我們可以看到,基本上當問題的大小翻倍的時候,運行的時間也會進行翻倍,利用這個規律再計算之后下一個循環的運行時間就沒有什么難度了,當然后面當問題的大小太大的時候,可能不會以這個規律進行運算,但是對規模較小的情況下還是適用的。

2.統計指令

用於估算算法的另一種藝術,用於統計不同問題規模所需要執行的指令的個數,這種方式比度量算法運行時間可能會更加精確一些,但是我們需要記住,這個統計是用於統計高級語言當中的指令個數而不是低級語言(機器語言)當中的指令個數。在分析算法的時候,我們分為兩類指令來分別進行統計:
1.不管問題的規模有多大,都執行相同次數的指令

2.根據問題的規模,執行不同次數的指令

我們來看下下面的循環針對不同數據集內部的循環會迭代多少次:

import time
problemSize=1000
for count in range(5):
    number=0
    work=1
    for i in range(problemSize):
        for k in range(problemSize):
            number+=1
            work+=1
            work-=1
    print("%12d%15d"%(problemSize,number))
    problemSize*=2

最后得到的結果是:

        1000        1000000
        2000        4000000
        4000       16000000
        8000       64000000
       16000      256000000

從結果當中可以看出迭代的次數是問題規模的平方

3.度量算法所使用的內存

這樣的算法也是可以用於度量算法的性能的,我們將會后面的章節進行解說。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM