2014-04-21 3 views
1

이는 숙제 질문이다 "노드 u 여부 노드 v의 조상입니까? "전처리 n 개의 * 로그를 사용하여 트리 (N) 알고리즘

실제로 나는 어떤 알고리즘도 O(log(n))보다 좋다고 생각하지 않습니다.

+0

이것은 http://en.wikipedia.org/wiki/Lowest_common_ancestor의 특수한 사례이며 O (n) 전처리 후 시간 O (1)의 LCA를 찾는 알고리즘이 있음을 알 수 있습니다. 분명히, u는 LCA (u, v) = u이면 v의 조상입니다. – mcdowella

답변

0

O(n*log(n))에서 각 노드에 루트로 돌아가 자신의 조상 목록을 제공 할 수 있습니다. O(1)에서 노드는 "루트에서 얼마나 떨어져 있니?"라는 질문 중 하나에 대답 할 수 있습니다. "네 조상 중 누가 뿌리에서부터 거리 k인지?".

+0

나는이 질문들이 O (log (n))에서 대답 될 수 있다고 생각한다. 알고리즘을 설명 할 수 있습니까? – Branky

+0

제가 목록을 말할 때, 나는 연결된 목록을 의미하지는 않습니다. 그것은 배열이나 테이블로 구현 될 수 있습니다. 그래서 엔트리 검색은 O (logn)이 될 것입니다. (리스트의 크기이기 때문에) 인덱스로 엔트리를 찾는 것은 O (1)입니다. – Beta

+0

사실, 목록의 크기는 루트에서 거리를 제공하지만, 이것은 우리가 질문에 대답하지 못하게합니다. – Branky