Решение 1. Найдите перпендикулярные биссектрисы между парами точек и постройте расположение этих прямых. Компоновка имеет Θ ( n 4 ) ячеек, в которых отсортированный порядок постоянен. Поэтому создайте структуру данных местоположения точек для расположения и украсьте каждую ячейку отсортированным порядком, который должен быть возвращен для точек в этой ячейке. Сортированные порядки между соседними ячейками различаются только в одном транспонировании, поэтому вы можете использовать постоянную структуру данных, чтобы представления этих отсортированных порядков могли совместно использовать пространство. Общее пространство O ( n 4 ) и время запроса OΘ(n2)Θ ( н4)O ( n4) .O ( журналн )
Решение 2: Выберите случайную выборку из этих же перпендикулярных биссектрис, построите их расположение и разделите каждую ячейку расположения вертикальными отрезками, проходящими через каждое пересечение двух выбранных линий. Результирующее разбиение имеет Θ ( n 2 ) ячеек, каждая из которых с высокой вероятностью пересекается O ( n ) несэмплированными биссектрисами. Украсьте каждую ячейку раздела с помощью правильного отсортированного порядка точек, если смотреть с некоторого x внутри ячейки. Общее пространство O ( n 3 ) .Θ ( н )Θ ( н2)O ( n )O ( n3)
Теперь, чтобы выполнить запрос, найдите точку запроса в разделе, найдите порядок, сохраненный в ячейке раздела, и используйте алгоритм сортировки сравнения декартовых деревьев Levcopoulos & Petersson (1989), начиная с этого сохраненного порядка. Время для этого шага пропорционально где k i - количество точек, которые не соответствуют порядку точки y i . Но Σ K я это O ( п ) (каждая биссекторные причины без выборки не более одного испорченных паров точек), поэтому во время запросаΣяO ( 1 + журналКя)КяYя∑ кяO ( n ) также является O ( n ) .ΣяO ( 1 + журналКя)O ( n )