Union Find & an Application

2024. 6. 20. 16:38·CS 지식/자료구조

Minimum Spanning Tree

  • cycle이 없지만, 전체를 커버한다.
  • 루트x, 방향성x

노란 부분이 minimum spanning tree

Kruskal Algorithm

  • 가장 작은 weight부터 edge를 추가한다.
  • cycle은 없게 한다.
  • N-1까지의 edge를 추가한다. > tree조건도 만족 

Why is Kruskal Correct?

  • cycle을 만들지 않는, 가장 작은 edge를 추가한다.
    ↔ 만약 추가하려는 edge가 cycle을 만든다면, 추가하지 않는다.
  • 해당 edge를 추가하려면 cycle을 구성하고 있는 edge중 하나를 빼야한다.
    > 작은 edge부터 추가하고 있으므로 cycle 중 하나는 빼면 추가 하려는 것보다 더 작은 edge가 빠짐
  • 최단거리 아님. 모순 발생
    > 완벽한 증명은 아니지만 이런 아이디어로 진행된다. 

Union/Find or Disjoint Set

  • N개의 items(nodes)
  • 처음엔 하나의 item이 하나의 group이다. > N groups with 1 item each
  • 두개의 operations
    • Union(a, b): 2개의 그룹을 하나로 join
    • Find(a): 해당 그룹이 가지고 있는 ID를 리턴

The Structure

  • 각각의 item은 하나의 node
  • 처음엔 하나의 node가 하나의 tree
  • 몇 번의 union operations 후에
    • 각각의 tree가 하나의 그룹
    • 각 tree의 루트가 ID
    • 트리 모양에 제한 없음
  • node는 오직 parent의 포인터만 가지고 있음. child는 어디있는지도 모름!
    > find는 root를 찾는 것 > 올라가기만 하면 됨 > child 굳이 알 필요 없음 

example

위와 같은 상황에서 Find(2) = 4

worst case에서 Find는 O(N)이 걸린다.

best form

Find가 매우 빨라지는 형태이지만,

다른 트리와 Union연산을 할 때 child를 찾을 수 없으므로 저런 모양은 길게 유지 불가함. 

> 모양 유지를 위해선 child를 계속 루트에 붙여야되는데 child 찾는거 자체가 불가 

 

Heuristics

: Idea works but the reason is not very clear

  • Union 연산 시 node 수 큰 쪽에 작은 트리를 붙임
  • 두 트리간의 node 개수 차↑ > 어차피 큰 쪽에 붙음 > height 안 늘어남
  • height가 똑같은 2개의 트리가 Union될 때만 height가 늘어난다. 
    > 비슷한 논리로 tree height가 logN 임을 알 수 있다.

'CS 지식 > 자료구조' 카테고리의 다른 글

[한 권으로 끝내는 코딩테스트 with 파이썬] Chapter2. 자료 구조  (0) 2025.01.16
Priority Queue & an Application  (1) 2024.06.20
AVL Tree  (2) 2024.06.20
'CS 지식/자료구조' 카테고리의 다른 글
  • [한 권으로 끝내는 코딩테스트 with 파이썬] Chapter2. 자료 구조
  • Priority Queue & an Application
  • AVL Tree
JYUN_
JYUN_
예비 개발자 성장기록
  • JYUN_
    데브 스토리
    JYUN_
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • AWS & 클라우드 컴퓨팅 (1)
        • AWS (2)
      • AI & ML (17)
        • 딥러닝 (3)
        • 인공지능 기초 (2)
        • 자연어 처리 (3)
        • 컴퓨터 비전 (8)
      • CS 지식 (9)
        • 알고리즘 (1)
        • 자료구조 (4)
        • 지식확장 (1)
        • 컴퓨터 네트워크 (3)
      • 백엔드 (22)
        • Node.js (12)
        • Spring (9)
      • 웹 프론트엔드 (21)
        • HTML (3)
        • React (7)
        • 바닐라 JavaSctipt (11)
      • 코딩 테스트 & 문제 해결 (10)
        • 코딩 테스트 연습 (9)
        • 실전 문제 풀이 (1)
      • 트러블 슈팅 (1)
      • 기타 (4)
        • 개인 지식 관리 (1)
        • 외부 활동 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
JYUN_
Union Find & an Application
상단으로

티스토리툴바