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 |