๊ด€๋ฆฌ ๋ฉ”๋‰ด

Unfazedโ—๏ธ๐ŸŽฏ

๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„๊ณผ ์ •์˜ ๋ณธ๋ฌธ

๋ฌธ์ œ ํ•ด๊ฒฐ (PS)/์ž๋ฃŒ๊ตฌ์กฐ

๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„๊ณผ ์ •์˜

9taetae9 2024. 11. 9. 21:41
728x90

ํŠธ๋ฆฌ : ์„ ํ˜•์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ํž˜๋“  ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ

 

๊ทธ๋ž˜ํ”„๋Š” ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ณด๋‹ค ์ข€๋” ์ผ๋ฐ˜์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

ํ˜„์‹ค ์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์ด๋‚˜ ์ถ”์ƒ์ ์ธ ๊ฐœ๋… ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„

ex) ์—ฌ๋ ค ๋„์‹œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋„๋กœ๋ง, ์‚ฌ๋žŒ๋“ค ๊ฐ„์˜ ์ง€์ธ ๊ด€๊ณ„, ์›น์‚ฌ์ดํŠธ ๊ฐ„์˜ ๋งํฌ ๊ด€๊ณ„ ๋“ฑ์˜ ์—ฐ๊ฒฐ ๊ตฌ์กฐ

 

ํŠธ๋ฆฌ์™€์˜ ์ฐจ์ด => ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์— ๋Œ€ํ•œ ์ œ์•ฝ์ด ์กด์žฌํ•˜๋‚˜ ๊ทธ๋ž˜ํ”„๋Š” ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์™€ ๊ฐ™์€ ์ œ์•ฝ์ด ์—†์Œ

 

๊ทธ๋ž˜ํ”„์˜ ์ •์˜

์–ด๋–ค ์ž๋ฃŒ๋‚˜ ๊ฐœ๋…์„ ํ‘œํ˜„ํ•˜๋Š” ์ •์ (vertex)๋“ค์˜ ์ง‘ํ•ฉ V์™€ ์ด๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)๋“ค์˜ ์ง‘ํ•ฉ E๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ ๊ตฌ์กฐ

์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์ •์˜๋˜๋ฉฐ ์ •์ ์˜ ์œ„์น˜, ๊ฐ„์„ ์˜ ์ˆœ์„œ ๋“ฑ์€ ๊ทธ๋ž˜ํ”„์— ์ •์˜์— ํฌํ•จ๋˜์ง€ ์•Š์Œ. 

 

๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜

ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ณ€ํ˜•๋œ ํ˜•ํƒœ๊ฐ€ ์กด์žฌ

 

๊ฐ„์„ ์ด ๊ฐ€์ง„ ์†์„ฑ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

  • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(directed graph) 
    • ๊ฐ ๊ฐ์„ ์€ ๋ฐฉํ–ฅ ์†์„ฑ์„ ๊ฐ€์ง. ์ •์  u์—์„œ v๋กœ์˜ ๊ฐ„์„ ๊ณผ v์—์„œ u๋กœ์˜ ๊ฐ„์„ ์€ ์„œ๋กœ ๋‹ค๋ฆ„
    • ์˜ˆ) ์ง์‚ฌ๋ž‘ ๊ด€๊ณ„, ๋„๋กœ๋ง์—์„œ ์ผ๋ฐฉ ํ†ตํ–‰ ๋“ฑ
  • ๋ฌดํ–ฅ ๊ทธ๋ž˜ํ”„(undirected grah) : ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์™€ ๋ฐ˜๋Œ€๋กœ ๊ฐ„์„ ์— ๋ฐฉํ–ฅ ์†์„ฑ์ด ์—†์Œ
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(weighted graph) 
    • ๊ฐ ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜(weight)๋ผ๋Š” ์‹ค์ˆ˜ ์†์„ฑ์„ ๋ถ€์—ฌ
    • ๊ฐ€์ค‘์น˜ ์ ์šฉ ์˜ˆ : ๋‘ ๋„์‹œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ, ๋‘ ๋ฌผ๊ฑด ์‚ฌ์ด์˜ ๊ตํ™˜ ๋น„์œจ, ๋‘ ์‚ฌ๋žŒ ์‚ฌ์ด์˜ ํ˜ธ๊ฐ๋„ ๋“ฑ
    • ๊ด€๋ จ ๋ฌธ์ œ : ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ, ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ

