❶ 利用Dijkstra演算法求下圖中從頂點1到其它各頂點間的最短路徑,按下面表格形式
v1到v2:10為最短路徑;
v1到v3:7為最短路徑;
v1到v4:8為最短路徑;
v1到v5:v1-> v2 -> v5 =10+6= 16;v1v3v5=7+9=16;v1v4v6v5=8+5+2=15; 15為最短路徑;
v1到v6:v1v2v3v6=10+2+9=21;v1v3v6=7+9=16;v1v4v6=8+5=13;13為最短路徑;
v1到v7:v1v2v5v7=10+6+20=36;v1v3v5v7=7+9+20=36;v1v3v6v7=7+9+30=46;
v1v4v6v7=8+5+30=42;v1v4v6v5v7=35;35為最短路徑
Dijkstra:
求單源、無負權的最短路。時效性較好,時間復雜度為O(V*V+E)。源點可達的話,O(V*lgV+E*lgV)=>O(E*lgV)。當是稀疏圖的情況時,此時E=V*V/lgV,所以演算法的時間復雜度可為O(V^2)。若是斐波那契堆作優先隊列的話,演算法時間復雜度,則為O(V*lgV + E)。
以上內容參考:網路-最短路徑演算法
❷ 一個演算法的基本操作執行次數為(3n2+2nlog2n+4n-7)/(5n),則其時間復雜度表示為
演算法的時間復雜度是看基本操作的次數,但是基本操作在具體的程序分析時可能不一樣,有的在意元素之間比較的次數,有的在意元素插入或移位的次數,答案為O(n^1/2)可能是因為指定了某種特定的操作作為基本操作。
但是如果給定的基本操作次數為(3n2+2nlog2n+4n-7)/(5n),則時間復雜度應該為O(n)
個人理解,如有不對,請批評指正
❸ 演算法時間復雜度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什麼意思
演算法的時間復雜度是一個函數,它定量描述了該演算法的運行時間。這是一個關於代表演算法輸入值的字元串的長度的函數。時間復雜度常用大O符號表述,隨著模塊n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 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^3)
❹ 演算法時間復雜度
O(N!)、O(2 N)、O(N 2)、O(NlogN)、O(N)、O(logN)、O(1)...
代表: 最壞情況的用時
一個正整數的階乘(factorial)是所有小於及等於該數的正整數的積,並且0的階乘為1。自然數n的階乘寫作n!。1808年,基斯頓·卡曼引進這個表示法。
N 的 N 次方,^ 是上標的意思
如果 aˣ = N(a>0,且a≠1),那麼數 x 叫做以 a 為底 N 的對數,記作 x=logaN,讀作以 a 為底 N 的對數,其中 a 叫做對數的底數,N 叫做真數。
其中 x 是自變數,函數的定義域是(0,+∞),即 x>0。它實際上就是指數函數的反函數,可表示為 x= aʸ 。因此指數函數里對於 a 的規定,同樣適用於對數函數。
描述演算法復雜度時,常用o(1), o(n), o(logn), o(nlogn)表示對應演算法的時間復雜度,是演算法的時空復雜度的表示。不僅僅用於表示時間復雜度,也用於表示空間復雜度。
O後面的括弧中有一個函數,指明某個演算法的耗時/耗空間與數據增長量之間的關系。其中的n代表輸入數據的量。
時間復雜度為O(n),就代表數據量增大幾倍,耗時也增大幾倍,線性增長,比如常見的:
時間復雜度O(n^2),就代表數據量增大n倍時,耗時增大n的平方倍,這是比線性更高的時間復雜度。比如:
O(nlogn)同理,就是n乘以logn,當數據增大256倍時,耗時增大256*8=2048倍。這個復雜度高於線性低於平方。比如:
當數據增大n倍時,耗時增大logn倍(這里的log是以2為底的,比如,當數據增大256倍時,耗時只增大8倍,是比線性還要低的時間復雜度)。比如:
O(1)就是最低的時空復雜度了,也就是耗時/耗空間與輸入數據大小無關,無論輸入數據增大多少倍,耗時/耗空間都不變。 比如:
代入 N 以後的數值,和耗時的關系, 10 ^ 8 => 秒級 ,最大的 N 分別是: