众所周知,帕斯卡恒等式可以用于将从n个元素中选择k个组合编码为一个数字,该数字在0到
(n \choose k) - 1
范围内(我们称这个数字为组合索引),使用组合数系统。假设算术操作的时间恒定,此算法需要O(n)的时间。†
我有一个应用程序,其中k ≪ n,并且O(n)时间的算法是不可行的。是否有一种算法可以将0到(n \choose k) - 1
之间的数字双向分配给n个元素中选择k个组合,其运行时间为O(k)或类似时间复杂度?该算法不需要计算与组合数系统相同的映射,但是反向计算需要在类似的时间复杂度内可计算。
† 具体来说,从组合索引计算组合的算法需要 O(n) 的时间。如果您预先计算二项式系数,则从组合计算组合索引的时间为 O(k)。