Это вопрос, который меня попросили на собеседовании некоторое время назад. И я до сих пор не могу понять разумный ответ.
Вопрос:
вам задано множество точек (x, y). Найдите 2 самых отдаленных точки. Отдаленные друг от друга.
Например, для точек: (0,0), (1,1), (-8, 5) - самые отдаленные: (1,1) и (-8,5), поскольку расстояние между ними (0,0) - (1,1) и (0,0) - (- 8,5).
Очевидный подход - рассчитать все расстояния между всеми точками и найти максимум. Проблема в том, что это O (n ^ 2), что делает его чрезмерно дорогостоящим для больших наборов данных.
Существует подход с первыми точками отслеживания, которые находятся на границе, а затем вычисление расстояний для них, исходя из предположения, что на границе будет меньше точек, чем "внутри", но оно по-прежнему дорогое, и в худшем случае оно будет терпеть неудачу сценарий.
Пытался искать в Интернете, но не нашел разумного ответа - хотя это может быть просто отсутствие навыков поиска.