簡體   English   中英

我們如何證明算法的運行時限是緊的?

[英]How can we prove that the running time bound of an algorithm is tight?

假設我們可以證明用大小為n的輸入調用的算法在時間O(f(n))

我想證明這個運行時限很緊。 兩個問題:

  1. 提供特殊輸入並顯示運行時間至少為f(n)是否足夠?
  2. 我已經讀過,證明緊張的一種可能性是“減少排序”。 我不知道那是什么意思

提供特殊輸入並顯示運行時間至少為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.

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