avva: (Default)
[personal profile] avva
(будет интересно только программистам)

На работе рассказали интересную задачу. Пусть дан прямоугольный лист металла известных размеров. Из-за дефектов производства на листе есть точки, в которых металл слишком слаб - дан список таких точек, с координатами каждой. Задача: найти наибольший по площади прямоугольник внутри листа, не содержащий ни одной дефективной точки внутри себя (на границе - можно).

Искать следует только среди прямоугольников со сторонами, параллельными исходному (более общий вопрос, в котором искомый прямоугольник может быть повернут относительно всего листа, можно считать отдельной задачей - ее я вообще не знаю, как решать).

Date: 2008-04-24 09:14 am (UTC)
From: [identity profile] zuber.livejournal.com
Например, такое дерево:
Image

Date: 2008-04-24 10:31 am (UTC)
From: [identity profile] zuber.livejournal.com
И очевидное направление оптимизации: не перебирать все листья для очередной точки, а "спускать" точку из вершины, отсекая сразу ложные направления.

Если в указанном примере была бы четвёртая точка вблизи левого верхнего угла, перебор множества листьев второй и четвёртой ветви заведомо не даст результата.

Date: 2008-04-25 10:38 am (UTC)
From: [identity profile] zuber.livejournal.com
Следующий этап оптимизации заключается в упорядочивании точек. Есть ощущение, что надо начинать с точки, вертикаль и горизонталь через которую поделит точки на примерно равное количество. На следующих этапах в каждом из полученных горизонтальных и вертикальных прямоугольников берётся "средняя" точка, лежащая в их пределах. Это сделает "спуск" точки более эффективным.

January 2026

S M T W T F S
    1 2 3
4 5 6 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 7th, 2026 03:42 pm
Powered by Dreamwidth Studios