Union-find Data Structure(연결 리스트를 이용한 처리)

2023. 2. 22. 18:12·Algorithm
728x90
반응형
SMALL

상호 배타적 집합의 처리

상호배타적 집합만을 대상으로 한다.  이때 교집합은 제외된다.

Union(합집합)을 지원해주는 연산 작업들에는

   ■  Make-Set(x) : 원소 x로만 이루어진 집합을 만든다.

   ■  Find-Set(x) : 원소 x를 가지고 있는 집합을 알아낸다.

   ■  Union(x,y) : 원소 x를 가진 집합과 원소 y를 가진 집합의 합집합을 만든다.

 

 

집합을 처리하는 방법에는 연결리스트를 이용하는 방법과 트리를 이용하는 방법이 있다.

  • 연결 리스트를 이용한 상호 배타적 집합의 처리 방법을 이해한다.
  • 연결 리스트를 이용해 집합을 처리하는 연산들의 수행 시간을 분석한다.
  • 트리를 이용한 상호 배타적 집합의 처리 방법을 이해한다.
  • 트리를 이요해 집합을 처리하는 연산들의 수행 시간을 분석한다.

 

 

연결 리스트를 이용한 처리

같은 집합의 원소들은 하나의 연결 리스트로 관리한다.

연결 리스트의 맨앞의 원소를 집합의 대표 원소를 삼는다.

 

 

1) Make-Set(x)을 한 상태

Make-Set(x): 원소 x로만 이루어진 집합을 만든다.

이때 대표노드는 자신이 된다. 

 

 

2) Find-Set(x)을 한 상태

Find-Set(x) : 원소 x를 가지고 있는 집합을 알아낸다.

위의 그림에서 집합을 두개로 나눌 수 있다. 위의 연결 리스트를 집합 A, 아래 연결 리스트를 집합 B라고 하자.각 집합의 노드들은 맨앞의 노드를 대표노드로 포인터를 가리키고 있다.

 

 

3) Union(x,y)을 한 상태

Union(x,y): 원소 x를 가진 집합과 원소 y를 가진 집합의 합집합을 만든다.

이 상황에서 집합 A를 부집합, 집합 B를 주집합이라고 저의 한다. 

주집합 B에 부집합 A를 붙이는데 집합 A에서 각 노드들이 가리키고 있던 대표노드의 포인터를 

집합 B의 대표노드로 바꿔준다. 그리고 NIL를 가리키고 있던 집합 B의 마지막 노드를 집합 A의 머리 노드를 가리키게 연결해준다.

Union을 이러한 방식으로 해주는 이유는 무게를 고려한 Union방식 때문이다.

무게를 고려한다는 의미는 연결 리스트로 된 두집합을 합칠 때 작은 집합을 큰 집합의 뒤에 붙이는 것을 말한다. 이러한 이유는 연결하는 집합의 대표 원소를 가리키는 포인터 갱신 작업을 최소화 하기 위한 것이다. 

 

 

4) 수행 시간

연결 연결 리스트를 이용해 표현되는 배타적 집합에서 무게를 고려한 Union을 사용할 때, m번의 Make-Set, Union, Find-Set 중 n번이 Make-Set이라면 이들의 총 수행시간은 O(m+nlogn)이다.

 

728x90
반응형
LIST

'Algorithm' 카테고리의 다른 글

Graph Algorithm(플로이드-워샬 알고리즘)  (1) 2023.03.02
Graph Algorithm(벨만-포드 알고리즘)  (0) 2023.03.01
Graph Algorithm(다익스트라 알고리즘)  (0) 2023.02.24
최단 경로(Shortest Paths)  (1) 2023.02.24
Union-find Data Structure(트리를 이용한 처리)  (0) 2023.02.22
'Algorithm' 카테고리의 다른 글
  • Graph Algorithm(벨만-포드 알고리즘)
  • Graph Algorithm(다익스트라 알고리즘)
  • 최단 경로(Shortest Paths)
  • Union-find Data Structure(트리를 이용한 처리)
알파 조
알파 조
공부 일기장
  • 알파 조
    Blue Ocean
    알파 조
  • 전체
    오늘
    어제
    • 분류 전체보기 (93)
      • Algorithm (9)
      • Data Structure (3)
      • Python (7)
      • 컴퓨터 구조 요약 (6)
      • 몰입 교육 (7)
      • JavaScript (1)
      • Vue.js (7)
      • 코딩테스트 연습 (40)
      • SpringBoot (9)
      • 데이터베이스 (2)
  • 블로그 메뉴

    • Home
    • Computer structure
    • Algorithm
    • SpringBoot
    • Vuejs
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Udemy#Python#Bootcamp#Object and Data Structure Basics
    항해99
    리그오브레전드 #롤 #LOL #60프레임 버그 #GPU #윈도우10 #롤 60프레임 고정
    MSA 기초
    티스토리챌린지
    오블완
    잔디 기부 캠페인
    잔디 기부
    Git
  • hELLO· Designed By정상우.v4.10.3
알파 조
Union-find Data Structure(연결 리스트를 이용한 처리)
상단으로

티스토리툴바