Algorithm

[Algorithm] ์ง‘ํ•ฉ ์ปค๋ฒ„ ๋ฌธ์ œ (Set Covering Problem)

yevdev 2021. 10. 13. 10:21

๐Ÿ’ก์ง‘ํ•ฉ์ปค๋ฒ„๋ฌธ์ œ (Set Covering Problem)

  • n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ์ง‘ํ•ฉ U
  • U์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ๋“ค์„ ์›์†Œ๋กœํ•˜๋Š” ์ง‘ํ•ฉ F
  • F์˜ ์›์†Œ๋“ค์ธ ์ง‘ํ•ฉ๋“ค ์ค‘์—์„œ ์–ด๋–ค ์ง‘ํ•ฉ๋“ค์„ ์„ ํƒํ•˜์—ฌ ํ•ฉ์ง‘ํ•ฉํ•˜๋ฉด U์™€ ๊ฐ™๊ฒŒ ๋˜๋Š”๊ฐ€?
  • ์—ฌ๊ธฐ์„œ, F์—์„œ ์„ ํƒํ•˜๋Š” ์ง‘ํ•ฉ๋“ค์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

โ“์ตœ์ ํ•ด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์•„์•ผํ• ๊นŒ?

  • ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ• : F์— ์žˆ๋Š” ์ง‘ํ•ฉ๋“ค์˜ ๋ชจ๋“  ์กฐํ•ฉ์„ 1๊ฐœ์”ฉ ํ•ฉ์ง‘ํ•ฉํ•˜์—ฌ U๊ฐ€ ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , U๊ฐ€ ๋˜๋Š” ์กฐํ•ฉ์˜ ์ง‘ํ•ฉ ์ˆ˜๊ฐ€ ์ตœ์†Œ์ธ ๊ฒƒ์„ ์ฐพ๋Š” ๊ฒƒ
    • Brute Force Algorithm : n๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ์œผ๋ฉด (2^n -1)๊ฐœ๋ฅผ ๋‹ค ๊ฒ€์‚ฌ ํ•„์š”
    • n์ด ์ปค์ง€๋ฉด ์ตœ์ ํ•ด๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ์‹ค์งˆ์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ
    • ์‹ค์ œ๋กœ ์ง‘ํ•ฉ์ปค๋ฒ„๋ฌธ์ œ๋Š” NP-hard ๋ฌธ์ œ๋กœ polynomial time optimal algorithm์„ ์„ค๊ณ„ํ•˜๊ธฐ ๋งค์šฐ ์–ด๋ ต๋‹ค. (ํ˜„์‹ค์ ์ธ ์‹œ๊ฐ„ ๋‚ด์— ํ•ด๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ต)
  • ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ์ตœ์ ํ•ด๋ฅผ ์ฐพ๋Š” ๋Œ€์‹  ์ตœ์ ํ•ด์— ๊ทผ์ ‘ํ•œ ๊ทผ์‚ฌํ•ด(approximation solution)๋ฅผ ์ฐพ๋Š” ๊ฒƒ.

 

๐Ÿ’ก์˜์‚ฌ์ฝ”๋“œ

1. C = ∅
2. while(U!=∅)do{
3. 	U์˜ ์›์†Œ๋“ค์„ ๊ฐ€์žฅ ๋งŽ์ด ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง‘ํ•ฉ Si๋ฅผ F์—์„œ ์„ ํƒํ•œ๋‹ค. // ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
4. 	U = U-(Si์˜ ์›์†Œ๋“ค)
5.  Si๋ฅผ F์—์„œ ์ œ๊ฑฐํ•˜๊ณ , Si๋ฅผ C์— ์ถ”๊ฐ€ํ•œ๋‹ค.
}
6. return C

-> ์ตœ์ข…ํ•ด๊ฐ€ optimal์€ ์•„๋‹ˆ๋‹ค.

 

 

