Для уточнения ответа Россома:
- Найдите выпуклую оболочку точек, которые можно найти за O (n log n), с помощью алгоритма, подобного сканированию Грэхэма или O (n log h)время с другими алгоритмами, которые, как я полагаю, сложнее реализовать
- Начните с точки, скажем, A, и переберите другие точки, чтобы найти самую дальнюю от нее, скажем, B.
- Advance Aк следующему пункту и продвиньтесь B, пока это не будет самым дальней от A снова.Если это расстояние больше, чем в части 2, сохраните его как наибольшее.Повторяйте, пока не пройдете все точки A в наборе
. Части 2 и 3 занимают амортизированное время O (n), и, следовательно, общий алгоритм занимает O (n log n) или O (n log h).) время, зависящее от того, сколько времени вы можете потратить на реализацию выпуклого корпуса.
Это здорово, и все, но если у вас всего несколько тысяч очков (как вы сказали), O (n ^ 2) должноработать нормально (если вы не выполняете это много раз).