๊ทธ๋ž˜ํ”„์˜ ํ˜•ํƒœ์— ๋”ฐ๋ฅธ ๋ถ„๋ฅ˜

  • ๋‹ค์ค‘ ๊ทธ๋ž˜ํ”„(multigraph)
    • ๋‘ ์ •์  ์‚ฌ์ด์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ฐ„์„ ์ด ์กด์žฌ ๊ฐ€๋Šฅ
    • ์˜ˆ) ๋„๋กœ๋ง์˜ ๊ฒฝ์šฐ ๋‘ ์ง€์ ์„ ์ž‡๋Š” 2๊ฐœ ์ด์ƒ์˜ ๋„๋กœ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์ค‘ ๊ทธ๋ž˜ํ”„ ์ ์šฉ ๊ฐ€๋Šฅ
  • ๋‹จ์ˆœ ๊ทธ๋ž˜ํ”„(simple graph)
    • ๋‘ ์ •์  ์‚ฌ์ด์— ์ตœ๋Œ€ ํ•œ ๊ฐœ์˜ ๊ฐ„์„ ๋งŒ ์กด์žฌ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ(unrooted tree) : ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„๋Š” ์—†์ง€๋งŒ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋Š” ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๋ฌดํ–ฅ ๊ทธ๋ž˜ํ”„

์—ฌ๊ธฐ์„œ ๊ฐ„์„ ๋“ค์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๊ฐ€ ํŠธ๋ฆฌ์™€ ๊ฐ™๋‹ค๋Š” ๋ง์€ ๊ฐ„์„ ์„ ํ†ตํ•ด ๋‘ ์ •์ ์„ ์ž‡๋Š” ๋ฐฉ๋ฒ•์ด ํ•˜๋‚˜๋ฐ–์— ์—†๋‹ค๋Š” ์˜๋ฏธ

 

  • ์ด๋ถ„ ๊ทธ๋ž˜ํ”„(bipartite graph)
    • ์ •์ ๋“ค์„ ๊ฒน์น˜์ง€ ์•Š๋Š” ๋‘ ๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ ์„œ ์„œ๋กœ ๋‹ค๋ฅธ ๊ทธ๋ฃน์— ์†ํ•œ ์ •์ ๋“ค ๊ฐ„์—๋งŒ ๊ฐ„์„ ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„
    • ex) ๋ฉ˜ํ† -๋ฉ˜ํ‹ฐ๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ :  ๋‘ ์‚ฌ๋žŒ์ด ๋ฉ˜ํ† -๋ฉ˜ํ‹ฐ๋กœ์จ ํ•จ๊ป˜ ํ™œ๋™ ํ•˜๋ฉด ๋‘ ์ •์  ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์žˆ๋„๋ก ํ•จ
    • ์ด ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฉ˜ํ† ์™€ ๋ฉ˜ํ‹ฐ๋กœ ๋‚˜๋ˆ„๋ฉด ๊ฐ„์„ ์€ ํ•ญ์ƒ ๋‘ ๊ทธ๋ฃน ์‚ฌ์ด์—๋งŒ ์กด์žฌ
  • ์‚ฌ์ดํด ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(DAG, directed acyclic graph)
    • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ์ผ์ข…
    • ์‚ฌ์ดํด์ด ์—†์Œ => ํ•œ ์ ์—์„œ ์ถœ๋ฐœํ•ด ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ(์‚ฌ์ดํด)๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
    • ์—ฌ๋Ÿฌ ์ž‘์—…๋“ค ๊ฐ„์˜ ์ƒํ˜ธ ์˜์กด ๊ด€๊ณ„ ๋“ฑ์„ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ ์‹œ ์ ์šฉ ๊ฐ€๋Šฅ

๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ๋กœ

๊ฒฝ๋กœ : ๋๊ณผ ๋์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•œ ๊ฒƒ

๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ ์•ž ๊ฐ„์„ ์˜ ๋์ ์ด ๋’ท ๊ฐ„์„ ์˜ ์‹œ์ž‘์ ๊ณผ ๋งŒ๋‚˜์•ผ ํ•จ

๋‹จ์ˆœ ๊ฒฝ๋กœ(simple path) : ๊ฒฝ๋กœ ์ค‘ ํ•œ ์ •์ ์„ ์ตœ๋Œ€ ํ•œ ๋ฒˆ๋งŒ ์ง€๋‚˜๋Š” ๊ฒฝ๋กœ

 

๊ทธ๋ž˜ํ”„์˜ ์‚ฌ์šฉ ์˜ˆ

  • ์ฒ ๋„๋ง์˜ ์•ˆ์ •์„ฑ ๋ถ„์„

์–ด๋–ค ์ฒ ๋„๋ง์—์„œ ํ•œ ์—ญ์ด ํ์‡„๋˜์–ด ์—ด์ฐจ๊ฐ€ ์ง€๋‚˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ์ฒ ๋„๋ง ์ „์ฒด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์œผ๋กœ ์ชผ๊ฐœ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”์ง€, ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด ์–ด๋А ์—ญ์ด ๊ทธ๋Ÿฐ ์œ„ํ—˜์„ฑ์„ ๊ฐ–๋Š”์ง€ ๋ถ„์„

 

์ •์  : ์ฒ ๋„์˜ ๊ฐ ์—ญ

๊ฐ„์„  : ๋‘ ์—ญ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ฒ ๋กœ๋“ค

๋ฌธ์ œ ํ•ด๊ฒฐ : ๊ทธ๋ž˜ํ”„ + ์ ˆ๋‹จ์  ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

  • ์†Œ์…œ ๋„คํŠธ์›Œํฌ ๋ถ„์„

์‚ฌ๋žŒ๋“ค ๊ฐ„์˜ ์ง€์ธ/์นœ๋ฐ€๋„ ๊ด€๊ณ„ ๋ถ„์„

์ •์  : ์‚ฌ์ดํŠธ์˜ ํšŒ์›๋“ค

๊ฐ„์„  : ๋‘ ํšŒ์›์ด ์„œ๋กœ ์นœ๊ตฌ ์‚ฌ์ด์ธ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ

๋ฌธ์ œ ํ•ด๊ฒฐ : ๊ทธ๋ž˜ํ”„ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ => ํ•œ ๋‹ค๋ฆฌ ๊ฑด๋„ˆ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ ์ˆ˜, ๋ช‡ ๋‹ค๋ฆฌ ๊ฑด๋„ˆ์•ผ ํŠน์ • ์‚ฌ๋žŒ์„ ์•Œ๊ฒŒ ๋˜๋Š” ์ง€ ๋“ฑ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

 

  • ์ธํ„ฐ๋„ท ์ „์†ก ์†๋„ ๊ณ„์‚ฐ

์ˆ˜๋งŽ์€ ์ปดํ“จํ„ฐ์™€ ๋ผ์šฐํ„ฐ๋“ค์ด ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ธํ„ฐ๋„ท

์ •์  : ๋ผ์šฐํ„ฐ์™€ ์ปดํ“จํ„ฐ

๊ฐ„์„  : ๋‘ ๊ธฐ๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ผ€์ด๋ธ”

 

๋ฌธ์ œ ์ƒํ™ฉ : ๋‘ ์ปดํ“จํ„ฐ ๊ฐ„ ์ „์†ก์šฉ๋Ÿ‰ ๊ตฌํ•˜๊ธฐ, ๊ฒฝ๋กœ์˜ ์‹œ๊ฐ„๋‹น ์ „์†ก ์šฉ๋Ÿ‰ = ๊ฒฝ๋กœ๊ฐ€ ์ง€๋‚˜๋Š” ์ผ€์ด๋ธ” ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ „์†ก ์šฉ๋Ÿ‰์„ ๊ฐ–๋Š” ์ผ€์ด๋ธ”์— ์ขŒ์šฐ

