Ако линиите всъщност са пътека, тогава може би няма да имате нищо против изискването всеки правоъгълник да покрива съседна част от пътя. В този случай има динамична програма, която се изпълнява за време O(n2 r), където n е броят на сегментите, а r е броят на правоъгълниците.
Изчислете таблица със записи C(i, j), обозначаващи разходите за покриване на сегменти 1, …, i с j правоъгълника. Повторението е, за i, j > 0,
C(0, 0) = 0
C(i, 0) = ∞
C(i, j) = min върху i' ‹ i от (C(i', j - 1) + [цената на правоъгълникът покрива сегменти i' + 1, …, i])
Има O(n r) записа, всеки от които се изчислява за време O(n). Възстановете оптималната колекция от правоъгълници в края, като например съхраните най-доброто i' за всеки запис.
Не знам за прост, оптимален алгоритъм за общия случай. Тъй като има „само“ O(n4) правоъгълника, всеки от ръбовете на който съдържа крайна точка на сегмент, бих се изкушил да формулирам този проблем като екземпляр на обобщено покритие на множеството.
person
Per
schedule
15.12.2011