일반적으로 그렇게 하지 않습니다. 그래도 실행 속도가 충분히 빠르기 때문입니다.
어차피 이후 4와 다른 수의 관계를 확인할 일이 생겼을 때 자동적으로 Find(4)가 호출될 것이고, 그러면서 자연스럽게 4의 부모로 그 서브트리의 루트가 알아서 설정될 것이기 때문입니다.
그 한 번은 소요시간이 조금 길 수 있어도, 그 한 번을 지나고 나면 그 후로는 모든 연산이 훨씬 효율적이기 때문에, 전체 실행 시간을 놓고 보면 굉장히 효율이 좋음을 확인할 수 있습니다. 즉, "전체 평균" 퍼포먼스는 매우 좋습니다. (amortized time complexity)
easyfight 2년 전
안녕하세요.
다름이 아니라. Union Find할때
보통 아래와 같은 코드 패턴으로 하는 것으로 알고 있습니다.
그런데 코드의 예제와 같이 (1,2) (3, 4) (2,3) 의 순서로 Union을 한다면
Parent[4]에는 1로 변경되길 기대 했으나, 3으로 남아 있습니다.
질문은 예제와 같은 경우를 방지하기 위해 Union하기 전에 sort를 해서
(1,2) (2,3) (3, 4) 순서로 만들어 준 후 Union을 해야 하는지 문의 드립니다.