๋ฌธ์ œ ํ•ด๊ฒฐ : ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‘์šฉ

 

  • ํ•œ ๋ถ“ ๊ทธ๋ฆฌ๊ธฐ

์ข…์ด์—์„œ ์—ฐํ•„์„ ๋–ผ์ง€ ์•Š๊ณ  ์ฃผ์–ด์ง„ ๋„ํ˜•์„ ๊ทธ๋ฆฌ๋˜, ๋ชจ๋“  ์„ ์„ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ง€๋‚˜๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•œ์ง€

์ •์  : ์„ ๋“ค์ด ๋งŒ๋‚˜๋Š” ์ ๋“ค

๊ฐ„์„  : ์ ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ๋“ค

=> ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๊ฐ„์„ ์„ ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ง€๋‚˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ธฐ

๋ฌธ์ œ ํ•ด๊ฒฐ : ์˜ค์ผ๋Ÿฌ ๊ฒฝ๋กœ(Eulerian path), ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์‘์šฉ

 

  • ์™ธํ™˜ ๊ฑฐ๋ž˜

์™ธํ™˜ ๊ฑฐ๋ž˜ ์‹œ์žฅ์€ ๋‹ฌ๋Ÿฌ, ์œ ๋กœ, ์—”, ํ”„๋ž‘ ๋“ฑ์˜ ํ†ตํ™”์™€ ์ด๋“ค ๊ฐ„์˜ ๊ตํ™˜ ๋น„์œจ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

1๋‹ฌ๋Ÿฌ๋ฅผ ์œ ๋กœ๋กœ ๋ฐ”๊พธ๊ณ , ์œ ๋กœ๋ฅผ ์—”์œผ๋กœ, ๋‹ค์‹œ ์—”ํ™”๋ฅผ ๋‹ฌ๋Ÿฌ๋กœ ํ™˜์ „ํ•˜์˜€์„ ๋•Œ 1๋‹ฌ๋Ÿฌ๋ณด๋‹ค ๋งŽ์€ ๋ˆ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ์•„๋น„ํŠธ๋Ÿฌ์ง€๋ผํ•œ๋‹ค.

ํ™˜์œจ ๋ชฉ๋ก์ด ์ฃผ์–ด์งˆ ๋•Œ ๋ชฉ๋ก์— ์•„๋น„ํŠธ๋Ÿฌ์ง€ ์กด์žฌ ์—ฌ๋ถ€ ๊ตฌํ•˜๊ธฐ

์ •์  : ๊ฐ ํ†ตํ™”

๊ฐ„์„  : ์„œ๋กœ ๊ตํ™˜ ๊ฐ€๋Šฅํ•œ ํ†ตํ™”๋“ค ์‚ฌ์ด(๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„)

u์—์„œ v๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜ : ๋‘ ํ†ตํ™” ๊ฐ„์˜ ๊ตํ™˜ ๋น„์œจ

ex) 1๋‹ฌ๋Ÿฌ๊ฐ€ 1000์›์ด๋ผ๋ฉด ๋‹ฌ๋Ÿฌ์—์„œ ์›์œผ๋กœ ๊ฐ€๋Š” ๊ฐ€์ค‘์น˜๋Š” 1000

 

์•„๋น„ํŠธ๋Ÿฌ์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ : ์–ด๋–ค ์‚ฌ์ดํด์— ํฌํ•จ๋œ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์ „๋ถ€ ๊ณฑํ–ˆ์„ ๋•Œ 1์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ’์ด ๋˜์–ด์•ผํ•จ

์–‘๋ณ€์— ๋กœ๊ทธ๋ฅผ ์”Œ์šฐ๊ณ  -1์„ ๊ณฑํ•˜๋Š” ์‹์˜ ๋ณ€ํ˜•์„ ํ†ตํ•ด ๊ฐ„์„  ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์Œ์ˆ˜์ธ ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋ฉด  ์•„๋น„ํŠธ๋Ÿฌ์ง€๊ฐ€ ์กด์žฌ ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Œ

๋ฌธ์ œ ํ•ด๊ฒฐ : ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์Œ์ˆ˜์ธ ์‚ฌ์ดํด ์ฐพ๊ธฐ)

 

