Жадный алгоритм, начинающийся с a или b, всегда дает оптимальное решение.
Доказательство: рассмотрим множество S a всех подинтервалов, охватывающих a. Понятно, что один из них должен принадлежать к оптимальному решению. Если мы заменим его подинтервалом (a max , b max ) из S a , правая конечная точка которого b max максимальна в S a (достигает крайнего правого края), оставшийся непокрытый интервал (b max , b) будет подмножеством оставшегося интервала из оптимального решения, поэтому он может быть покрыт не больше субинтервалов, чем аналогичный непокрытый интервал из оптимального решения. Следовательно, решение, построенное из (a max , b max ) и оптимального решения для оставшегося интервала (b max , b), также будет оптимальным.
Итак, просто начните с a и итеративно выбирайте интервал, доходящий до крайнего правого края (и закрывающий конец предыдущего интервала), повторяйте, пока не нажмете b. Я считаю, что выбор следующего интервала может быть сделан в log (n), если вы сохраняете интервалы в расширенном дереве интервалов.