時間演算法復雜度
❶ 演算法的時間復雜度是指什麼具體點
演算法復雜度不是簡單的時間的度量
是用來評價演算法優劣程度的依據
比如,一個程序要掃描100 * n * n + 10000 * n + 99999遍,那麼時間復雜度是O(n^2)
也就是說,時間復雜度只取次數最高的項,並且忽略系數
所以,時間復雜度是用來描述隨著 n 的增大,演算法耗時「增大」的!不是用來描述運行所花時間的(這個我們初中老師給我們強調了半天)
還有一點,O(9999999999)(實際應寫為O(1),這里只是表達意思)和O(n)的演算法那個好?
答案是O(9999999999),因為他的耗時不隨n的增大而變化,所以他更優
一般來說,演算法的好壞是這樣的 (>表示好於) O(1) > O(logn) > O(n) > O(n logn) > O(n^2) > O(n^3) > O(2^n) > O(n!)
❷ 時間復雜度怎麼計算
1. 一般情況下,演算法的基本操作重復執行的次數是模塊n的某一個函數f(n),因此,演算法的時間復雜度記做:T(n)=O(f(n))
分析:隨著模塊n的增大,演算法執行的時間的增長率和f(n)的增長率成正比,所以f(n)越小,演算法的時間復雜度越低,演算法的效率越高。
2. 在計算時間復雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出T(n)的同數量級(它的同數量級有以下:1,Log2n ,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出後,f(n)=該數量級,若T(n)/f(n)求極限可得到一常數c,則時間復雜度T(n)=O(f(n))
例:演算法:
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
c[ i ][ j ]=0; //該步驟屬於基本操作 執行次數:n的平方 次
for(k=1;k<=n;++k)
c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //該步驟屬於基本操作 執行次數:n的三次方 次
}
}
則有 T(n)= n的平方+n的三次方,根據上面括弧里的同數量級,我們可以確定 n的三次方 為T(n)的同數量級
則有f(n)= n的三次方,然後根據T(n)/f(n)求極限可得到常數c
則該演算法的 時間復雜度:T(n)=O(n的三次方)
❸ 時間復雜度計算
簡單理解,時間復雜度就是執行語句被調用了多少次。 (1)如果只調用了一次,如: x=5; if(x<-4) {x=x+4;} else {x=x+3;} 在大括弧中的內容,只會調用一個語句,那麼O(n)=1; (2)如果調用了兩次,如: x=5; if(x<-4) {x=x+4;} else {x=x+3;} x=x+56; 在大括弧中的內容,只會調用一個語句,但是在最後,還有一個計算公式要調用語句;總共加起來就是調用2次。那麼O(n)=2; (3)用1個FOR循環調用 for(x=0;x
❹ A*演算法的時間復雜度是多少
從數學上定義,給定演算法A,如果存在函數F(n),當n=k時,F(k)表示演算法A在輸入規模為k的情況下的運行時間,則稱F(n)為演算法A的時間復雜度。這里首先要明確輸入規模的概念。關於輸入規模,不是很好下定義,非嚴格的講,輸入規模是指演算法A所接受輸入的自然獨立體的大小。例如,對於排序演算法來說,輸入規模一般就是待排序元素的個數,而對於求兩個同型方陣乘積的演算法,輸入規模可以看作是單個方陣的維數。為了簡單起見,總是假設演算法的輸入規模是用大於零的整數表示的,即n=1,2,3,……,k,…… 對於同一個演算法,每次執行的時間不僅取決於輸入規模,還取決於輸入的特性和具體的硬體環境在某次執行時的狀態。所以想要得到一個統一精確的F(n)是不可能的。為了解決這個問題,做以下兩個說明: 1.忽略硬體及環境因素,假設每次執行時硬體條件和環境條件是完全一致的。 2.對於輸入特性的差異,將從數學上進行精確分析並帶入函數解析式。
❺ 演算法時間復雜度是多少
演算法的時間復雜度是一個函數,它定性描述該演算法的運行時間。
這是一個代表演算法輸入值的字元串的長度的函數。時間復雜度常用大O符號表述,不包括這個函數的低階項和首項系數。使用這種方式時,時間復雜度可被稱為是漸近的,亦即考察輸入值大小趨近無窮時的情況。
演算法的時間復雜度取決於什麼
演算法的時間復雜度取決於待處理數據的狀態以及問題的規模。演算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化演算法在內的一些演算法,包含了一些隨機輸入。
❻ 什麼是演算法的時間復雜度
是說明一個程序根據其數據n的規模大小 所使用的大致時間和空間
說白了 就是表示 如果隨著n的增長 時間或空間會以什麼樣的方式進行增長
例
for(int i = 0; i < n;++i)
;
這個循環執行n次 所以時間復雜度是O(n)
for(int i = 0; i< n;++i)
{
for(int j = 0; j< n;++j)
;
}
這嵌套的兩個循環 而且都執行n次
那麼它的時間復雜度就是 O(n^2)
時間復雜度只能大概的表示所用的時間
而一些基本步驟 所運行的時間不同 我們無法計算 所以省略
如
for(int i = 0;i < n;++i)
a = b;
和
for(int i = 0;i < n;++i)
;
這個運行的時間當然是第二個快 但是他們的時間復雜度都是 O(n)
判斷時間復雜度看循環
❼ 如何計算一個演算法的時間復雜度
求解演算法的時間復雜度的具體步驟是:
1、找出演算法中的基本語句:
演算法中執行次數最多的那條語句就是基本語句,通常是最內層循環的循環體。
2、計算基本語句的執行次數的數量級:
(1)只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函數中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的系數。
(2)這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
3、用大Ο記號表示演算法的時間性能:
(1)將基本語句執行次數的數量級放入大Ο記號中。
(2)如果演算法中包含嵌套的循環,則基本語句通常是最內層的循環體,如果演算法中包含並列的循環,則將並列循環的時間復雜度相加。例如:
for(i=1;i<=n;i++)x++;for(i=1;i<=n;i++)
for(j=1;j<=n;j++)x++;
(3)第一個for循環的時間復雜度為Ο(n),第二個for循環的時間復雜度為Ο(n2),則整個演算法的時間復雜度為Ο(n+n2)=Ο(n2)。
❽ 演算法時間復雜度指的是什麼
時間復雜性,又稱時間復雜度,演算法的時間復雜度是一個函數,它定性描述該演算法的運行時間。這是一個代表演算法輸入值的字元串的長度的函數。時間復雜度常用大O符號表述,不包括這個函數的低階項和首項系數。使用這種方式時,時間復雜度可被稱為是漸進的,亦即考察輸入值大小趨近無窮時的情況。
空間復雜性介紹
空間復雜性是指計算所需的存儲單元數量。隸屬於計算復雜性(計算復雜性由空間復雜性和時間復雜性兩部分組成)。演算法的復雜性是演算法運行所需要的計算機資源的量,需要時間資源量稱為時間復雜性,需要空間資源的量成為空間復雜性。
一個演算法的空間復雜度S(n)定義為該演算法所耗費的存儲空間,它也是問題規模n的函數。漸近空間復雜度也常常簡稱為空間復雜度。演算法的時間復雜度和空間復雜度合稱為演算法的復雜度。
❾ 演算法的時間復雜度
當然應該是O(n^2)
----------------------------------------------------------
演算法分析,就是復雜度的問題。
復雜度只算「最要命的」,比如,執行n^2的演算法前來個快排根本不拖速度,n^2多的都豁出去了不在乎區區一個nlogn。
書里對復雜度進行了嚴格的定義,包括O()、o()、Θ()、Ω()四種符號。
簡單地說,
O(n^2)就是頂破天了搞個n^2次;
o(n^2)就是天花板不到n^2,比n^2矮一點(比如希爾排序就是o(n^2),因為它再倒霉也達不到n^2);
Ω(n^2)就是說某個演算法隨便怎麼至少都要耗費n^2,比如所有基於比較的排序都是Ω(nlogn);
Θ(n^2)就是說它即是O(n^2)又是Ω(n^2),被天花板和水泥地夾在中間了,動不了了,就是它了。
❿ 演算法的時間復雜度
時間復雜度的表示: O(執行次數)
一個有序的元素列表查找某個元素可以用二分查找,每次取中間元素進行比較大小,直到相等。因為每次不符合時總會排除一半的元素 ,所以查找的次數為log2n,那麼時間復雜度為O(log2n)。如果是一個無序的元素列表,查找從位置0開始,那麼簡單查找的次數為n,那麼時間復雜度為O(n)。
除此之外快速排序為O(n*log2n),選擇排序為O(n*n)。
旅行演算法就是n個旅行地點,你可從某個地方出發到餘下某下一個地點,走完所有地點。從最開始時走有n個地點可以選擇,接下來再走就有n-1個地點可以選擇,這樣直到只有一個地點可以選擇。那麼所有你可走的路徑就是一個階乘,選擇復雜度為O( n!)。
關於數組和鏈表的操作。先說數組,因為你有了元素的索引,可以隨機訪問,你就能快速找到這個元素,而且所有元素的讀取都是一樣的步驟,所以讀取時間復雜度為O(1),數組的插入和刪除的時間復雜度為O(n),因為要移動元素。鏈表的特性是每個都存儲了下一個元素的地址,只能順序訪問。那麼讀取插入刪除的時間復雜度分別是O(n)、O(1)、O(1)。