์•”์‹œ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋“ค

๊ทธ๋ž˜ํ”„ ๊ฐ™์€ ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š” ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋„ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด์„œ ํ‘œํ˜„ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋“ค์ด ์žˆ๋‹ค.

  • ํ•  ์ผ ๋ชฉ๋ก ์ •๋ฆฌ

์™ธ์ถœ์„ ํ•˜๋ ค๋ฉด ์™ธ์ถœ๋ณต์„ ์ž…์–ด์•ผ ํ•˜๊ณ , ์™ธ์ถœ๋ณต์„ ์ž…์œผ๋ ค๋ฉด ์™ธ์ถœ๋ณต์„ ๋นจ์•„์•ผ ํ•˜๊ณ , ์™ธ์ถœ๋ณต์„ ๋นจ๋ ค๋ฉด ์„ธ์ œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ , ์„ธ์ œ๋ฅผ ์‚ฌ๋ ค๋ฉด ์™ธ์ถœ์„ ํ•ด์•ผํ•˜๋Š” ์„œ๋กœ ์˜์กด ๊ด€๊ณ„์— ์žˆ๋Š” ์ผ๋“ค์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ. 

ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ํ•ด ๋‚˜๊ฐˆ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€, ์–ด๋А ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋ฉด ๋˜๋Š”์ง€๋ฅผ ๊ณ„์‚ฐ => ์œ„์ƒ ์ •๋ ฌ(topological sorting)

๋ฌธ์ œ ํ•ด๊ฒฐ : ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์‘์šฉ

  • 15-ํผ์ฆ

4x4 ํฌ๊ธฐ์˜ ๊ฒŒ์ž„ํŒ์— 1๋ถ€ํ„ฐ 15๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ์ ํžŒ ์—ด๋‹ค์„ฏ ๊ฐœ์˜ ํƒ€์ผ์ด ๋ผ์›Œ์ ธ ์žˆ๊ณ , ์ด ํƒ€์ผ๋“ค์„ ์ตœ์†Œ๋กœ ์›€์ง์—ฌ ์›๋ž˜ ์žˆ๋˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ

์ •์  : ๊ฒŒ์ž„ํŒ์—์„œ ํ˜„์žฌ ํƒ€์ผ์˜ ๋ฐฐ์น˜

๊ฐ„์„  : ํ•œ ๋ฐฐ์น˜์—์„œ ํƒ€์ผ์„ ํ•œ ๋ฒˆ ์›€์ง์—ฌ ๋‹ค๋ฅธ ๋ฐฐ์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ์˜ ๋‘ ์ •์ ์„ ์—ฐ๊ฒฐ

๊ทธ๋ž˜ํ”„ ์ƒ์—์„œ ๋‘ ์  ์‚ฌ์ด๋ฅผ ์ž‡๋Š” ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๊ธฐ 

 

  • ๊ฒŒ์ž„ํŒ ๋ฎ๊ธฐ 

NxN ๊ฒŒ์ž„ํŒ์„ 1x2 ํฌ๊ธฐ์˜ ๋ธ”๋ก์œผ๋กœ ๋ฎ๊ธฐ(๋‹จ, ๊ฒŒ์ž„ํŒ์˜ ์ผ๋ถ€๋Š” ๋ง‰ํ˜€ ์žˆ์–ด ๋ชจ๋“  ์นธ์— ๋ธ”๋ก์„ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹˜)

์ •์  : ๋ง‰ํžˆ์ง€ ์•Š์€ ๊ฐ ์นธ 

๊ฐ„์„  : ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ์นธ๋“ค ์‚ฌ์ด

๋ฌธ์ œ ํ•ด๊ฒฐ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„ => ์ด๋ถ„ ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

  • ํšŒ์˜์‹ค ๋ฐฐ์ •

N๊ฐœ์˜ ํŒ€์ด ๊ฐ๊ฐ ํšŒ์˜๋ฅผ ํ•˜๊ณ  ์‹ถ๊ณ , ํšŒ์˜์‹ค์€ ํ•˜๋‚˜ ๋ฟ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •

