我有 N 个长度为 L 的二进制序列,其中 N 和 L 可能非常大,而这些序列可能非常稀疏,比如 0 比 1 多得多。
我想从中选择M个序列,即b_1、b_2、b_3...,这样
b_1 | b_2 | b_3 ... | b_M = 1111...11 (L 1s)
有没有实现它的算法?
我的想法是:
STEP1:对于从1到L的位置,计算在该位置有1的序列的总数。将其命名为“拥有号码”
STEP2:考虑拥有数最小的位置,从该位置的拥有序列中选择1个数最多的序列。
STEP3:忽略选择的序列,更新拥有号码并返回STEP2。
我相信我的方法无法产生最佳答案。
有人有更好的主意吗?