Mathlife
Mathlife의 학습 노트
Mathlife
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS
      • 알고리즘
      • 자료구조
      • 운영체제
      • 네트워크
      • 데이터베이스
    • 프로그래밍 언어
      • Java
      • JavaScript
      • C·C++
      • Python
    • Backend
      • Spring
    • Frontend
      • HTML
      • CSS
    • Math
      • Linear Algebra
      • Calculus
    • AI
      • ML
      • DL
      • RL
    • Git

블로그 메뉴

  • 홈
  • 관리
  • 글쓰기
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Mathlife

Mathlife의 학습 노트

CS/알고리즘

BBST / union-find

2022. 5. 6. 23:05

BBST

motivation : BST가 균형이 안맞으면 점차 연결리스트나 다름 없어짐

 

example

AVL tree, Red-black Tree

 

union-find

disjoint set을 효율적으로 구현하는 자료구조

 

최적화

motivation : 균형이 안맞으면 점차 연결리스트나 다름 없어짐

 

모든 현실적인 입력에 대해 상수 시간에 작동

class UnionFind():
    def __init__(self, maxSize = 100):
        self.parent = [i for i in range(maxSize)]
        self.rank = [0]*maxSize
    
    # 루트 노드를 반환
    def find(self, a):
        if a == self.parent[a]: return a
        self.parent[a] = self.find(self.parent[a])
        return self.parent[a]
        
    # 두 집합을 합친다
    def union(self, a, b):
        ra, rb = self.find(a), self.find(b)
        if ra == rb: return
        
        if self.rank[ra] > self.rank[rb]:
            ra, rb = rb, ra
        
        # 이제 rank[ra] <= rank[rb] 가 무조건 성립한다.
        self.parent[ra] = rb
        if self.rank[ra] == self.rank[rb]:
            self.rank[rb] += 1

https://www.acmicpc.net/problem/1717

 

1717번: 집합의 표현

첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는

www.acmicpc.net

'CS > 알고리즘' 카테고리의 다른 글

MST  (0) 2022.05.13
가중치 있는 최단 경로 문제  (0) 2022.05.07
DFS/BFS  (0) 2022.05.06
Merge Sort & Quick Sort (JAVA)  (0) 2022.04.20
LCS  (0) 2022.04.05
    'CS/알고리즘' 카테고리의 다른 글
    • MST
    • 가중치 있는 최단 경로 문제
    • DFS/BFS
    • Merge Sort & Quick Sort (JAVA)
    Mathlife
    Mathlife

    티스토리툴바