演算法復雜度表
⑴ C語言 各常見排序法的時間復雜度 急 請簡單說明
選擇排序演算法復雜度是O(n^2)。
插入排序是O(n^2)
快速排序快速排序是不穩定的。最理想情況演算法時間復雜度O(nlog2n),最壞O(n^2)。
堆排序演算法時間復雜度O(nlogn)。
歸並排序的時間復雜度是O(nlog2n)。
⑵ 演算法空間復雜度具體怎麼算
數據結構中演算法空間復雜度計算方法:
一個演算法的空間復雜度只考慮在運行過程中為局部變數分配的存儲空間的大小,它包括為參數表中形參變數分配的存儲空間和為在函數體中定義的局部變數分配的存儲空間兩個部分。
若一個演算法為遞歸演算法,其空間復雜度為遞歸所使用的堆棧空間的大小,它等於一次調用所分配的臨時存儲空間的大小乘以被調用的次數(即為遞歸調用的次數加1,這個1表示開始進行的一次非遞歸調用)。
空間復雜度(Space Complexity)是對一個演算法在運行過程中臨時佔用存儲空間大小的量度,記做S(n)=O(f(n))。
而一般的遞歸演算法就要有O(n)的空間復雜度了,因為每次遞歸都要存儲返回信息。一個演算法的優劣主要從演算法的執行時間和所需要佔用的存儲空間兩個方面衡量。
⑶ 演算法時間復雜度有幾種
演算法時間復雜度有3種:
1、常數階O(1),對數階O(log2n)(以2為底n的對數,下同),線性階O(n),
2、線性對數階O(nlog2n),平方階O(n^2),立方階O(n^3),...,
3、k次方階O(n^k),指數階O(2^n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
(3)演算法復雜度表擴展閱讀:
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),存在一個正常數c使得fn*c>=T(n)恆成立。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間復雜度,簡稱時間復雜度。
在各種不同演算法中,若演算法中語句執行次數為一個常數,則時間復雜度為O(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n^2+3n+4與T(n)=4n^2+2n+1它們的頻度不同,但時間復雜度相同,都為O(n^2)。
⑷ 數據結構演算法復雜度
簡單理解,時間復雜度就是執行語句被調用了多少次。
(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<n;x++)
{x=x+1;}
x會從0到n-1循環,執行的語句就是將當前x值加入新的x中,總共調用n次;那麼O(n)=n;
(4)用2個嵌套FOR循環調用
for(x=0;x<n;x++)
{
for(y=1;y<=n;y++)
{x=x+y;}
}
遇到嵌套循環,可以先將外面的FOR語句中的變數固定為初始值x=0,主要看裡面的FOR語句的時間復雜度,很明顯,裡面語句執行次數是從1到n總共調用n次,O(n)=n;這還只是x=0時的調用。x可以從0到n-1,共n次。每次調用都會執行n次調用y的情況,因此,執行語句x=x+y;總共會調用n*n次。O(n)=n^2。
數執行語句的執行次數,就是時間復雜度。注意:
(1)找到正確的執行語句。
(2)for循環中的初始值和終止值。
for(i=0;i<n;i++) i值變化是從0到n-1,共n次。
for(i=0;i<=n;i++) i值變化是從0到n,共n+1次。
(3)注意for循環的調用順序,從裡面到外面進行的。
⑸ 如何分析時間復雜度(線性表)
演算法分析
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
1、時間復雜度
(1)時間頻度
一個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機運行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且一個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數多,它花費時間就多。一個演算法中的語句執行次數稱為語句頻度或時間頻度。記為T(n)。
(2)時間復雜度
在剛才提到的時間頻度中,n稱為問題的規模,當n不斷變化時,時間頻度T(n)也會不斷變化。但有時我們想知道它變化時呈現什麼規律。為此,我們引入時間復雜度概念。
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近於無窮大時,T(n)/f(n)的極限值為不等於零的常數,則稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間復雜度,簡稱時間復雜度。
在各種不同演算法中,若演算法中語句執行次數為一個常數,則時間復雜度為O(1),另外,在時間頻度不相同時,時間復雜度有可能相同,如T(n)=n2+3n+4與T(n)=4n2+2n+1它們的頻度不同,但時間復雜度相同,都為O(n2)。
按數量級遞增排列,常見的時間復雜度有:
常數階O(1),對數階O(log2n),線性階O(n),
線性對數階O(nlog2n),平方階O(n2),立方階O(n3),...,
k次方階O(nk),指數階O(2n)。隨著問題規模n的不斷增大,上述時間復雜度不斷增大,演算法的執行效率越低。
2、空間復雜度
與時間復雜度類似,空間復雜度是指演算法在計算機內執行時所需存儲空間的度量。記作:
S(n)=O(f(n))
我們一般所討論的是除正常佔用內存開銷外的輔助存儲單元規模。
⑹ 各種排序法的時間復雜度到底多少
根據《演算法導論(中文版)》P83表格以及《演算法(中文版)》部分章節內容:
演算法最壞情況運行時間平均情況
冒泡&&插入&&選擇排序 n^2n^2
快速排序n^2 n*log n
希爾排序(希爾增量) n^2 n^(1.3 - 2)
堆排序 n*log n n*log n
註:希爾排序的性能依賴於選擇的增量。
⑺ 各種演算法的時間復雜度
各種演算法的時間復雜度是不一樣的,每一種演算法都有它的優缺點,在使用的時候我們加以區別
⑻ 各種排序演算法的復雜度
冒泡法,交換法,插入法O(n*n),
快速排序,堆排序O(log2(n)*n),
⑼ 所有排序演算法的時間復雜度
冒泡排序是這樣實現的:
首先將所有待排序的數字放入工作列表中。
從列表的第一個數字到倒數第二個數字,逐個檢查:若某一位上的數字大於他的下一位,則將它與它的下一位交換。
重復2號步驟,直至再也不能交換。
冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。
選擇排序
選擇排序是這樣實現的:
設數組內存放了n個待排數字,數組下標從1開始,到n結束。
i=1
從數組的第i個元素開始到第n個元素,尋找最小的元素。
將上一步找到的最小元素和第i位元素交換。
如果i=n-1演算法結束,否則回到第3步
選擇排序的平均時間復雜度也是O(n^2)的。