• ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 5์ผ์ฐจ

    2021. 11. 5.

    by. JuneBee

    728x90
    ๋ฐ˜์‘ํ˜•

     ๋‚ ์งœ : 2021 ๋…„ 11 ์›” 5 ์ผ
    ์‹œ์ฒญ ๊ฐ•์˜  : ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์˜ ์ดํ•ด์™€ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1) ~ (4)

    ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ : ํฌ๋ฃจ์Šค์นผ๊ณผ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

    ์ด์ค‘์—์„œ, ์˜ค๋Š˜์€ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.

     

    ์‹ ์žฅ ํŠธ๋ฆฌ (Spanning Tree)

    • ์ „์ฒด ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.
    • ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

    ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Tutorialspoint

    ์œ„ ๊ทธ๋ž˜ํ”„์—์„œ, ๊ทธ๋ž˜ํ”„ G ๋Š” ์‚ฌ์ดํด์ด ์กด์žฌํ•œ๋‹ค. 

    ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋Š”, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์œผ๋ฉด์„œ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„๋‹ค

     

    ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ

    • ๊ฐ€์ค‘์น˜๊ฐ€ ์กด์žฌํ•˜๋Š” ์‹ ์žฅ ํŠธ๋ฆฌ ์ค‘,  ๊ฐ„์„ ์˜ ํ•ฉ(weight)์ด ๊ฐ€์žฅ ์ž‘์€ ํŠธ๋ฆฌ

     

    ๋งŒ์•ฝ, ์•ž์˜ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋ ‡๋‹ค๋ฉด, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ํŠธ๋ฆฌ๋กœ ์ฒซ๋ฒˆ์งธ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๊ฐ€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ๋œ๋‹ค. 

     

    ํ˜„์‹ค ์„ธ๊ณ„์—์„œ ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋˜๋Š” ์˜ˆ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ธธ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์ด ์žˆ๋‹ค.

     

    ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ฆฌ๋”” ๋ฐฉ์‹์œผ๋กœ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค

    ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    • ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ฆ
    • ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ„์„  ์ •๋ ฌ (์ตœ์†Œ๊ฐ€ ๊ฐ€์žฅ ์œ„์—์˜ค๊ฒŒํ•œ๋‹ค)
    • ๋‘ ์ •์ ์˜ ๋ฃจํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ฃจํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ๊ฒฝ์šฐ์—๋งŒ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค 

    ๋งŒ์•ฝ, ๋‘ ์ •์ ์˜ ๋ฃจํŠธ๊ฐ€ ๊ฐ™๋‹ค๋ฉด ์‚ฌ์ดํด์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์œ„์™€๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

    B์™€ C๋Š” ๋ฃจํŠธ๊ฐ€ ๊ฐ™๋‹ค (A)

     

    B ์™€ C๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ์‚ฌ์ดํด์ด ์ƒ์„ฑ๋˜๊ณ , ๋”์ด์ƒ ์‹ ์žฅ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋œ๋‹ค.

     

    ๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    ๊ทธ๋ ‡๋‹ค๋ฉด, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ.

    ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

    • ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ฆ
    • ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ„์„  ์ •๋ ฌ (์ตœ์†Œ๊ฐ€ ๊ฐ€์žฅ ์œ„์—์˜ค๊ฒŒํ•œ๋‹ค)
    • ๋‘ ์ •์ ์˜ ๋ฃจํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ , ๋ฃจํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ๊ฒฝ์šฐ์—๋งŒ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค 

    Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜

    ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”, ์‚ฌ์ดํด์˜ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์œ ๋‹ˆ์˜จํŒŒ์ธ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

    ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋จผ์ €,

    1. ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ง‘ํ•ฉ์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.

    A B C D E F G H

    ๊ฐ ๋…ธ๋“œ๋“ค์„ ๋ถ„๋ฆฌ์‹œํ‚ค๊ณ , ๋ณธ์ธ ๋…ธ๋“œ๋ฅผ ๋ณธ์ธ์—๋งŒ ์—ฐ๊ฒฐ์‹œ์ผœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

     

    2. Union : ๋‘๊ฐœ์˜ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์นœ๋‹ค

    tree1 + tree2 = newTree

    ํŠธ๋ฆฌ๋“ค์„ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์€ ํŠธ๋ฆฌ๋ฅผ ๊ณจ๋ผ์„œ ํ•ฉ์ณ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Union ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ํ•ฉ์นœ๋‹ค

     

    3. Find : ๋‘ ๋…ธ๋“œ์˜ ๋ฃจํŠธ๊ฐ€ ๊ฐ™์€์ง€ ํŒ๋‹จํ•œ๋‹ค

    ๋‘ ๋…ธ๋“œ์˜ ๋ฃจํŠธ๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ์‚ฌ์ดํด์ด ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— Find๋ฅผ ํ†ตํ•˜์—ฌ ๋ฃจํŠธ๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค.

     

    Union-by-rank ์™€ Path-Compression ์•Œ๊ณ ๋ฆฌ์ฆ˜

    ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€, ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๊ฐ™์€ ํ˜•ํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

     

    ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : studytonight

    ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

    a ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, e ๋…ธ๋“œ์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฑฐ์ณ๊ฐ€์•ผํ•œ๋‹ค.

    ์ด๋ ‡๊ฒŒ, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง€๊ฒŒ ๋˜๋Š”๋ฐ (O(N)) , ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Union-by-rank ์™€ Path - compression ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

    Union-by-rank

    rank ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ , union ์‹œ ๋‘ ํŠธ๋ฆฌ์˜ ๋žญํฌ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋†’์ด๊ฐ€ ์ž‘์€ ํŠธ๋ฆฌ๋ฅผ ํฐ ํŠธ๋ฆฌ์— ๋ถ™์ด๊ณ  ๋†’์ด๊ฐ€ ๊ฐ™๋‹ค๋ฉด ํ•œ์ชฝ์„ ํฌ๊ฒŒ ๋งŒ๋“ค๊ณ  ํ•ฉ์ฒดํ•œ๋‹ค.

    ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Lemidia's Programming  

    ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ฉด ๋†’์ด๊ฐ€ ๋ฌดํ•œ์ • ๋†’์•„์ง€๋Š”๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    Path Compression

    1. find๋ฅผ ์‹คํ–‰ํ•œ ๋…ธ๋“œ์—์„œ ๊ฑฐ์ณ๊ฐ„ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ์— ๋‹ค์ด๋ž™ํŠธ๋กœ ์—ฐ๊ฒฐ์‹œํ‚ด

    2. find๋ฅผ ์‹คํ–‰ํ•œ ๋…ธ๋“œ๋Š”, ์ดํ›„๋ถ€ํ„ฐ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ•œ๋ฒˆ์— ์•Œ ์ˆ˜ ์žˆ์Œ

    ์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : Wikimedia Commons

    ์œ„ ๊ทธ๋ฆผ์—์„œ, a์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด find ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด : a ๋ถ€๋ชจ๋Š” b, b์˜ ๋ถ€๋ชจ๋Š” c, c์˜ ๋ถ€๋ชจ๋Š” d . d๋Š” ๋ถ€๋ชจ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์ด๋ฏ€๋กœ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋‹ค.

    ํ•˜์ง€๋งŒ, ๊ณ„์† ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋งค๋ฒˆ ๋ถ€๋ชจ๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์„œ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    a: ๋ถ€๋ชจ- b

    b: ๋ถ€๋ชจ - c -> a์˜ ๋ฃจํŠธ๋ฅผ c๋กœ ์—…๋ฐ์ดํŠธ

    c: ๋ถ€๋ชจ -d -> a,b์˜ ๋ฃจํŠธ๋ฅผ d๋กœ ์—…๋ฐ์ดํŠธ

     

     

    ์ฝ”๋“œ ๊ตฌํ˜„

    ์œ„์—์„œ ๋งํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์ด ํ•„์š”ํ•˜๋‹ค:

    • Node Class : ๊ฐ€์ค‘์น˜, ์ •๋ ฌ ์˜ค๋ฒ„๋ผ์ด๋“œ
    • Find method : ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค (path compression ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋‹จ์ถ•)
    • Union method : ๊ฐ„์„ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค (union by rank ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ)
    • MakeSet method: ๋žญํฌ๋ฅผ ์ดˆ๋ฐ˜์— ์ดˆ๊ธฐํ™” ์‹œ์ผœ์„œ ๋ชจ๋“  ์ •์ ์„ ๋…๋ฆฝ์ ์ธ ์ •์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•  ๋ฉ”์„œ๋“œ
    • Kruskal method: ์œ„ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹ค์งˆ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ๋ฉ”์„œ๋“œ

    ์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ, ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ธฐ๋กํ•  ํ•ด์‰ฌ๋งต๊ณผ ๋ณธ์ธ ๋žญํฌ๋ฅผ ๊ธฐ๋กํ•  ํ•ด์‰ฌ๋งต์„ ์„ค์ •ํ•ด์ค€๋‹ค.

    HashMap<String, String> parent = HashMap<>();
    HashMap<String, Integer> rank = HashMap<>();

     

    1. ๋…ธ๋“œ ํด๋ž˜์Šค
    ์ •๋ ฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ weight์ด ํ•ต์‹ฌ
    public static class Node implements Comparable<Node>{
    int weight, V, U;
    //setter method ๊ตฌํ˜„
    @Override
    public int compareTo(Node node){
    return this.weight - node.weight;
    }
    }
    2. Find Method
    Path Compression ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋‹จ์ถ•
    public String find (String node) {
    if(parent.get(node)!=node){ //์ž๊ธฐ ๋ถ€๋ชจ๊ฐ€ ๋ฃจํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด
    parent.put(node.this.find(this.parent.get(node))); //๋ถ€๋ชจ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ
    }
    retunr this.parent.get(node);//์ตœ์ข… ๋ฃจํŠธ ๋ฐ˜ํ™˜
    }
    3. Union Method
    Union by Rank ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋‘ ๊ฐ„์„ ์„ ์—ฐ๊ฒฐํ•œ๋‹ค
    public void union(String u, String v){ //๋…ธ๋“œ u์™€ ๋…ธ๋“œ v
    String root1 = find(u); //๋…ธ๋“œ u์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค
    String root2 = find(v); //๋…ธ๋“œ v์˜ ๋ฃจํŠธ๋ฅผ ์ฐพ๋Š”๋‹ค
    //union by rank ๊ธฐ๋ฒ•
    if(rank.get(root1) > rank.get(root2)){ //u์˜ ๋žญํฌ๊ฐ€ v์˜ ๋žญํฌ๋ณด๋‹ค ํฌ๋‹ค๋ฉด v๋ฅผ u์— ๋”ํ•œ๋‹ค
    parent.put(root2, root1);
    }
    else{
    parent.put(root1, root2); //๋ฐ˜๋Œ€์ธ ์ƒํ™ฉ
    if(rank.get(root1) == rank.get(root2){ //๋งŒ์•ฝ ๋žญํฌ๊ฐ€ ๊ฐ™์œผ๋ฉด ํ•˜๋‚˜๋ฅผ ์กฐ์ •ํ•œ๋‹ค
    rank.put(root2, rank.get(root2)+1 ); //๋ฃจํŠธ 2์˜ ๋žญํฌ๋ฅผ ์กฐ์ •์‹œํ‚ด
    }
    }
    }

     

    4. ์ดˆ๊ธฐํ™”
    ์ „์ฒด ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ›์•„ ์ž์‹ ์„ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๋žญํฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์„œ
    ๋ถ„๋ฆฌ๋œ set ์œผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…
    public void makeSet(String node) {
    parent.put(node, node) ;//์ž๊ธฐ ์ž์‹  ์—ฐ๊ฒฐ
    rank.put(node, 0);//๋žญํฌ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
    }

     

    5. ํฌ๋ฃจ์Šค์นผ ๋ฉ”์„œ๋“œ
    ์•ž์„œ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. (์ตœ๋‹จ๊ฒฝ๋กœ)
    // nodes : ๊ฐ ๋…ธ๋“œ๋ฅผ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ [ex : "a", "b", "c", "d"]
    // infoList : ๊ฐ ๋…ธ๋“œ ์ •๋ณด๋“ค์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ [ex : u = "a", v = "b", weight = "3"]
    public ArrayList<Node> Kruskal (ArrayList<String> nodes, ArrayList<Node> infoList){
    ArrayList<Node> mst = new ArrayList<>();//์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๋‹ด์„ ์ตœ์†Œ์‹ ์žฅ๋ฆฌ์ŠคํŠธ
    //์ดˆ๊ธฐํ™”
    for(int i = 0 ; i< nodes.size() ; i++){ this.makeSet(nodes.get(i);}
    //๊ฐ„์„ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ sort
    Collections.sort(infoList);
    //์ตœ๋‹จ๊ฒฝ๋กœ
    for(int i = 0 ; i < infoList.size() ; i++){
    if(find(infoList.get(i).u) != find(infoList.get(i).v){ //from-to์˜ ๋ฃจํŠธ๊ฐ€ ๋‹ค๋ฅผ๋•Œ : ์ถ”๊ฐ€๊ฐ€๋Šฅ
    union(infoList.get(i).u , infoList.get(i).v); //ํŠธ๋ฆฌ ํ•ฉ์ฒด
    mst.add(infoList.get(i)); //์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์— ํ˜„์žฌ ๊ฒฝ๋กœ ์ถ”๊ฐ€
    }
    }
    return mst ; //์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(์ตœ๋‹จ๊ฒฝ๋กœ)๋ฅผ ๋ฐ˜ํ™˜
    }
    }

     

     

     

     

     

     

     

     

     

     

     

     


    ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ๋ฐ”๋กœ๊ฐ€๊ธฐ๐Ÿ‘‰ https://bit.ly/3FVdhDa

     

    ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ | ํŒจ์ŠคํŠธ์บ ํผ์Šค

    ๋”ฑ 5์ผ๊ฐ„ ์ง„ํ–‰๋˜๋Š” ํ™˜๊ธ‰์ฑŒ๋ฆฐ์ง€๋กœ ์ˆ˜๊ฐ•๋ฃŒ 100% ํ™˜๊ธ‰๋ฐ›์œผ์„ธ์š”! ๋” ๋Šฆ๊ธฐ์ „์— ์ž๊ธฐ๊ณ„๋ฐœ ๋ง‰์ฐจ ํƒ‘์Šน!

    fastcampus.co.kr

    ๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

    728x90
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€