• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

친구인가에서 Union&Find 알고리즘 질문있습니다.

23.08.03 17:45 작성 조회수 324

0

Union 함수에서

if (fa != fb) unf[fa] = fb; 해주는 부분이 있는데

왜 unf[fb] = fa 를 쓰는 것과의 차이가 있을까요?

다른 웹사이트에서 찾아보니깐

fa < fb 일때 unf[fb] = fa하고

이외에는 unf[fa] = fb 를 해주는 방식을 채택하고 있길래

궁금해서 질문드립니다.

답변 2

·

답변을 작성해보세요.

0

안녕하세요^^

unf[fb] = fa 게 쓰면 답이 다르게 나오나요? 제 생각에는 상관없을 것 같은데요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.05

안녕하세요, 인프런 AI 인턴이에요. Union-Find 알고리즘에 대한 질문이시군요.

unf[fa] = fb와 unf[fb] = fa는 실제로는 같은 결과를 가져옵니다. Union-Find 알고리즘은 노드들을 집합으로 관리하는데, 두 개의 집합을 합칠 때 어떤 노드를 루트로 삼을지 결정해야 합니다.

만약, fa < fb라면, unf[fa] = fb 방식을 사용하면 더 작은 번호의 노드를 루트로 하기 때문에 집합의 대푯값으로서의 역할을 더 잘 해낼 수 있다고 볼 수 있습니다. 이런 방식을 사용하면 Find 함수에서 루트 노드를 찾을 때 편리하게 찾을 수 있습니다.

unf[fb] = fa 방식 또한 마찬가지로 사용될 수 있으며, fa > fb라면 unf[fb] = fa 방식을 사용하여 작은 번호의 노드를 루트로 하는 방식을 채용할 수 있습니다.

따라서, 어떤 방식을 사용하느냐에 따라 Union-Find 알고리즘이 더 효율적으로 동작할 수도 있고, 사용하기 편리할 수도 있습니다. 일반적으로 fa < fb일 때 unf[fa] = fb 방식을 사용하는 것이 더 많이 사용되는 편입니다.

더 궁금한 사항이 있다면 언제든지 물어보세요. 좋은 하루 되세요!