2016-04-03 86 views
3

我試圖來解決計算複雜度以下問題:算法的計算複雜性在大哦,大歐米茄和Theta

計算下面的算法和 的計算複雜度寫下它的複雜性在大O ,Big Omega and Theta

for i=1 to m { 
    x(i) =0; 
    for j=1 to n { 
     x(i) = x(i) + A(i,j) * b(j) 
    } 
} 

其中A是mxn,b是nx1。

我結束了與大O O(mn^2)Omega(1)Theta(mn^2)

+2

查看代碼的結構,我會說* O(mn)*以及* Omage(mn)*和* Theta(mn)* ... –

+1

是的,但歐米茄(1)非常鬆散。每個算法都以Omega(1)運行。 – blazs

回答

1

假設下面的語句在恆定時間用完:

x(i) = x(i) + A(i,j) * b(j) 

這是在這樣對待O(1),並且不依賴於值ij。既然你遍歷這個說法在內部for循環,正是n時候,你可以說,下面的代碼在運行爲O(n)

x(i) =0; 
for j=1 to n { 
    meth1 
} 

(假設分配在固定時間內要做的事)。再次,它不取決於i的確切值。最後,我們採取外環考慮:

for i=1 to m { 
    meth2 
} 

方法meth2重複正好m倍,從而緊上限在O(n×m個)時間複雜度。

由於沒有條件語句,也沒有遞歸和數據的結構bX不改變程序的執行,該算法也大歐米茄(MN)大西塔(mn)

當然,你可以高估大哦和低估大歐米茄爲:每算法,你可以說它是Ω(1)以及一些,這是O(2 ñ,但重要的是,你不會買那麼多。

1

回想一下f = Theta(g)當且僅當f=O(g)f=Omega(g)

可以在Theta(mn)時間(假設初始實現)和O(m)中的向量之和中計算矩陣向量乘積,因此總運行時間爲Theta(mn)。從這裏開始,時間也是O(mn)Omega(mn)