Я ищу алгоритм для сегментации последовательности положительных чисел в n подпоследовательностей, так что стандартное отклонение суммы чисел в каждом подмножестве минимизируется.
Порядок номеров в каждой подпоследовательности должен быть таким же, как порядок в исходной последовательности
Например:
Предположим, что у меня есть последовательность {1,1,1,1,1,1,10,1}, которую я хотел сегментировать на 2 подпоследовательности.
Я считаю, что оптимальное решение будет {1,1,1,1,1,1}, {10,1}.
Сумма 1-й подпоследовательности равна 6, сумма второй подпоследовательности равна 11 Стандартное отклонение двух чисел составляет ~ 3,5, что, по моему мнению, является наименьшим возможным.
Предположим, что у меня есть последовательность {4,1,1,1,1,6}, которую я хотел бы сегментировать на 3 подпоследовательности.
Я считаю, что оптимальным решением было бы {4}, {1,1,1,1}, {6}
Сумма подпоследовательностей равна 4, 4 и 6.
Стандартное отклонение 3 чисел составляет ~ 1,15, что, по моему мнению, является наименьшим возможным.
Лучший алгоритм, который я смог найти, заключался в том, чтобы найти кумулятивную сумму каждого из чисел в последовательности и сегментировать последовательность на каждом интервале [totalSum/numSubsequences].
Например, учитывая последовательность {4,1,1,1,1,6}, суммарные суммы чисел каждой последовательности {4,5,6,7,8,14}. Общее число всех чисел в последовательности равно 14, поэтому, учитывая, что я хочу 3 подпоследовательности, я должен сегментировать последовательность, когда общее число достигает 14/3 = 4.66 и 2 * 14/3 = 9.333333.
Однако в последовательности, где общая сумма равна 4,66, нет фактического места, первое кумулятивное общее число равно 4, а следующее суммарное общее количество равно 5. Так что я должен округлить или округлить? В этом случае округление до 4 дает оптимальное решение, но это не всегда так. Лучшее, что я могу придумать, - попробовать каждую комбинацию округления вверх и вниз, но это приводит к сложности O (2 ^ numSubsequences).
Кажется, это тот тип вещи, который будет иметь существующий ранее алгоритм, однако мой Googling провалил меня. Я знаю Partition Problem, который является NP-полным, но это касается неупорядоченных множеств, а не упорядоченных последовательностей.
Любая помощь будет оценена.