Вход


Главная страница >> Учебный процесс >> Задачник >> Олимпиадные задачи (с решениями) >> Учебный процесс >> Задачник >> Олимпиадные задачи (с решениями) >> Рекурсия >> Номер 15

[Назад]    [Содержание ]    [Вперед]

  


Номер 15


  Условие: Номер 15


Задача 14. Дан выпуклый n-угольник, n=>3, своим обходом по контуру. Разбить его на треугольники (n-3)-мя диагоналями, непересекающимися кроме как по концам, таким образом чтобы а) Cумма их длин была минимальной; б) Максимальная из диагоналей имела наименьшую длину.

  Решение задачи: Номер 15


Решение задачи 14. а) Обозначим вершины N-угольника x(0), ..., x(N-1) в порядке обхода по контуру. В дальнейшем будем считать, что если у нас в выкладках встречается вершина с индексом k, то это то же, что и вершина с номером k mod N (остаток от деления k на N). Рассмотрим выпуклый L-угольник, вершинами которого являются L последовательных вершин данного N-угольника, начиная с x(p) и до x(p+L-1) (в порядке обхода по контуру). У этого L-угольника будем считать, что отрезок (x(p),x(p+L-1)) - это его диагональ. Сумму диагоналей этой фигуры обозначим S(p,p+L-1). Очевидно, что по условию задачи: S(p,p)=0; S(p,p+1)=0 (у точки и отрезка нет диагоналей), S(p,p+2)=d(p,p+2) (тут d(p,p+2) - длина отрезка (x(p),x(p+2))). Предположим, что мы знаем S(p,p+L-1) для всех p=0, ...,N-1 и L=1,...k. Найдем S(p,p+k). Мы знаем, что диагонали разбивают k+1 угольник на треугольники, и что (x(p),x(p+k)) - диагональ, т.е. одна из сторон какого-то треугольника. Итак, мы зафиксировали две вершины треугольника x(p) и x(p+k). Третьей вершиной может быть либо x(p+1), либо x(p+2),..., либо x(p+k-1). Если мы считаем, что третья вершина это x(i), то сумма диагоналей будет d(p,p+k) + S(p,i) + S(i,k). (1) Тут мы уже знаем S(p,i) и S(i,k) - они, по предположению, были вычислены на предыдущих шагах. d(p,p+k) - это расстояние между вершинами x(p) и x(p+k), его мы тоже можем вычислить. Так как нас интересует минимальная сумма триангуляции (разбиения на треугольники), то мы ищем выражение (1) с минимальным значением S(p,p+k)=d(p,p+k)+ min{S(p,i)+S(i,k)} (2) i при i=p+1,p+2,...,k-1. Находим S(p,p+k) для каждого p=0,...,N-1. Минимум S(p,p+N-2) по p=0,...,N-1, и даст искомую триангуляцию (действительно, S(p,p+N-2) есть стоимость разбивки фигуры после проведения N-3 диагоналей). б) Алгоритм остается тем же, за исключением того, что вместо формулы (2) надо использовать следующую: S(p,p+k)={d(p,p+k),S(p,i),S(i,k)}, где S(p,p+k) - длина максимальной диагонали в фигуре с вершинами x(p), x(p+1), ...,x(p+k) (отрезок (x(p),x(p+k)) считается диагональю). Мы берем минимум по всем возможным разбивкам фигуры, а стоимость разбивки определяется как максимум из длины диагонали d(p,p+k) и длин максимальных диагоналей S(p,i) и S(i,k).

Назад



[Назад]    [Содержание ]    [Вперед]

  


  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017