[英]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.