Если линии на самом деле являются путем, то, возможно, вы не будете против требования, чтобы каждый прямоугольник покрывал непрерывную часть пути.В этом случае есть динамическая программа, которая запускается за время O (n 2 r), где n - количество сегментов, а r - количество прямоугольников.
Вычислить таблицу с помощьюзаписи C (i, j), обозначающие стоимость покрытия сегментов 1,…, i прямоугольниками j.Повторение для i, j> 0,
C (0, 0) = 0
C (i, 0) = ∞
C (i, j) = minнад i '
Есть O (nr) записейкаждый из которых вычисляется за время O (n).Восстановите оптимальную коллекцию прямоугольников в конце, например, сохранив лучшее i для каждой записи.
Я не знаю простого, оптимального алгоритма для общего случая.Поскольку существуют «только» O (n 4 ) прямоугольников, каждый из ребер которых содержит конечную точку сегмента, я хотел бы сформулировать эту проблему как пример покрытия обобщенного набора.