Я ищу алгоритм для разбиения последовательности положительных чисел на n подпоследовательностей, чтобы стандартное отклонение суммы чисел в каждом подмножестве было минимальным.
Порядок чисел в каждой подпоследовательности должен совпадать с порядком в исходной последовательности
Например:
Предположим, у меня есть последовательность {1,1,1,1,1,1,10,1}, которую я хотел бы разделить на 2 подпоследовательности.
Я считаю, что оптимальным решением было бы {1,1,1,1,1,1}, {10,1}.
Сумма 1-й подпоследовательности равна 6, сумма 2-й подпоследовательности равна 11
.
Стандартное отклонение двух чисел составляет ~ 3,5, что, я полагаю, является наименьшим возможным.
Предположим, у меня есть последовательность {4,1,1,1,1,6}, которую я хотел бы разделить на 3 подпоследовательности.
Я считаю, что оптимальным решением было бы {4}, {1,1,1,1}, {6}
Сумма подпоследовательностей составляет 4, 4 и 6.
Стандартное отклонение трех чисел составляет ~ 1,15, что, я считаю, является наименьшим возможным.
Лучший алгоритм, который мне удалось придумать, - это найти кумулятивную сумму каждого из чисел в последовательности и сегментировать последовательность на каждом интервале [totalSum / numSubsequence].
Например, учитывая последовательность {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 ^ numSubsequence).
Похоже, это тот тип вещей, к которому нужно применить уже существующий алгоритм, однако мой поиск в Google не помог мне. Мне известна проблема Partition , которая является NP-полной, но которая касается неупорядоченных множеств, а не упорядоченных последовательностей.
Буду признателен за любую помощь.