Может быть, я наивен или делаю здесь какую-то ошибку, но я думаю, что не так уж сложно (хотя и не очевидно) увидеть, что алгоритм действительно оптимален.
Предположим, что у вас есть оптимальный раздел списка с максимальным количеством подсписков. Вы можете иметь или не иметь все элементы списка, но поскольку добавление элемента в допустимый список создает также действительные списки, давайте предположим, что любой возможный «оставшийся» элемент, который изначально не был назначен ни одному подсписку, был назначен произвольно один из его смежных подсписков; поэтому у нас есть правильное оптимальное разбиение списка, которое мы назовем P1.
Теперь давайте подумаем о разделе, который будет создавать жадный алгоритм, скажем, P2. Есть две вещи, которые могут произойти для первого подсписка в P2:
- Это может быть то же самое, что и первый подсписок в P1.
- Он может быть короче первого подсписка в P1.
В 1. вы должны повторить рассуждения, начиная со следующего элемента после первого подсписка. Если каждый последующий подсписок, созданный алгоритмом, равен списку в P1, то P1 и P2 будут равны.
В 2. вы бы тоже повторили рассуждения, но теперь у вас есть хотя бы один «лишний» предмет. Итак, опять же, следующий подсписок может:
2.1. Дойти до следующего подсписка в P1.
2.2. Конец перед следующим подсписком в P1.
И повторить. Таким образом, в любом случае у вас будет минимум столько же подсписков, сколько P1. Это означает, что P2 как минимум так же хорош, как и любой возможный раздел списка, и, в частности, любой оптимальный раздел.
Это не очень формальная демонстрация, но я думаю, что она действительна. Пожалуйста, укажите все, что, по вашему мнению, может быть неправильным.
person
jdehesa
schedule
08.10.2014
K
, а затем запустите новый раздел. Единственная гибкость, которую он допускает, — это продолжать расширять текущий раздел, когда его сумма уже равнаK
, но сразу видно, что это только снизит качество решения. - person AnT   schedule 08.10.2014