deo2kim
๋งž์™œํ‹€
deo2kim
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ N
    • CS
      • Algorithm
      • Data Structure
      • Network
      • DB
      • OS
    • Algorithm Problem
      • Python
      • JavaScript
    • Programming language
      • Python
      • JavaScript
    • Tool
      • Jquery
      • React
    • ๊ฐœ๋ฐœ
    • Infra N

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
deo2kim

๋งž์™œํ‹€

์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-set)
CS/Algorithm

์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-set)

2020. 9. 29. 20:55
๋ฐ˜์‘ํ˜•

make_set()
find_set and paht compressin

๐Ÿ“” ์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-set) ์ด๋ž€

  • ์„œ๋กœ์†Œ ๋˜๋Š” ์ƒํ˜ธ๋ฐฐํƒ€ ์ง‘ํ•ฉ๋“ค์€ ์„œ๋กœ ์ค‘๋ณต ํฌํ•จ๋œ ์›์†Œ๊ฐ€ ์—†๋Š” ์ง‘ํ•ฉ๋“ค( ๊ต์ง‘ํ•ฉ์ด ์—†๋Š” ์ƒํƒœ )
  • ์ง‘ํ•ฉ์— ์†ํ•œ ํ•˜๋‚˜์˜ ํŠน์ • ์›์†Œ๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ์ง‘ํ•ฉ๋“ค์„ ๊ตฌ๋ถ„ ( ์ด๋ฅผ ๋Œ€ํ‘œ์ž๋ผ๊ณ  ํ•จ )
  • ์ƒํ˜ธ ๋ฐฐํƒ€ ์ง‘ํ•ฉ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
      • ๊ฐ™์€ ์ง‘ํ•ฉ์˜ ์›์†Œ๋“ค์€ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌ
      • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋งจ ์•ž์˜ ์›์†Œ๋ฅผ ์ง‘ํ•ฉ์˜ ๋Œ€ํ‘œ๋กœ ํ•œ๋‹ค
      • ๊ฐ ์›์†Œ๋Š” ์ง‘ํ•ฉ์˜ ๋Œ€ํ‘œ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งํฌ๋ฅผ ๊ฐ–๋Š”๋‹ค
    • ํŠธ๋ฆฌ
      • ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์„ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„
      • ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋Œ€ํ‘œ์ž๊ฐ€ ๋จ
  • ์ƒํ˜ธ๋ฐฐํƒ€ ์ง‘ํ•ฉ ์—ฐ์‚ฐ
    • make_set(x)
    • find_set(x)
    • union(x,y)

๐Ÿ“” ์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-set) ๊ตฌํ˜„

def make_set(x):
    p[x] = x


def find_set(x):
    if p[x] == x:
        return x
    else:
        p[x] = find_set(p[x])
        return p[x]


def union(x, y):
    # a์™€ b์˜ ๋Œ€ํ‘œ์ž๋ฅผ ์ฐพ์Œ
    px = find_set(x)
    py = find_set(y)
    if rank[px] > rank[py]:
        p[py] = px
    elif rank[py] > rank[px]:
        p[px] = py
    else:
        p[px] = py
        rank[py] += 1


# 1๋ถ€ํ„ฐ 8๊นŒ์ง€ ํ•ด๋ณด์ž
n = 8
p = [0] * (n + 1)
rank = [0] * (n + 1)
for i in range(1, n + 1):
    make_set(i)

union(1, 3)
union(2, 3)
union(5, 6)
union(6, 8)
union(1, 5)
union(6, 7)
print(p)
print(find_set(4))
print(find_set(5))

# ์—ฐ์‚ฐ์˜ ํšจ์œจ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•
# 1. path compression: ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ์ง์ ‘ root๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๊ฐฑ์‹ ํ•œ๋‹ค.
# 2. Rank๋ฅผ ์ด์šฉํ•œ Union: ๊ฐ ๋…ธ๋“œ๋Š” ์ž์‹ ์„ ๋ฃจํŠธ๋กœ ํ•˜๋Š” subtree์˜ ๋†’์ด๋ฅผ Rank๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
# 2-2. ๋‘ ์ง‘ํ•ฉ์„ ํ•ฉ์น  ๋•Œ rank๊ฐ€ ๋‚ฎ์€ ์ง‘ํ•ฉ์„ rank๊ฐ€ ๋†’์€ ์ง‘ํ•ฉ์— ๋ถ™์ธ๋‹ค.

 

๐Ÿ“” ์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint-set) ํŠน์ง•

  • ํ•ฉ์ง‘ํ•ฉ์„ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•  ๋•Œ ๋‘๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•ด์„œ, ์„ ํƒํ•œ ๋‘ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์— ์†ํ•˜๋Š” ์ง€ ํŒ๋ณ„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'CS > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)  (0) 2020.10.01
ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(kruskal)  (0) 2020.09.30
๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(Depth First Search, DFS)  (0) 2020.09.28
๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(Breath First Search, BFS)  (0) 2020.09.27
๊ณ„์ˆ˜ ์ •๋ ฌ(counting sort)  (0) 2020.09.26
    'CS/Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ๋‹ค์ด๋‚˜๋ฏนํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)
    • ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(kruskal)
    • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(Depth First Search, DFS)
    • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(Breath First Search, BFS)
    deo2kim
    deo2kim
    ์ฝ”๋”ฉ ๊ธฐ๋กํ•˜๊ธฐ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”