事後統計方法:主要是通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低,但這種方法有很大缺陷,一般不予採納。
事前分析估算方法:在計算機程式編制前,依據統計方法對演算法進行估算。
乙個用高階語言編寫的程式在計算機上執行時所消耗的時間取決於以下因素:
演算法採用的策略,方法;(演算法好壞的根本)
編譯產生的**質量;(由軟體來支援)
問題的輸入規模;(由資料決定)
機器執行指令的速度。(看硬體的效能)
定義:在進行演算法分析時,語句總的執行次數t(n)是關於問題規模n的函式,進而分析t(n)隨n的變化情況並確定t(n)的數量級。演算法的時間複雜度,也就是演算法的時間量度,記作:t(n}=0(f(n))。它表示隨問題規模n的增大,演算法執行時間的埔長率和 f(n)的埔長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜度。其中f( n)是問題規橫n的某個函式。
根據定義,求解演算法的時間複雜度的具體步驟是:
⑴ 找出演算法中的基本語句;
演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。
⑵ 計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
⑶ 用大ο記號表示演算法的時間效能。
將基本語句執行次數的數量級放入大ο記號中。
如何推導大o階呢?下面是基本的推導方法:
1.用常數1取代執行時間中的所有加法常數。
2.在修改後的執行次數函式中,只保留最髙階項。
3.如果最高端項存在且不是1,則去除與這個項相乘的常數。
簡單的說,就是保留求出次數的最高次冪,並且把係數去掉。 如t(n)=n2+n+1 =o(n2)
######複雜度o(1)
print("this is wd")
######複雜度o(n)
for i in range(n):
print(i)
######複雜度o(n2)
for i in range(n):
for j in range(n):
print(j)
######複雜度o(n3)
for i in range(n):
for j in range(n):
for k in range(n):
print('wd')
######複雜度o(log2n)
while n > 1:
print(n)
n = n // 2
常見的複雜度按效率排序:o(1)空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度。乙個演算法在計算機儲存器上所占用的儲存空間,包括儲存演算法本身所占用的儲存空間,演算法的輸入輸出資料所占用的儲存空間和演算法在執行過程中臨時占用的儲存空間這三個方面。演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,這種演算法是節省儲存的演算法;有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元。
如當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1);當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為0(log2n);當乙個演算法的空間複雜度與n成線性比例關係時,可表示為0(n).若形參為陣列,則只需要為它分配乙個儲存由實參傳送來的乙個位址指標的空間,即乙個機器字長空間;若形參為引用方式,則也只需要為其分配儲存乙個位址的空間,用它來儲存對應實參變數的位址,以便由系統自動引用實參變數。
python系列教程 python系列教程
宣告 在人工智慧技術教學期間,不少學生向我提一些python相關的問題,所以為了讓同學們掌握更多擴充套件知識更好的理解人工智慧技術,我讓助理負責分享這套python系列教程,希望能幫到大家!由於這套python教程不是要由所寫,所以不如我的人工智慧技術教學風趣幽默,學起來比較枯燥 但它的知識點還是講...
python系列教程3
python唯一的缺點就是,在目前現有的實現方式下,與c和c 這類編譯語言相比,python的執行速度還不夠快。教程後面將對實現方式的概念進行詳細闡述。簡而言之,目前python的標準實現方式是將源 的語句編譯 或者說是轉換 為位元組碼的形式,之後再將位元組碼解發布來。由於位元組碼是一種與平台無關的...
Python系列教程19
開啟文字編輯器 例如,vi notepad或idle編輯器 並在命名為script1.py的新文字檔案中輸入如下python語句 a first python script import sys load a library module print sys.platform print 2 100...