枚举子集复杂度 O(n^3) 证明
困擾多年的問(wèn)題,居然在學(xué)習(xí)離散數(shù)學(xué)后的一分鐘內(nèi)得到解決。
形式化問(wèn)題為,求滿(mǎn)足 A ? B ? S A \sube B \sube S A?B?S 的有序?qū)? < A , B > <A,B> <A,B> 的個(gè)數(shù)。
法1
類(lèi)比子集數(shù)量的求法。每個(gè)元素有四種可能
- 同時(shí)在 A A A, B B B
- 在 A A A 不在 B B B
- 在 B B B 不在 A A A
- 都不在
其中由題,在 A A A 不在 B B B 不符合題意,所以每個(gè)元素有三種可能,最后是 3 n 3^n 3n
法2
按照 A A A 中的元素個(gè)數(shù) k k k 分類(lèi),對(duì)于一個(gè)固定的 k k k,有序?qū)τ? C ( n , k ) ? 2 n ? k C(n,k) \cdot 2^{n-k} C(n,k)?2n?k 個(gè),其中 C ( n , k ) C(n,k) C(n,k) 表示先選出某個(gè) A A A, 2 n ? k 2^{n-k} 2n?k 表示在剩下的元素任選,使之包含 A A A。
于是 N = ∑ k = 0 n C ( n , k ) ? 2 n ? k = ∑ k = 0 n C ( n , k ) ? 1 k ? 2 n ? k = ( 1 + 2 ) n = 3 n N = \sum_{k=0}^{n} C(n,k)\cdot 2^{n-k} = \sum_{k=0}^{n} C(n,k)\cdot 1^k \cdot 2^{n-k} = (1+2)^n = 3^n N=∑k=0n?C(n,k)?2n?k=∑k=0n?C(n,k)?1k?2n?k=(1+2)n=3n
反過(guò)來(lái)先選 B B B 也是一樣的,即 C ( n , k ) ? 1 n ? k ? 2 k C(n,k)\cdot 1^{n-k} \cdot 2^k C(n,k)?1n?k?2k
總結(jié)
以上是生活随笔為你收集整理的枚举子集复杂度 O(n^3) 证明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python中一般使用几个空格表示缩进_
- 下一篇: 国际化进程加速,上海树图区块链研究院联合