Jump to content

Алгоритм Фортуны

Анимация алгоритма Фортуны
Анимация алгоритма Фортуны

Алгоритм Фортуны представляет собой алгоритм прогонки линий для создания диаграммы Вороного из набора точек на плоскости с использованием времени O ( n log n ) и пространства O ( n ). [ 1 ] [ 2 ] Первоначально он был опубликован Стивеном Фортьюном в 1986 году в его статье «Алгоритм развертки для диаграмм Вороного». [ 3 ]

Описание алгоритма

[ редактировать ]

Алгоритм поддерживает как линию развертки , так и линию пляжа , которые движутся через плоскость по мере выполнения алгоритма. Линия развертки — это прямая линия, которую мы условно можем считать вертикальной и движущейся слева направо по плоскости. В любой момент работы алгоритма входные точки слева от линии развертки будут включены в диаграмму Вороного, тогда как точки справа от линии развертки еще не будут учитываться. Линия пляжа представляет собой не прямую линию, а сложную кусочную кривую слева от линии развертки, составленную из кусков парабол ; он отделяет часть плоскости, в пределах которой может быть известна диаграмма Вороного, независимо от того, какие другие точки могут находиться справа от линии развертки, от остальной части плоскости. Для каждой точки слева от линии развертки можно определить параболу из точек, равноудаленных от этой точки и от линии развертки; линия пляжа является границей объединения этих парабол. По мере продвижения линии развертки вершины береговой линии, в которых пересекаются две параболы, очерчивают края диаграммы Вороного. Линия пляжа продвигается вперед, сохраняя каждое основание параболы точно на полпути между точками, первоначально пройденными линией развертки, и новым положением линии развертки. Математически это означает, что каждая парабола формируется с использованием линии развертки в качестве директриса и точка входа в качестве фокуса.

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

Поскольку необходимо обработать O( n ) событий (каждое из которых связано с некоторой особенностью диаграммы Вороного) и время O(log n ) для обработки события (каждое из которых состоит из постоянного числа операций двоичного дерева поиска и приоритетных операций очереди), общее время равно O( n log n ).

Псевдокод

[ редактировать ]

Псевдокодовое описание алгоритма. [ 4 ]

let  be the transformation ,
  where  is the Euclidean distance between z and the nearest site
let T be the "beach line"
let  be the region covered by site p.
let  be the boundary ray between sites p and q.
let  be a set of sites on which this algorithm is to be applied.
let  be the sites extracted from S with minimal y-coordinate, ordered by x-coordinate
let DeleteMin(X) be the act of removing the lowest and leftmost site of X (sort by y unless they're identical, in which case sort by x) 
let V be the Voronoi map of S which is to be constructed by this algorithm

create initial vertical boundary rays 


while not IsEmpty(Q) do
    p ← DeleteMin(Q)
    case p of
    p is a site in :
        find the occurrence of a region  in T containing p,
          bracketed by  on the left and  on the right
        create new boundary rays  and  with bases p
        replace  with  in T
        delete from Q any intersection between  and 
        insert into Q any intersection between  and 
        insert into Q any intersection between  and 
    p is a Voronoi vertex in :
        let p be the intersection of  on the left and  on the right
        let  be the left neighbor of  and
        let  be the right neighbor of  in T
        if ,
            create a new boundary ray  
        else if p is right of the higher of q and s,
            create  
        else
            create 
        endif
        replace  with newly created  in T
        delete from Q any intersection between  and 
        delete from Q any intersection between  and 
        insert into Q any intersection between  and 
        insert into Q any intersection between  and 
        record p as the summit of  and  and the base of 
        output the boundary segments  and 
    endcase
endwhile

output the remaining boundary rays in T

Взвешенные сайты и диски

[ редактировать ]

Аддитивно взвешенные сайты

[ редактировать ]

Как описывает Fortune в ссылке, [ 1 ] модифицированную версию алгоритма линии развертки можно использовать для построения аддитивно взвешенной диаграммы Вороного, в которой расстояние до каждого узла компенсируется весом узла; эквивалентно это можно рассматривать как диаграмму Вороного набора дисков с центрами в узлах с радиусом, равным весу узла. обнаружено, что алгоритм имеет временная сложность, где n — количество сайтов согласно ссылке. [ 1 ]

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

  1. ^ Перейти обратно: а б с де Берг, Марк ; ван Кревелд, Марк ; Овермарс, Марк ; Шварцкопф, Отфрид (2000), Вычислительная геометрия (2-е исправленное издание), Springer-Verlag , ISBN  3-540-65620-0 Раздел 7.2: Вычисление диаграммы Вороного: стр. 151–160.
  2. ^ Остин, Дэвид, Диаграммы Вороного и день на пляже , Тематическая колонка, Американское математическое общество .
  3. ^ Стивен Форчун. Алгоритм развертки для диаграмм Вороного. Материалы второго ежегодного симпозиума по вычислительной геометрии . Йорктаун-Хайтс, Нью-Йорк, США, стр. 313–322. 1986. ISBN   0-89791-194-6 . библиотека ACM Цифровая
  4. ^ Кенни Вонг, Хауси А. Мюллер , Эффективная реализация алгоритма прогонки плоскости Фортуны для диаграмм Вороного , CiteSeerX   10.1.1.83.5571 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e1b42af11ff449bc5419031730becc9b__1718268240
URL1:https://arc.ask3.ru/arc/aa/e1/9b/e1b42af11ff449bc5419031730becc9b.html
Заголовок, (Title) документа по адресу, URL1:
Fortune's algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)