2012-08-11 39 views
2

我經歷了許多關於漸近符號的講座,視頻和來源。我明白O,Omega和Theta是什麼。但是在算法中,爲什麼我們總是隻使用Big Oh符號,爲什麼不是Theta和Omega(我知道它聽起來不太好用,但請幫助我)。根據算法,這個上限和下限究竟是什麼?通過分析算法漸近符號和形成復發關係

我的下一個問題是,我們如何從算法中找到複雜性。假設我有一個算法,我如何找到遞歸關係T(N),然後計算它的複雜度?我如何形成這些方程?就像使用遞歸方式的線性搜索一樣,T(n)= T(N-1)+1。怎麼樣?

如果有人能解釋我認爲我是一個noob,這將是很好的,這樣我就可以更好地理解。我找到了一些答案,但在StackOverFlow中不夠有說服力。

謝謝。

回答

0

當我們創建一個算法時,總是爲了成爲最快的,我們需要考慮每一種情況。這就是爲什麼我們使用O的原因,因爲我們想要重大複雜性並確保我們的算法永遠不會超過這個。

要評估複雜性,您必須計算步數。在等式T(n)= T(n-1)+ 1中,在計算T(0)之前會有N步,那麼滿足是線性的。 (我在談論時間複雜性,而不是空間複雜性)。

1

爲什麼我們比Theta和Omega使用的太大了:這是部分文化,而不是技術。當Theta確實更合適時,人們說O大O是非常普遍的。歐米茄在實踐中使用得並不多,因爲我們經常比上下界更關心上界,還因爲非平凡的下界往往難以證明。 (平凡的下界通常是那種說「你必須看所有的輸入,所以運行時間至少等於輸入的大小」)

當然,這些關於下界的評論也部分解釋了Theta,因爲Theta涉及上界和下界。

與復發關係:有沒有簡單的配方,解決所有情況。這裏是對相對簡單的遞歸算法的描述。

設N是初始輸入的大小。假設遞歸函數中有R個遞歸調用。 (例如:對於mergesort,R將是2.)進一步假設所有的遞歸調用都會將初始輸入的大小從N減小到相同的數量(例如:對於mergesort,M將爲N/2)。最後,假設遞歸函數在遞歸調用之外W工作(例如:for mergesort,W將合併爲N)

然後,遞歸關係爲T(N)= R * T(M)+ W(例如:for mergesort,this is T (N)= 2 * T(N/2)+ N)