问候,
有没有办法将一个std::vector分成两个相等的部分?我需要找到|part1 - part2|之间最小可能的差异。
这是我现在的做法,但你可能能看出它在某些情况下会产生非最优的分割。
auto mid = std::find_if(prim, ultim, [&](double temp) -> bool
{
if(tempsum >= sum)
return true;
tempsum += temp;
sum -= temp;
return false;
});
向量已按从高到低的顺序排序,值确实可能出现两次。 我不期望part1和part2具有相同数量的元素,但sum(part1)应尽可能接近sum(part2)
例如,如果我们有{2.4,0.12,1.26,0.51,0.70},最佳拆分将是{2.4,0.12}和{1.26,0.51,0.70}。
如果有帮助的话,我正在尝试实现Shannon Fano编码的拆分算法。
也许这会帮助你们更好地理解我的问题 http://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding#Example 感谢任何意见!
|sum(part1) - sum(part2)|
吗?您是否希望part1
和part2
具有相同数量的元素? - In silico