티스토리 뷰

정보/CS

Union-Find 유니온 파인드

스헤 2020. 11. 6. 23:23
반응형

2020/11/06 - [문제풀이/자바] - [백준 1976] 여행 가자 (자바)

 

[백준 1976] 여행 가자 (자바)

난이도 : 골드 4 도시들을 연결하여 주어진 도시가 하나로 이어져 있는지 확인하는 문제입니다. 이러한 문제는 유니온 파인드(Union-Find)를 이용하여 풀 수 있습니다. 유니온은 도시들을 묶고 파인

jellyinghead.tistory.com

위에서 유니온 파인드에 대한 설명을 잠깐 했습니다.

하지만 제가 이 개념을 이해하고 왜 부모 값(대푯값)을 자꾸 건드리는지 이해하는데 많은 시간이 걸렸습니다.

 

아래 예시를 통해 이해를 하길 바랍니다.

위의 형태로 각 노드를 연결했고 밑은 그 출력문입니다.

 

초기값은 0~5였지만, union 후에 001111로 바뀐 것을 볼 수 있습니다. 이것은 의도한 값입니다.

그 후 3의 값을 parent와 find를 이용하여 호출해봤습니다.

그 값이 서로 다른 것을 볼 수 있습니다.

이 때 find를 호출하며 최적화가 됐기 때문에 다시 3의 parent와 find를 호출했지만, 같은 값인 0이 나옵니다.

그리고 전체 parent 배열을 출력해보니 3의 값이 바뀐 것을 볼 수 있습니다.

 

이런 이유 때문에 제 코드를 응용한 유니온 파인드는 parent의 값을 읽는 것을 지양하고 find를 이용하는 것을 지향해야 합니다.

만약 최적화가 되지 않는다면 0-1-2-3-4-.................-n개가 일렬로 연결된다면 n의 부모 값을 읽을 때 O(n)의 시간 복잡도를 가지게 됩니다.

하지만 최적화를 했을 때는 O(1)로 처리가 가능합니다.

 

아래는 예시에서 이용된 코드입니다.

반응형

'정보 > CS' 카테고리의 다른 글

시간 복잡도의 계산  (0) 2020.10.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함