-5
3 개의 수평선 (y = 0, y = 1, y = 2)으로 펼쳐지는 n 점의 그룹이 주어진다면 은 교차 선이 있는지 찾아내는 알고리즘을 생각합니다. O (N^2)수평선에서 3 점을 통과하는 교차 선을 찾으십시오.
3 개의 수평선 (y = 0, y = 1, y = 2)으로 펼쳐지는 n 점의 그룹이 주어진다면 은 교차 선이 있는지 찾아내는 알고리즘을 생각합니다. O (N^2)수평선에서 3 점을 통과하는 교차 선을 찾으십시오.
난 (N은 2 ^) O의 알고리즘을 생각한다. 먼저 우리는 가정 라인 y=2
에 포인트
x
-coordinates 비트의 유한 수에 의해 표현 될 수있다.x
으로 정렬됩니다. 그렇지 않다면 먼저 정렬하는 것은 O (nlog (n))y=2
는 라인에 인접한 지점 간의 최소 거리를 찾아 다음과 같이 x
- 좌표가 정렬되었으므로 O (n)입니다. 이 최소 거리
d
이라고 부릅니다.
y=2
의 각 지점을 고유 한 저장소로 매핑한다는 것은 분명합니다. 이 연산 또한 O (n)입니다. 그런 다음 는, 다음을 수행하십시오 라인 y=0
및 y=1
의 점의 각 쌍에 대한
y=2
에서의 교차를 계산한다. 이것은 O (n^2)입니다.y=2
에있는 각 교차점에 대해 y=2
줄에 점이 있는지 확인하기 위해 해시 테이블을 찾습니다. 있을 경우, 동일한 점인지 (기계의 정밀도 내에서), 그렇다면 교차 선이 있는지 확인하십시오. 그렇지 않으면 존재하지 않습니다. 해시 조회가 O (1)이므로 O (n^2)입니다.따라서 알고리즘은 O (n^2)입니다. 코드는없고 아이디어 만 있습니다.
지금까지 해보신 것은 무엇입니까? 당신의 구체적인 문제는 무엇입니까? 코드를 보여주세요! – MrSmith42
코드가 필요 없으며 단지 아이디어가 필요하지 않습니다 ... 정규 솔루션은 y0 * y1에 모든 포인트를 실행하고 y2에 필요한 포인트 (이진 검색)가 있는지 찾아야합니다. 이렇게 실행 시간은 다음과 같습니다. n^2 * logn – borismos
공간 제한이 없으므로 일부 데이터 구조를 고려하십시오. – MBo