๐Ÿ’ก์‹œ๊ฐ„๋ณต์žก๋„

  • while ๋ฃจํ”„์˜ ์ˆ˜ํ–‰ํšŸ์ˆ˜ : ์ตœ๋Œ€ n๋ฒˆ
    • ์™œ๋ƒํ•˜๋ฉด ๋ฃจํ”„๊ฐ€ 1๋ฒˆ ์ˆ˜ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ง‘ํ•ฉ U์˜ ์›์†Œ 1๊ฐœ์”ฉ๋งŒ ์ปค๋ฒ„๋  ๋•Œ, ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋ฃจํ”„๊ฐ€ n๋ฒˆ ์ˆ˜ํ–‰๋˜์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๋ฃจํ”„๊ฐ€ 1๋ฒˆ ์ˆ˜ํ–‰๋  ๋•Œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„
    • Line2 : O(1)
    • Line3 : U์˜ ์›์†Œ๋“ค์„ ๊ฐ€์žฅ ๋งŽ์ด ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์ง‘ํ•ฉ S๋ฅผ ์ฐพ์œผ๋ ค๋ฉด, ํ˜„์žฌ ๋‚จ์•„์žˆ๋Š” Si๋“ค ๊ฐ๊ฐ์„ U์™€ ๋น„๊ตํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Si์˜ ์ˆ˜๋Š” ์ตœ๋Œ€ n์ด๊ณ , ๊ฐ Si์™€ U์˜ ๋น„๊ต๋Š” O(n)์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ, line3์€ O(n^2)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
    • Line4 : ์ง‘ํ•ฉ U์—์„œ ์ง‘ํ•ฉ Si์˜ ์›์†Œ๋“ค์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ O(n)์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
    • Line5 : Si๋ฅผ F์—์„œ ์ œ๊ฑฐํ•˜๊ณ , Si๋ฅผ C์— ์ถ”๊ฐ€ : O(1)์˜ ์‹œ๊ฐ„
    • ๋ฃจํ”„ 1ํšŒ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1) + O(n^2) + O(n) + O(1) = O(n^2)
  • ์ด ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n) x O(n^2) = O(n^3)

 

๐Ÿ’ก๊ทผ์‚ฌ๋น„์œจ

  • ๊ทผ์‚ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทผ์‚ฌํ•ด๊ฐ€ ์ตœ์ ํ•ด์— ์–ผ๋งˆ๋‚˜ ๊ทผ์‚ฌํ•œ์ง€๋ฅผ ๋‚˜ํƒ€๋„ค๋Š” ๊ทผ์‚ฌ๋น„์œจ์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ•จ๊ป˜ ์ œ์‹œํ•ด์•ผํ•œ๋‹ค.
  • ์ง‘ํ•ฉ ์ปค๋ฒ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ทผ์‚ฌ๋น„์œจ์€ Klogn : ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ตœ์•… ๊ฒฝ์šฐ์˜ ํ•ด์ผ์ง€๋ผ๋„ ๊ทธ ์ง‘ํ•ฉ ์ˆ˜๊ฐ€ Klogn๊ฐœ๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋œป. 
    • K = ์ตœ์ ํ•ด์˜ ์ง‘ํ•ฉ์˜ ์ˆ˜
  • ์ง‘ํ•ฉ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ์ฐพ๋Š”๋ฐ๋Š” ์ง€์ˆ˜์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋‚˜, SetCover ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ O(n^3)์‹œ๊ฐ„์— ๊ทผ์‚ฌํ•ด๋ฅผ ์ฐพ์œผ๋ฉฐ ๊ทธ ํ•ด๋„ ์‹ค์งˆ์ ์œผ๋กœ ์ตœ์ ํ•ด์™€ ๋น„์Šท

โžฐ์‘์šฉ

  • ๋„์‹œ๊ณ„ํš์—์„œ ๊ณต๊ณต๊ธฐ๊ด€ ๋ฐฐ์น˜
  • ๊ฒฝ๋น„ ์‹œ์Šคํ…œ
  • ์ปดํ“จํ„ฐ๋ฐ”์ด๋Ÿฌ์Šค ์ฐพ๊ธฐ
  • ๋Œ€๊ธฐ์—…์˜ ๊ตฌ๋งค ์—…์ฒด ์„ ์ •
  • ๊ธฐ์—…์˜ ๊ฒฝ๋ ฅ ์ง์› ๊ณ ์šฉ
  • ๋น„ํ–‰๊ธฐ ์กฐ์ข…์‚ฌ ์Šค์ผ€์ฅด๋ง, ์กฐ๋ฆฝ ๋ผ์ธ ๊ท ํ˜•ํ™”, ์ •๋ณด๊ฒ€์ƒ‰ ๋“ฑ

 


Reference

์„œ์šธ๊ณผํ•™๊ธฐ์ˆ ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—