추가 후 최소 스패닝 트리를 업데이트 구현 소비세에게이다그래프 - 새로운 에지 여기
가정하자 우리 G (N 개의 정점과 m 가장자리) 주어진 그래프의 최소 확장 트리 T 주어진다 그리고 우리가 G에 추가 할 가중치 w 의 새로운 에지 e = (u, v)를 제공합니다. 그래프 G + e의 최소 스패닝 트리를 찾는 효율적인 알고리즘을 제공하십시오. 귀하의 알고리즘은 O (n) 전체 크레딧을받을 시간 내에 실행되어야합니다.
나는이 아이디어가 :
In the MST, just find out the path between u and v. Then find the edge (along the path) with maximum weight; if the maximum weight is bigger than w, then remove that edge from the MST and add the new edge to the MST.
까다로운 부분은 O에서 (n)이 시간이 작업을 수행하는 방법입니다 그리고 내가 문제가 발생할 수도 있습니다.
질문은 MST가 저장되는 방식입니다. 통상의 Prim의 알고리즘에서, MST는 부모 어레이로서 저장된다. 즉, 각 요소는 대응하는 정점의 부모이다.
그러면 소비세가 MST를 나타내는 상위 배열을 제공한다고 가정하면 위의 알고리즘을 O (n)에서 어떻게 풀 수 있습니까?
먼저 부모 배열에서 u와 v 사이의 경로를 식별 할 수 있습니까? u와 v에 대해 두 조상 배열을 가질 수 있습니다. 그런 다음 공통 조상을 확인한 다음 거꾸로도 경로를 얻을 수 있습니다. 나는 공통 조상을 찾기 위해이 부분을 생각합니다. 적어도 O (n^2)에서해야합니다. 맞습니까?
그런 다음 경로가 있습니다. 그러나 우리는 여전히 경로를 따라 각 가장자리의 무게를 찾아야합니다. 그래프에서 Prim의 알고리즘에 대한 adjacency-list를 사용한다고 가정하기 때문에 가장자리의 각 가중치를 찾으려면 O (m) (m은 가장자리의 수)를 수행해야합니다.
... 그래서 나는 그것을 볼 수 없습니다는 O (N)의 알고리즘을 수행 할 수 있습니다. 내가 잘못?
MST 용 상위 배열을 사용하는 경우 u와 v 사이의 경로를 추적하는 것이 O (n)라고 생각하지 않습니다. 예를 들어, u가 v의 조상이 아니고 v가 u의 조상이 아니라면 u와 v는 공통 조상 y를가집니다. u에서 y까지 그리고 v에서 y까지 추적 할 수 있습니다. 어떻게 u에서 v까지 추적 할 수 있습니까? 또는 v를 O (n)에서 u로 변경 하시겠습니까? –
또한 부모 배열에서 O (1)의 각 가장자리의 무게를 어떻게 구할 수 있습니까? –
@ JacksonTale 질문에 대한 답변에 대한 자세한 내용은 내 대답을 편집했습니다. 희망은 명확하게. – deebee