簡體   English   中英

當時間復雜度為O(n!)和O(2 ^ n)時?

[英]When time complexity is O(n!) and O(2^n)?

我正在練習算法,但始終對O(n!)和O(2 ^ n)之間的時間復雜度感到困惑。 我知道O(2 ^ n)可以理解為選擇或不選擇集合中的一項,通常喜歡遞歸(或回溯?)情況。 但是回溯問題有時也標記為O(n!)?

有人可以用簡單的語言解釋一下嗎?

2 ^ N:包含/排除每個元素。 順序無所謂。

N !:遍歷元素的每個排列。 順序很重要。

Big O表示法不會產生確切的結果,而是通過指定一些上限函數來估計函數的增長。 為了表示此類功能的最相關的族,通常使用對數,線性,多態和指數形式的術語。 O(n!)和O(2 ^ n)都屬於指數增長類別。 只是O(n!)增長更快。

因此,得出的結論是,Big O允許有些草率,並且偶爾會有一些函數更接近上限,但不同的作者可能會使用任一個術語來引用相同的算法。

關於回溯,每個步驟中解決方案的選擇可能會受到前一步中所做選擇的限制,因此,按照階乘模式,每個步驟中可能的選擇數量都會減少一個。 但是,並非所有回溯的情況都屬於此類,並且如果每個步驟中解決方案的選擇均與先前步驟無關,則可能涉及復雜度O(2 ^ n)甚至O(n ^ n)。

編輯:校正了O(2 ^ n),O(n!)和O(n ^ n)之間的增長關系

暫無
暫無

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

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