给定一个固定长度的位数组以及它包含的 0 和 1 的数量,我如何安排所有可能的组合,以便返回第 i 个组合花费尽可能少的时间?它们返回的顺序并不重要。
这是一个例子:
array length = 6
number of 0s = 4
number of 1s = 2
可能的组合 (6! / 4! / 2!) 000011 000101 000110 001001 001010 001100 010001 010010 010100 011000 100001 100010 100100 101000 110000
问题 第 1 组合 = 000011 第 5 组合 = 001010 第 9 组合 = 010100
使用不同的排列方式,例如 100001 100010 100100 101000 110000 001100 010001 010010 010100 011000 000011 000101 000110 001001 001010
它应返回第 1 个组合 = 100001 第 5 个组合 = 110000 第 9 个组合 = 010100
目前我正在使用 O(n) 算法来测试每个位是 1 还是 0。问题是我需要处理很多非常长的数组(大约 10000 位),所以它仍然非常慢(而且缓存是不可能的)。我想知道您是否认为可能存在更快的算法。
谢谢