๊ฐ ํŒ€์€ ํšŒ์˜์‹ค ์‚ฌ์šฉ ํฌ๋ง ์‹œ๊ฐ„์„ 2๊ฐœ์”ฉ ์ ์–ด์„œ ์ œ์ถœ

ํšŒ์˜์‹ค์€ ํ•œ๋ฒˆ์— ํ•œํŒ€๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ, ํšŒ์˜๋Š” ์‹œ์ž‘๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ค‘๋‹จ์—†์ด ์ง„ํ–‰

๋ฌธ์ œ : ๊ฐ ํŒ€๋งˆ๋‹ค ์ œ์ถœํ•œ 2๊ฐœ์˜ ํฌ๋ง ์‹œ๊ฐ„ ์ค‘ ํ•˜๋‚˜์”ฉ์„ ๋ฐฐ์ •ํ•˜์—ฌ ๋ชจ๋“  ํŒ€์ด ๋ฌธ์ œ์—†์ด ํšŒ์˜ ์ง„ํ–‰ ๊ฐ€๋Šฅ ์—ฌ๋ถ€

๋งŒ์กฑ์„ฑ ๋ฌธ์ œ(satisfiabillity problem) ์ค‘ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋‘ ์„ ํƒ์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋กœ 2-SAT์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ฌธ์ œ ์œ ํ˜•

๋ฌธ์ œ ํ•ด๊ฒฐ : ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ• ๊ฒฐํ•ฉ์„ฑ ๋ฌธ์ œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ•ด๊ฒฐ

 

๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ ๋ฐฉ๋ฒ•

๊ฐ ์ •์ ์— 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ๋ถ™ํžˆ๊ณ , ๋ฐฐ์—ด์— ๊ฐ ์ •์ ์˜ ์ •๋ณด๋ฅผ ์ €์žฅ

๊ฐ ๊ฐ„์„ ์€ ๋ฐ˜๋Œ€์ชฝ ์ •์ ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅ

 

๊ฐ„์„ ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹ (์ธ์ ‘ ๋ฆฌ์ŠคํŠธ, ์ธ์ ‘ ํ–‰๋ ฌ)

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(adjacency list) ํ‘œํ˜„

๊ฐ ์ •์ ๋งˆ๋‹ค ํ•ด๋‹น ์ •์ ์—์„œ ๋‚˜๊ฐ€๋Š” ๊ฐ„์„ ์˜ ๋ชฉ๋ก์„ ์ €์žฅํ•ด์„œ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„

๋”ฐ๋ผ์„œ ๊ฐ ์ •์ ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„

ArrayList<ArrayList<Integer>> adjacent;

 

adjacent.get(i)๋Š” ์ •์  i ์™€ ๊ฐ„์„ ์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•œ ArrayList<Integer>๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ.

๋งŒ์•ฝ ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ ๋“ฑ ๊ฐ„์„ ์ด ์ถ”๊ฐ€์  ์†์„ฑ์„ ๊ฐ–๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด?

๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ์ˆœํžˆ ArrayList<Integer>๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค. ๊ฐ ๊ฐ„์„ ์ด ๊ฐ€์ค‘์น˜์™€ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ์†์„ฑ์„ ํฌํ•จํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ์š”์†Œ๋ฅผ ArrayList<Edge> ํ˜•ํƒœ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ Edge ํด๋ž˜์Šค๋Š” ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์™€ ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ๋‹ด๊ฒŒ ๋œ๋‹ค.

class Edge {
    int destination;  // ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ
    int weight;       // ๊ฐ„์„  ๊ฐ€์ค‘์น˜

    public Edge(int destination, int weight) {
        this.destination = destination;
        this.weight = weight;
    }
}

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ์‹์˜ ๋‹จ์  : ๋‘ ์ •์ ์ด ์ฃผ์–ด์งˆ ๋•Œ ์ด ์ •์ ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ผ์ผํžˆ ์ˆœํšŒํ•ด์•ผํ•จ.

=> ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์—์„œ ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ์‹์ด ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„ ๋ฐฉ์‹์ž„

 

 

์ธ์ ‘ ํ–‰๋ ฌ(adjacency matrix) ํ‘œํ˜„

