列舉子集為什麼是 O 3 n 的

2022-09-20 15:18:18 字數 652 閱讀 5810

列舉子集為什麼是 \(o(3^n)\) 的 .

考慮 一種常見的列舉子集方式:

for (int s = u; s; s = (s - 1) & u)
顯然單次列舉 \(s\) 的乙個子集是 \(o(2^)\) 的 .

為什麼列舉 \(s\) 的所有子集的子集的時間複雜度是 \(o(3^n)\) 的 .

顯然列舉大小為 \(n\) 的集合 \(s\) 的複雜度是

\[o\left(\sum_2^\right)

\]不難發現,\(s\) 中大小為 \(l\) 的子集個數是 \(\dbinom nl\),這是簡單的組合數學知識 .

轉而列舉 \(l\),於是原式就化為

\[o\left(\sum_^n\dbinom ni 2^i\right)

\]然後裡面這個東西可以由眾所周知的諤項式定理化簡

\[\begin\sum_^n\dbinom ni 2^i&=\sum_^n\dbinom ni 2^i1^\\&=1 + (1+2)^n\\&=o(3^n)\end

\]於是,列舉 \(s\) 的所有子集的子集的時間複雜度是 \(o(3^n)\) 的 .

證畢 .

感謝 soytony 神仙的指導 orz

感謝 fjy666 神仙的指導 orz

為什麼空集是集合的子集 集合的常考題

集合在全國卷中通常是在第乙個選擇題的位置,由此可以看出集合在高考中是十分基礎的,但同時也是必考內容。如果這個題沒有拿到分就意味著你比別人有了5分的差距。高考是個殘酷的考試,比別人低一分都可以讓你進不了想進的學府,更何況是5分。所以在高考中基礎分千萬不能丟,因此一定要打好基礎。下面我將介紹集合的相關題...

為什麼空集是集合的子集 高中數學 集合

第一章 集合與常用邏輯用語 第一節 集合 1 集合 集合是指具有某種特定性質的具體的或抽象的物件彙總成的集體,這些物件稱為該集合的元素。表示方法 集合a 其中a,b,c,d是集合a的元素,即用a a,b a c a d a表示,f不是集合a的元素,則f a。集合a是集合b的子集,則a b。集合a 常...

Hashmap的長度為什麼必須是2的n次方

從原始碼中我們可以看到獲取 key 所對應 node 陣列下標的方法是 length 1 hash,它與我們要求的hash length在length 是 2 的 n 次方的條件下是等價的,而用這種 的位運算的方法相比直接用取餘符號進行運算,效能更好。但是要明確一點,初始化時設定的長度不符合 2 的...