Привет,
Есть ли какие-либо данные о способе деления 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 будут иметь одинаковое количество элементов, но сумма (часть1) должна быть как можно ближе к сумме (часть2)
Например, если бы у нас было {2,4, 0,12, 1,26, 0,51, 0,70}, наилучшим разделением было бы {2,4, 0,12} и {1,26, 0,51, 0,70}.
Если это поможет, я пытаюсь реализовать алгоритм расщепления для кодирования Шеннона Фано.
Может быть, это поможет вам лучше понять мой вопрос http://en.wikipedia.org/wiki/Shannon%E2%80%93Fano_coding#Example
Любой вклад приветствуется, спасибо!