组合的编码/解码

n 元集合 {0,1,…,n-1} 的 k 元子集共有 \(n\choose k\) 个。 设某个子集的元素为 \(c_1<c_2<\cdots<c_k\), 则该子集可以编码为 \[{c_k\choose k} + \cdots + {c_2\choose 2} + {c_1\choose 1}.\]

此编码最小值为 0, 最大值为 \[{n-1\choose k} + \cdots + {n-k+1\choose 2} + {n-k\choose 1} = {n\choose k}-1.\] 上式的证明: 在两边加上 \(n-k\choose 0\) 并使用恒等式 \({n\choose k}={n-1\choose k-1}+{n-1\choose k}\)。


分享