이 문제에서는 주어진 N개 점 중 2D 평면에서 원점에 가장 가까운 K개 점을 찾습니다.
표준 유클리드 거리 공식을 사용하여 원점과 각 지점 사이의 거리를 계산할 수 있습니다. 그런 다음, 거리가 있는 점을 배열에 저장하고, 거리를 기준으로 배열을 정렬하고, 상위 K개 점을 가져올 수 있습니다.
그러나 우선순위 대기열을 사용하여 원점으로부터의 거리를 기준으로 2D 포인트를 저장할 수도 있습니다. 그 후에 대기열에서 K번 대기열을 제거할 수 있습니다.
문제 설명− 2차원 평면에 N개의 점이 주어졌습니다. 평면의 원점에 가장 가까운 K개 점을 찾아야 합니다.
NOTE - 유클리드 거리를 원점과 평면의 주어진 지점 사이의 거리로 생각하세요.
들어가세요
으아아아출력
으아아아설명 − 각 점에서 원점까지의 유클리드 거리입니다.
(2, −2) −> sqrt(8)
(−5, 1) −> sqrt(26)
(2, 1) -> sqrt(5)
(0, 3) −> sqrt(9)
(6, 0) -> sqrt(36)
(5, 5) -> sqrt(50)
(4, 9) -> sqrt(97)
따라서 가장 가까운 4개의 점은 {2,1} {2,−2} {0,3} {−5,1}입니다.
들어가세요
으아아아출력
으아아아설명 − 모든 점에서 원점까지의 거리는 동일합니다. 따라서 우리는 어떤 2포인트라도 출력으로 인쇄할 수 있습니다.
들어가세요
으아아아출력
으아아아설명− K는 주어진 점과 같습니다. 그러므로 모든 점을 인쇄해야 합니다.
이 방법에서는 sort() 메서드를 사용하여 배열을 정렬합니다. 또한 비교기 기능을 사용하여 원점으로부터의 거리를 기준으로 점을 정렬합니다. 그런 다음 정렬된 배열의 첫 번째 K개 요소를 인쇄합니다.
1단계 − sort() 메서드를 사용하여 목록을 정렬하고 distComparator() 함수를 세 번째 매개변수로 전달합니다.
2단계− 주어진 지점의 거리를 비교하기 위해 distComparator() 함수를 정의합니다. 이 함수는 p와 q 쌍을 매개변수로 사용합니다.
2.1단계 − 지점 p에서 원점까지의 거리를 구하여 dist_p에 저장합니다.
2.2단계 − q 지점에서 원점까지의 거리를 dist_q 변수에 저장합니다.
2.3단계 − dist_p가 dist_q보다 작으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
3단계 - 배열을 반복하고 배열의 첫 번째 K 포인트를 인쇄합니다.
시간 복잡도 - 배열 정렬의 시간 복잡도는 O(NlogN)입니다.
공간 복잡도 - 배열 정렬을 위한 O(N)입니다.
이 방법에서는 우선순위 대기열을 사용하여 포인트를 삽입합니다. 또한 비교기 기능과 우선순위 대기열을 사용하여 원점으로부터의 최단 거리를 기준으로 포인트를 저장합니다.
1단계 − 'res_points' 목록을 정의하여 K개의 가장 가까운 지점을 저장합니다.
2단계 - 우선순위 대기열을 정의합니다. 여기서 'pair
3단계− 원점에 대한 두 점의 유클리드 거리를 비교하는 cmp() 함수를 정의합니다.
3.1단계 - a 지점에서 원점까지의 거리가 b 지점에서 원점까지의 거리보다 큰 것을 기준으로 부울 값을 반환합니다.
4단계 - 배열의 각 요소를 우선순위 대기열에 삽입합니다.
5단계− 대기열에서 첫 번째 K개 요소를 꺼내서 res_points 목록에 저장합니다.
6단계− res_points 포인트 목록을 반환합니다.
시간 복잡도 - O(N*logN) N개 요소를 우선순위 대기열에 삽입합니다. 여기서 N은 총 포인트 수입니다.
공간 복잡성 - O(N)으로 우선순위 대기열에 포인트를 저장합니다.
우선순위 큐는 힙 데이터 구조를 사용합니다. 따라서 요소를 삽입하고 삭제하는 데는 O(logN) 시간만 걸립니다. 두 방법 모두 동일한 메모리와 시간이 필요합니다. 그러나 두 번째 방법은 힙 데이터 구조를 사용하므로 더 효율적입니다.
위 내용은 우선순위 대기열을 사용하여 원점에 가장 가까운 K개 지점을 찾습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!