В вычислительной геометрии точка p в конечном множестве точек S называется максимальной или недоминируемой , если нет другой точки q в S , координаты которой все больше или равны соответствующим координатам p . Максимумы множества точек S — это все максимальные точки S. Задача нахождения всех максимальных точек, иногда называемая задачей максимумов или задачей множества максимумов , изучалась как вариант задач выпуклой оболочки и ортогональной выпуклой оболочки . Она эквивалентна нахождению границы Парето для набора точек и была названа Гербертом Фрименом задачей плавающей валюты на основе приложения, включающего сравнение относительного богатства людей с различными активами нескольких валют. [1]
Для точек в двух измерениях эта задача может быть решена за время O ( n log n ) с помощью алгоритма, который выполняет следующие шаги: [1] [2]
Если координаты точек предполагаются целыми числами , то этот процесс можно ускорить с помощью алгоритмов сортировки целых чисел , чтобы получить то же асимптотическое время выполнения, что и алгоритмы сортировки. [3]
Для точек в трех измерениях снова можно найти максимальные точки за время O ( n log n ), используя алгоритм, аналогичный двумерному, который выполняет следующие шаги:
Этот метод сводит задачу вычисления максимальных точек статического трехмерного набора точек к задаче поддержания максимальных точек динамического двумерного набора точек. Двумерная подзадача может быть эффективно решена с помощью сбалансированного бинарного дерева поиска для поддержания набора максимумов динамического набора точек. Используя эту структуру данных, можно проверить, доминируется ли новая точка существующими точками, найти и удалить ранее недоминируемые точки, которые доминируются новой точкой, и добавить новую точку к набору максимальных точек за логарифмическое время на точку. Количество операций дерева поиска линейно в ходе алгоритма, поэтому общее время составляет O ( n log n ) . [1] [2]
Для точек с целочисленными координатами первая часть алгоритма, сортировка точек, может быть снова ускорена целочисленной сортировкой. Если точки сортируются отдельно по всем трем их измерениям, диапазон значений их координат может быть уменьшен до диапазона от 1 до n без изменения относительного порядка любых двух координат и без изменения тождеств максимальных точек. После этого уменьшения координатного пространства проблема поддержания динамического двумерного набора максимальных точек может быть решена с использованием дерева Ван Эмде Боаса вместо сбалансированного бинарного дерева поиска. Эти изменения в алгоритме ускоряют его время работы до O ( n log log n ) . [3]
В любой размерности d задача может быть решена за время O ( dn 2 ) путем проверки всех пар точек на предмет доминирования одной из них над другой и вывода в качестве выходных данных точек, которые не доминируются. Однако, когда d является константой больше трех, это можно улучшить до O ( n (log n ) d − 3 log log n ) . [4] Для наборов точек, которые генерируются случайным образом, задачу можно решить за линейное время . [5] [6]