簡體   English   中英

排序算法的上界和下界

[英]Upper bound and lower bound of sorting algorithm

這是一個非常簡單的問題,但我正在努力完全理解這個概念。

我試圖理解以下陳述之間的區別:

  1. 存在一種算法,其在最佳情況下對O(n)中的n個數組進行排序。
  2. 在最佳情況下,每個算法都在O(n)中對n個數字的數組進行排序。
  3. 存在一種算法,其在最佳情況下對Omega(n)中的n個數組進行排序。
  4. 在最佳情況下,每個算法都在Omega(n)中對n個數字的數組進行排序。

我將首先解釋是什么讓我發瘋。 我不確定1和3 - 但我知道其中一個答案是正確的,只需指定一個案例,而另一個案例答案是正確的,通過檢查所有可能的輸入。 因此,我知道其中一個必須是真的,只需指定數組已經排序但我無法分辨哪個。 我的老師總是讓我思考這個問題就像我們正在研究誰是班上最高級的人,再次選擇其中一個選項(1,3)就足以說明他是,並且沒有理由去檢查所有班級。

我知道如果我們要檢查最壞的情況,那么這些陳述都不可能是真的,因為沒有任何假設或額外記憶的最佳排序算法是Omega(nlogn)

重要說明:我不是在尋找一種解決方案(一種能夠進行匹配排序的算法) - 只是試圖更好地理解這個概念。

謝謝!

對於1 + 3問你自己 - 你知道一個算法可以在Theta(n)最佳情況下對數組進行排序 - 如果答案是真的,那么1 + 3都是真的 - 因為Theta(n)是O(n) [intersection] Omega(n) ,因此如果你有這樣的算法(以Theta(n)最佳情況運行) - 1 + 3都是正確的。
提示:優化的冒泡排序

對於2 :問自己 - 每個算法是否在O(n)最佳情況下對一組數字進行排序? 您是否知道具有最差情況和最佳情況相同時間復雜度的算法? 如果你取消所有優化,上述冒泡排序會發生什么?

4 :問問自己 - 你需要閱讀所有元素以確保數組排序嗎? 如果你這樣做 - Omega(n)是一個確定的下限,你就不能比它更好。

祝好運!

顯然,差異在於“O”和“Omega”。 一個人說“上升不快”,第二個說“上升不慢”。

確保您了解這些術語之間的區別,並且您將看到句子中的差異。

1和3都表示完全不同的東西,就像2和4一樣。

看看那些(那些不一樣!):

1~存在一種算法,對於10個項目,在最佳情況下不超過30個。
3~存在一種算法,在最佳情況下10項不小於30。

2~在10種情況下,每種算法在最佳情況下不超過30。
4~最好的情況下10個項目的每個算法不少於30個。

你現在感覺到了區別嗎? 與O / Omega的區別相似,但調查的主題不同。 上面的例子說明了某些點/情況下的不同性能,而O / Omega表示法告訴你與數據大小相關的性能,但只有當數據“足夠大”時,無論是三項還是數百萬,它會降低常數因素:

function 1000000*n is O(n)
function 0.00000*n*n is O(n^2)

對於少量數據,第二個顯然非常好於第一個。 但隨着數據量的增加,第一次開始變得更好!

將上述示例重寫為“更合適”的術語,與原始句子更相似:

1~存在一種算法,對於多於N個項目,在最佳情況下不超過X * N.
3~存在一種算法,對於多於N個項目,在最佳情況下不小於X * n。

2~每個算法,對於N個以上的項目,在最佳情況下不超過X * N.
4~每個算法,對於N個以上的項目,在最佳情況下不小於X * N.

我希望這能幫助你“看到”/“感受”差異!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM