Представим себе, что у нас есть множество точек в плоскости, каждая из которых описывается парой целых координат. Есть ли способ найти треугольник с вершинами в этих точках с максимально возможной площадью быстрее, чем с помощью алгоритма O (n^3)?Самый быстрый способ найти максимально возможную площадь треугольника
ответ
- Найти выпуклый корпус.
- Для каждой пары точек (A, B), лежащих на выпуклой оболочке, найдите третью точку C, дающую максимальную площадь треугольнику ABC. Это можно сделать, используя двоичный поиск в O (log n).
Для выполнения бинарного поиска организуйте точки на выпуклой оболочке, идущие в определенном порядке (например, против часовой стрелки). Есть две последовательности точек между A и B, одна идет от A к B, а другая от B до A. Рассмотрим каждую отдельно.
Шаг двоичного поиска выглядит следующим образом. Возьмите три последовательные точки C, C ', C' 'в середине интервала точек. Вычислите три области CAB, C'AB, C''AB. Если C 'является самым большим из трех, это глобальный максимум, и поиск завершен. Если C является наибольшим, максимум находится в левой половине интервала. Если C '' является наибольшим, максимум находится в правой половине. (Edit: note, новый интервал должен содержать C 'на одном из концов).
Существует алгоритм, который работает в O (n^2 log n).
Редактировать 2: ответ на вопрос this question показывает, как сделать это значительно быстрее. Вы можете комбинировать оба подхода, чтобы сделать еще лучше (в O (log n) после того, как выпуклая оболочка построена, хотя со строительством корпуса все еще O (n log n)).
Вау! Ницца подумал о бинарном поиске точки на максимальном расстоянии от сегмента линии, соединяющего точки пары. Это должно быть сделано для обеих сторон пары точек. –
- 1. Найти максимально возможную площадь
- 2. Найти максимально возможную сумму
- 3. Самый быстрый способ найти любую точку треугольника 2D
- 4. Найти максимально возможную оценку в прологе
- 5. Определить максимально возможную интенсивность изображения
- 6. Самый быстрый способ вычислить расстояние до треугольника в 3D?
- 7. Рассчитать площадь треугольника рекурсивно
- 8. Площадь треугольника (3 балла)
- 9. Самый быстрый способ найти товар в списке?
- 10. Самый быстрый способ найти ближайший пункт назначения
- 11. Самый быстрый способ найти знак разного квадрата
- 12. Самый быстрый способ найти источник компонента?
- 13. Самый быстрый способ найти NSManagedObject в NSSet
- 14. Самый быстрый способ найти факторы заданного числа
- 15. Самый быстрый способ найти дубликат в массиве
- 16. Самый быстрый способ найти следующий дневной список
- 17. Самый быстрый способ найти строку в C#?
- 18. Самый быстрый способ найти время разности
- 19. Самый быстрый способ найти отличные совпадающие записи
- 20. Самый быстрый способ найти поворот вектора
- 21. Самый быстрый способ найти строку внутри файла
- 22. Самый быстрый способ найти двоичную базу
- 23. MongoDB найти и удалить - самый быстрый способ
- 24. Самый быстрый способ найти подстроку в JAVA
- 25. Самый быстрый способ Алгоритм
- 26. Функция C++, вычисляющая площадь треугольника
- 27. Как получить максимально возможную ширину div?
- 28. Самый быстрый способ взять
- 29. Самый быстрый способ импорта?
- 30. Площадь треугольника в декартовой плоскости
http://math.stackexchange.com/ - хорошее место, чтобы задать этот вопрос. –
вы также можете попробовать: http://cs.stackexchange.com/ – jfs
@OllieJones Я сомневаюсь в этом - это алгоритм (т. Е. Программирование). – Dukeling