V x V ํฌ๊ธฐ์˜ ํ–‰๋ ฌ, ์ฆ‰ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ์˜ ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„์€ ๋‹จ์ˆœํžˆ 2์ฐจ์› ๋ฐฐ์—ด boolean ๊ฐ’ ๋ฐฐ์—ด์ด๋‹ค.

boolean[][] adjacent = new boolean[n][n];

 

์ด๋•Œ adjacent[i][j]๋Š” ์ •์  i์—์„œ ์ •์  j๋กœ ๊ฐ€๋Š” ๊ฐ„์„ ์ด ์žˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” boolean ๊ฐ’ ๋ณ€์ˆ˜๋‹ค. ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ•  ๋•Œ๋Š”, ๊ฐ ๊ฐ„์„ ์˜ ์ •๋ณด๋ฅผ boolean ๋Œ€์‹  int๋‚˜ double ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค. ๊ฐ„์„ ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1 ํ˜น์€ Integer.MAX_VALUE ๊ฐ™์€ ๊ฐ’์œผ๋กœ ํ‘œ๊ธฐํ•˜์—ฌ ๊ตฌ๋ณ„ํ•œ๋‹ค.

 

 

์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„๊ณผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„์˜ ๋น„๊ต

์œ„ ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์€ ์™„์ „ํžˆ ์ •๋ฐ˜๋Œ€์˜ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ ๊ณผ ์žฅ์ ์ด ์„œ๋กœ ์ •๋ฐ˜๋Œ€์ด๋‹ค. ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜๋‚˜ ๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ํ‘œํ˜„ ๋ฐฉ์‹์„ ์„ ํƒํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„  (๊ฐ„์„  ์กด์žฌ ํ™•์ธ ์‹œ๊ฐ„ O(1), ๊ณต๊ฐ„ ๋ณต์žก๋„ ๋น„๊ต์  ๋†’์Œ)

  • ์žฅ์  
    • ์ •์ ์˜ ๋ฒˆํ˜ธ u, v ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‘ ์ •์ ์„ ์ž‡๋Š” ๊ฐ„์„ ์ด ์žˆ๋Š”์ง€๋ฅผ ํ•œ ๋ฒˆ์˜ ๋ฐฐ์—ด ์ ‘๊ทผ๋งŒ์œผ๋กœ ํ™•์ธ
  • ๋‹จ์  
    • V x V ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜์™€ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ O(V^2) ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉ
    • ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ V^2์— ๊ทผ์ ‘ํ•œ๋‹ค๋ฉด ๋‘ ํ‘œํ˜„ ๋ฐฉ์‹์€ ๋น„์Šทํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ ๊ณต๊ฐ„์  ๋‚ญ๋น„๊ฐ€ ๋น„๊ต์  ์‹ฌํ•จ

 

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„ (๊ฐ„์„  ์กด์žฌ ์œ ๋ฌด ํ™•์ธ ๋น„๊ต์  ๋А๋ฆผ, ๊ณต๊ฐ„ ๋ณต์žก๋„ ๊ฐ„์„ ์ด ์ ์€ ๊ฒฝ์šฐ ์œ ๋ฆฌ)

  • ์žฅ์ 
    • V ๊ฐœ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— ์‹ค์ œ ๊ฐ„์„  ์ˆ˜๋งŒํผ์˜ ์›์†Œ๊ฐ€ ๋“ค์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ „์ฒด O(V + E)์˜ ๊ณต๊ฐ„๋งŒ์„ ์‚ฌ์šฉ
  • ๋‹จ์  
    • ๊ฐ„์„  (u, v)๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ์–ด๊ฐ€๋ฉด์„œ ๊ฐ ์›์†Œ ์ผ์ผ์ด ํ™•์ธ

 

ํฌ์†Œ ๊ทธ๋ž˜ํ”„(sparse graph)์˜ ๊ฒฝ์šฐ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ, ๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„(dense graph)์— ๋Œ€ํ•ด์„œ๋Š” ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ :

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Œ€ํšŒ์—์„œ ๋ฐฐ์šฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต - ๊ตฌ์ข…๋งŒ ์ €์ž

 

728x90