[英]How can we prove that the running time bound of an algorithm is tight?
假設我們可以證明用大小為n
的輸入調用的算法在時間O(f(n))
。
我想證明這個運行時限很緊。 兩個問題:
f(n)
是否足夠? 提供特殊輸入並顯示運行時間至少為f(n)是否足夠?
是的,假設你在談論最壞情況的復雜性 。
如果你在談論最壞情況的復雜性 - 並且你已經證明它在O(f(n))
,如果你找到一個比C*f(n))
“更差”的輸入對於某個常數C
- 你有效地證明了該算法(在最差情況下性能)是Ω(f(n))
,並且因為O(f(n)) [intersection] Ω(f(n)) = Theta(f(n))
,這意味着你的在最壞情況分析下,算法在Theta(f(n))
運行。
請注意 ,它實際上應該是一個“家庭”的例子,因為如果我聲稱“是的,但這只適用於小n
值,而不是n>N
(對於某些N
),你可以告訴我這個系列示例還涵蓋了n>N
的情況,並且仍然有效。
對稱地,如果你證明一個算法具有Ω(f(n))
最佳案例性能,並且你發現某些輸入比某些常數C
“更好”(更快)地運行C*f(n))
對於某些常數C
,你有效地證明了在最佳案例分析下,算法是Theta(f(n))
。
這個技巧不適用於平均案例分析 - 你應該計算運行時的預期,而單個例子沒有幫助。
我已經讀過,證明緊張的一種可能性是“減少排序”。 我不知道那是什么意思
這樣做是為了證明一個更強大的主張,即沒有算法(根本沒有)可以在所需的時間解決某些問題 。
它的常見用法是假設有一些黑盒算法A
在某個o(g(n))
時間內運行,然后使用A
構建一個在o(nlogn)
時間內運行的排序算法。 然而,由於排序是Ω(nlogn)
問題,我們有一個矛盾,我們可以得出結論關於A
假設是錯誤的,並且它不能在期望的時間運行。
這有助於我們證明一個更強大的主張:不僅OUR算法具有此下限,而且解決特定問題的所有算法都具有此下限。
ad 1。:是的,但您必須能夠為任何n找到大小為n的輸入。 以9個步驟處理的大小3的示例實際上沒有任何證據。
ad 2。:如果你可以修改一系列元素,以便你的算法有效地對它進行排序(在輸出一些處理后得到一個排序的序列),你就減少了對它的排序。 並且因為排序(通過比較)不能比O(n log(n))快,所以這可以用來證明你的算法不能比O(n log(n))更快。
當然,輸入和輸出處理函數不能慢於或等於O(n log(n)),以使此參數有效,否則您可以對數組進行排序並證明只返回O(1)算法輸入數組實際上至少是O(n log(n)):)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.