1. 程式人生 > >演算法執行時間1、logN、N、NlogN 、N^2、N^3、2^n之間的比較

演算法執行時間1、logN、N、NlogN 、N^2、N^3、2^n之間的比較

 排序演算法中,常常要求我們估算出最壞情況執行時間平均情況/期望執行時間。在估算執行時間時,我們常用到下面一些時間量:

 1  大部分程式的大部分指令之執行一次,或者最多幾次。如果一個程式的所有指令都具有這樣的性質,我們說這個程式的執行時間是常數。
 logN   如果一個程式的執行時間是對數級的,則隨著N的增大程式會漸漸慢下來,如果一個程式將一個大的問題分解成一系列更小的問題,每一步都將問題的規 模縮減成幾分之一 ,一般就會出現這樣的執行時間函式。在我們所關心的範圍內,可以認為執行時間小於一個大的常數。對數的基數會影響這個常數,但改變不會太 大:當N=1000時,如果基數是10,logN等於3;如果基數是2,logN約等於10.當N=1 00 000,logN只是前值的兩倍。當N時原來的兩倍,logN只增長了一個常數因子:僅當從N增長到N平方時,logN才會增長到原來的兩倍。
 N  如果程式的執行時間的線性的,很可能是這樣的情況:對每個輸入的元素都做了少量的處理。當N=1 000 000時,執行時間大概也就是這個數值;當N增長到原來的兩倍時,執行時間大概也增長到原來的兩倍。如果一個演算法必須處理N個輸入(或者產生N個輸出), 那麼這種情況是最優的。
 NlogN  如果某個演算法將問題分解成更小的子問題,獨立地解決各個子問題,最後將結果綜合起來 (如歸併排序,堆排序),執行時間一般就是NlogN。我們找不到一個更好的形容, 就暫且將這樣的演算法執行時間叫做NlogN。當N=1 000 000時,NlogN大約是20 000 000。當N增長到原來的兩倍,執行時間超過原來的兩倍,但超過不是太多。
 
N平方
 如果一個演算法的執行時間是二次的(quadratic),那麼它一般只能用於一些規模較小的問題。這樣的執行時間通常存在於需要處理每一對輸入 資料項的演算法(在程式中很可能表現為一個巢狀迴圈)中,當N=1000時,執行時間是1 000 000;如果N增長到原來的兩倍,則執行時間將增長到原來的四倍。
 N三次方  類似的,如果一個演算法需要處理輸入資料想的三元組(很可能表現為三重巢狀迴圈),其執行時間一般就是三次的,只能用於一些規模較小的問題。當N=100時,執行時間就是1 000 000;如果N增長到原來的兩倍,執行時間將會增長到原來的八倍。
 2的N次方  如果一個演算法的執行時間是指數級的(exponential),一般它很難在實踐中使用,即使這樣的演算法通常是對問題的直接求解。當N=20時,執行時間是1 000 000;如果增長到原來的兩倍時,執行時間將是原時間的平方!

常見排序演算法執行時間比較:

演算法 最壞情況執行時間 平均情況/期望執行時間
插入演算法 O(n^2) O(n^2)
快速排序 O(n^2) O(nlogn)【期望】
歸併排序 O(nlogn) O(nlogn)
堆排序 O(nlogn) O(1)
希爾排序 O(n^2) O(n^(3/2))
桶排序 O(n^2) O(n)【平均情況】

1KB=2^10=1024

1MB=2^20=2^10*2^10=1024*1024約等於1 000 000(百萬)

1GB=2^30=2^10*2^10*2^10=1024*1024*1024約等於1 000 000 000 (十億)

相關推薦

演算法執行時間1logNNNlogN N^2N^32^n之間比較

 排序演算法中,常常要求我們估算出最壞情況執行時間和平均情況/期望執行時間。在估算執行時間時,我們常用到下面一些時間量:  1  大部分程式的大部分指令之執行一次,或者最多幾次。如果一個程式的所有指令都具有這樣的性質,我們說這個程式的執行時間是常數。  logN   如果

演算法執行時間logNNlogN 之間比較

http://clarkluo2004.blog.163.com/blog/static/32973801200845115213422/ 這個帖子說的非常好啊  1  大部分程式的大部分指令之執行一次,或者最多幾次。如果一個程式的所有指令都具有這樣的性質,我們說這個程式的

高並發任務執行時間短的業務怎樣使用線程池?並發不高任務執行時間長的業務怎樣使用線程池?並發高業務執行時間長的業務怎樣使用線程池?

需要 span 業務 第一步 可能 family 執行時間 數據 並發 (1)高並發、任務執行時間短的業務,線程池線程數可以設置為CPU核數+1,減少線程上下文的切換(2)並發不高、任務執行時間長的業務要區分開看:a)假如是業務時間長集中在IO操作上,也就是IO密集型的任務

分析演算法執行時間的一些通用規則

1、迴圈:每一次執行時間*迴圈次數 //迴圈n次 for(i=1;i<=n;i++) m = m + 2; //時間常數c 總時間 = c * n = cn = O(n)。 2、巢狀迴圈:從內到外進行分析,總的執行時間是所有迴圈規模的乘積

C語言如何計算演算法執行時間

C/C++中的計時函式是clock(),而與其相關的資料型別是clock_t。在MSDN中,查得對clock函式定義如下: clock_t clock( void ); 這個函式返回從“開啟這個程式程序”到“程式中

C/C++中演算法執行時間的三種計算方式(By 虛懷若谷)

演算法執行時間需通過依據該演算法編制的程式在計算機上執行時所消耗的時間來度量。而度量一個程式的執行時間通常有兩種方法。 事後統計的方法:該方法利用計算機內部的計時功能,可以精確到毫秒級別,這種方法有兩個缺點:一是必須依據演算法先編寫好程式;二是執行程式的軟硬體環境易喧賓奪主

演算法--演算法執行時間比較

演算法的執行時間通常與下列函式成比例:  1  大部分程式的大部分指令之執行一次,或者最多幾次。如果一個程式的所有指令都具有這樣的性質,我們說這個程式的執行時間是常數。  logN   如果一個程式的執行時間是對數級的,則隨著N的增大程式會漸漸慢下來,如果一個程式將一個大

opencv 計算演算法執行時間

#include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(int argc, char** argv) {

演算法時間複雜度概括——o(1)o(n)o(logn)o(nlogn)

在描述演算法複雜度時,經常用到o(1), o(n), o(logn), o(nlogn)來表示對應演算法的時間複雜度。這裡進行歸納一下它們代表的含義:這是演算法的時空複雜度的表示。不僅僅用於表示時間複雜度,也用於表示空間複雜度。   O後面的括號中有一個函式,指明某個演算法的

【轉】演算法時間複雜度概括——o(1)o(n)o(logn)o(nlogn)

       在描述演算法複雜度時,經常用到o(1), o(n), o(logn), o(

回到上次目錄歷史命令查找快捷方式及執行時間顯示設置查看系統版本

如何 cnblogs 尋找 long 9.png etc 執行時間 mage 內核 一、回到上次操作的目錄 # cd -進入上次訪問目錄 二、歷史命令搜索操作快捷鍵: [Ctrl + r], [Ctrl + p], [Ctrl + n]在終端中按捉 [Ctrl] 鍵的同時

十一利用攔截器統計action執行時間

err cep time exceptio execute method current result ack 1.新建login.jsp <body> <a href="HelloAction.action">點擊統計action執行時間

如何統計PHP程式的執行時間耗費記憶體

簡述 在專案開發中有時需要我們進行程式碼效率優化,這樣就需要知道我們的程式碼執行所需的時間,所佔用的記憶體等等問題。此篇博文就是簡單講一下如何統計PHP程式的執行時間和執行所需耗費的記憶體。 程式碼實現 <?php /** * ========================

python多執行緒——1GIL

一、GIL是什麼?        執行緒全域性鎖(Global Interpreter lock),python保護執行緒安全而採取的獨立執行緒執行的限制。      1、明確一點GIL並不是python的特性,pytho

山科java實驗4-1 編寫一個程式,使用者可以從鍵盤錄入若干個學生的姓名和分數(程式每次提示使用者輸入“Y”或“N”決定是否繼續錄入學生資訊,如果使用者輸入“N”則使用者輸入完畢。輸入的“Y”N”不區分

編寫一個程式,使用者可以從鍵盤錄入若干個學生的姓名和分數(程式每次提示使用者輸入“Y”或“N”決定是否繼續錄入學生資訊,如果使用者輸入“N”則使用者輸入完畢。輸入的“Y”、“N”不區分大小寫)。使用者錄入完畢後,程式按成績由高到低的順序輸出學生的姓名和分數(姓名和分數之間用一個空格分割)。【說明

PTA 資料結構題目(1):最大子列和問題(分而治之線上處理演算法

題目來源: 問題描述: 問題分析: 對於一般的問題,原始解 都能通過一種 蠻力演算法,即窮舉法的思想得到。這題也不例外。 如果我們,把輸入的陣列,所有的子列都歷遍,並從中找出最大,即可得出我們的演算法。也就是版本一。 學習要點: 1、如何

回爐篇4—資料結構(3)之演算法時間複雜度空間複雜度

演算法的時間複雜度、空間複雜度 時間複雜度 定義:基本操作重複執行的次數是問題規模n的某個函式,用T(n)表示,有輔助函式f(n),使得當n趨於無窮大時,T(n)/t(n)的極限值為不等於零的常數。記作T(n)=O(f(n)),稱O(f(n))為演算法的漸進時間複雜度,簡稱時間複雜度

常用演算法之:1最小二乘法(1

深度學習發展到如今的地位,離不開下面這 6 段程式碼。本文介紹了這些程式碼的創作者及其完成這些突破性成就的故事背景。每個故事都有簡單的程式碼示例,讀者們可以在 FloydHub 和 GitHub 找到相關程式碼。 最小二乘法 所有的深度學習演算法都始於下面這個數學公式(

各個排序演算法時間複雜度空間複雜度穩定性

排序演算法分類 排序演算法比較表格填空 排序演算法比較表格 1 歸併排序可以通過手搖演算法將空間複雜度降到O(1),但是時間複雜度會提高。注: 2 基數排序時間複雜度為O(N*M),其中N為資料個數,M為資料位數。 輔助記憶 時間複雜度記憶-

演算法時間複雜度和空間負責度最壞情況和平均情況

解決問題的效率與空間利用率,時間利用率,演算法效率都有關係。 演算法(Algorithm)是什麼呢? 輸入——接受一些輸入或無輸入輸出——產生輸出確定性——每條指令必須明確無歧義能行性——每條指令都可以執行,一個有限的指令集有窮性——執行一定步驟後終止 此外,衡量一個演