我有一个N_w
权重w_i
的列表,其中不同的权重不一定相等。此列表需要在N_b
有序二进制位中均匀分布,其中N_b
< N_w
,而保留订单。
示例
权重列表(1,2,1,5,3)
可以3
,(1,2,1)
,(5)
分发到(3)
个分箱。虽然它不统一,但这是在保持秩序的约束下的最优分布。
是否有任何实用的算法可以解决这个问题(粗暴强制除外),我可以看一下?
更新
权重N_w
的数量为O(1e6)
。如果垃圾箱的数量为O(1e5)
。我正在寻找理想情况下最差O(N log N)
的算法。
答案 0 :(得分:0)
如果您使用爬山算法怎么办?给定数字序列,您可以放置几个分隔符,将数字分成多个分区。每个突变你移动一个分隔一个位置。我希望这种方法没有本地 - 但只有全球最优。
这里有一个如何评估你的例子的样本。我根据最小和最大的bin之间的差异来评估状态。符号如下: 州 => stateScore
步骤(3)并非真正的攀爬步骤,但它确实保持相同的高度,因此它可能仍然可行。