주어진 트리. 크기가 n * n 인 2D 행렬을 사용하지 않고 트리에서 모든 노드 쌍 사이의 거리를 찾는 방법. 나는 O (n^2)의 복잡성에 대한 해결책을 안다.트리의 모든 노드 쌍 사이의 거리
답변
이미 주석에서 언급했듯이 트리의 v1,v2
모든 정점 쌍에 대해 출력이 (v1,v2,distance)
이어야한다고 가정하십시오. n*(n-1)
쌍의 정점이 있습니다. n*(n-1)
은 O(n^2)
에 있으며 출력 크기는 이므로 O(n^2)
을 더 잘 수행 할 수 없으므로 큰 O 표기법으로 알고리즘이 최적입니다.
공간의 복잡성은 어떻습니까? 할 수 있습니까? O (n^2)보다 적은 공간에서? – user2613413
빠른 사전 처리로 형식이 distance(u, v)
인 빠른 질의에 응답하려면 LCA을 사용할 수 있습니다. 루트가있는 트리의 두 꼭지점의 LCA 또는 가장 낮은 공통 조상은 둘 모두의 조상이고 모든 공통 조상 중에서 가장 낮은 정점입니다. n log n
사전 처리 시간을 사용하여 로그 시간에 LCA(u, v)
을 찾는 매우 복잡한 알고리즘은 없습니다. 필요한 경우 설명 할 수 있습니다.
따라서 다음과 같이 문제가 해결 될 수 있습니다. 먼저, 나무의 뿌리를 고친다. 그런 다음 위에서 언급 한 전처리 과정을 통해 LCA를 찾을 수 있습니다. 그런 다음 h[v]
이 v
에서 루트까지의 거리 (모든 정점에 대해 선형 시간으로 미리 계산 될 수 있음)를 가정하면 distance(u, v) = h[u] + h[v] - 2 * h[LCA(u, v)]
입니다.
위의 개념을 설명하는 의사 코드로 링크를 제공하거나 설명하십시오. –
https://www.topcoder.com/community/data-science/data-science-tutorials/range-minimum-query-and-lowest-common-ancestor / –
- 1. 루트와 이진 트리의 모든 노드 사이의 거리 찾기
- 2. 가장 가까운 이웃 (좌표 쌍 사이의 거리)
- 3. 트리의 비슷한 쌍
- 4. infovis 트리의 모든 노드 확장
- 5. 노드 사이의 가장 가까운 거리 찾기
- 6. 파이썬 네트워크를 사용하는 노드 사이의 거리 x
- 7. 두 무선 이동 노드 사이의 거리
- 8. Java에서 이진 트리의 모든 노드 검색
- 9. 2 배열 사이의 모든 쌍의 쌍
- 10. 이진 검색 트리의 깊이 대 거리
- 11. 두 지리적 포인트 사이의 거리?
- 12. 이진 트리의 중간 노드
- 13. 두 그래프 사이의 거리 편집
- 14. 이진 트리의 외부 노드
- 15. 이진 트리의 노드 경로
- 16. 트리의 Lisp 멤버쉽 노드
- 17. 검색 사이의 mysql 거리
- 18. 위도 경도 쌍 간의 거리 정확도
- 19. 나뭇잎 사이의 거리 표시
- 20. 위도와 거리 사이의 관계
- 21. 순위 사이의 거리
- 22. awk 사이의 거리
- 23. 두 개체 사이의 거리
- 24. 2 System.Drawing.Point 사이의 거리
- 25. 피크 사이의 거리 측정
- 26. Android Google지도 사이의 거리
- 27. TextView의 단락 사이의 거리
- 28. 벡터 사이의 거리 측정
- 29. 정규 표현식 사이의 거리
- 30. 배열의 변수 사이의 거리
각 v1, v2의 출력이 (v1, v2, 거리) 인 경우 출력 크기 자체가 O (n^2) **이므로 O (n^2)보다 좋을 수는 없습니다. 예상되는 산출물을 정교하게 작성하십시오. 간단한 예도 좋습니다. – amit
이것은 유용 할 수 있습니다 [나무의 모든 쌍의 최단 경로] (http://mathoverflow.net/questions/59680/all-pairs-shortest-paths-in-trees) –