Вот интересное упражнение:
Пусть P - простой, но не обязательно выпуклый многоугольник и q - произвольная точка, не обязательно в P.
Создайте эффективный алгоритм, чтобы найти отрезок линии, исходящий из q, который пересекает максимальное количество ребер P.
Другими словами, если вы стоите в точке q, в каком направлении вы должны прицелиться в пушку, то пуля пройдет через наибольшее количество стен?
Пуля через вершину Р получает кредит только для одной стены.
Алгоритм O (n log n) возможен. n - количество вершин или ребер, так как это многоугольник, число ребер примерно равно числу вершин.
Вот моя мысль:
Соедините q со всеми вершинами (скажем, есть N вершин) в P вначале. Будут N строк или N-1 пар линий.
Конечная линия стрельбы должна находиться между этими парами. Поэтому мы должны найти пару, которая содержит наибольшее количество ребер.
Я не думаю, что это решение - O (n log n).
Любые идеи?