虽然我知道如何生成大小为n
的所有(k
个选择n
)位串,并且精确地将k
位设置为1,但我仍在努力寻找双射,得到i
和(1
选择n
)之间的数字k
作为输入,并以任意顺序输出第i
。
很显然,人们可以简单地枚举列表中的所有向量,然后输出列表中的第i
个条目,但是不幸的是,这种设置对我的设置要求很高的内存要求。
编辑:这也应该是一种高效的计算,对于每次调用双射都计算所有向量的列表也不是一种选择。
答案 0 :(得分:3)
直接的方法:
如果 i <(n-1选择k),则最左边的位为 0 ,而 i 递归确定其余位。否则,最左边的位是 1 ,而 i-(n-1选择k)递归确定其余位。在第二种情况下,最多有(n-1个选择k-1)的可能值 i-(n-1个选择k)。