O(nlogn)
솔루션 (I는. 여전히 당신이 낮은 바운드 솔루션을 찾고있는 이유는 명확하지 않다 당신은 단지 철저한 점검을뿐 아니라 할 수도 있고, 그럼 그냥 하한의 확인하기 위해 nlogn 루프를 실행 당신이 상한을 의미해야한다고 생각합니다.) :
모든 포인트를 평균하여 유효한 후보 포인트를 찾습니다. 나는. 그들의 좌표를 합산하고 포인트 수로 나눈다. 그러한 k가 존재한다면, 이것이 그 것이다. 그러한 k가 존재하지 않으면 마지막 단계에서 찾은 점이 유효하지 않음을 알 수 있습니다.
점의 새 배열 (집합)을 만듭니다. 여기에서 우리는 점을 중심으로 중심점을 이동합니다. 나는. K = (X K, Y, K ), 점 (X, Y)가 될 것인지 (X-X K, Y-Y K). 비율 x/y와 표준 sqrt (x + y)에 따라 포인트를 정렬하십시오. 다음 단계에서 알 수 있듯이이 정렬이 어떻게 수행되는지는 중요하지 않습니다. 즉 어떤 것이 주요 기준이고 어떤 것이 보조인지는 중요하지 않습니다.
우리는 각 점의 보수를 찾거나 더 나은 방법으로 단순히 배열을 가로 지르고 두 개의 인접한 점이 실제로 보완 적인지 확인합니다. 나는. 이것이 솔루션이라면 우리는 우리의 축을 중심에 놓았 기 때문에이 새로운 배열의 두 보완적인 점은 모두 (x, y)와 (-x, -y) 형태입니다. 즉, 동일한 비율 ("gradient") 그리고 규범, 그리고 종류 후에, 인접해야한다.
k가 유효하지 않다면 우리가이 순회에 도착할 지점이 있으며 이웃이 올바른/보완 형이 아님을 알게됩니다. ==> 그러한 k가 없습니다. 각각의 새로운 점 때문에, 새로운 배열을 구축하기위한 후보 K +
O(n)
를 찾는
시간 =
O(n)
은 O에서 계산 될 수있다 (1)를 검증하기위한 정렬 +
O(n)
대 +
O(nlogn)
가로 지름
= O(nlogn)
나는 당신의 질문을 정말로 이해하지 못합니다. 하한을 찾아내는 알고리즘?* 낮은 * 범위의 알고리즘 *을 의미합니까? 또는 그런 알고리즘 *이 그런 낮은 경계를 가지고 있다는 증거? – davin