Algorithm

[Algorithm] ๋ถ€๋ถ„ ๋ฐฐ๋‚ญ ๋ฌธ์ œ

yevdev 2021. 10. 13. 09:46

๐Ÿ’ก๋ฐฐ๋‚ญ ๋ฌธ์ œ 

  • n๊ฐœ์˜ ๋ฌผ๊ฑด์ด ์žˆ๊ณ , ๊ฐ ๋ฌผ๊ฑด์€ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฐฐ๋‚ญ์ด ํ•œ์ •๋œ ๋ฌด๊ฒŒ์˜ ๋ฌผ๊ฑด๋“ค์„ ๋‹ด์„ ์ˆ˜ ์žˆ์„ ๋•Œ, ์ตœ๋Œ€์˜ ๊ฐ€์น˜๋ฅผ ๊ฐ–๋„๋ก ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ๋ฌผ๊ฑด๋“ค์„ ์ •ํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ’ก๋ถ€๋ถ„ ๋ฐฐ๋‚ญ ๋ฌธ์ œ

  • ๋ฌผ๊ฑด์„ ๋ถ€๋ถ„์ ์œผ๋กœ (์ชผ๊ฐœ์„œ) ๋‹ด๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ
  • ์ตœ์ ํ•ด๋ฅผ ์œ„ํ•ด์„œ '์š•์‹ฌ๋‚ด์–ด' ๋‹จ์œ„ ๋ฌด๊ฒŒ ๋‹น ๊ฐ€์žฅ ๊ฐ’๋‚˜๊ฐ€๋Š” ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ๊ณ , ๊ณ„์†ํ•ด์„œ ๊ทธ ๋‹ค์Œ์œผ๋กœ ๊ฐ’๋‚˜๊ฐ€๋Š” ๋ฌผ๊ฑด์„ ๋„ฃ๋Š”๋‹ค.
  • ๋งŒ์•ฝ, ๊ทธ ๋‹ค์Œ์œผ๋กœ ๊ฐ’๋‚˜๊ฐ€๋Š” ๋ฌผ๊ฑด์„ 'ํ†ต์งธ๋กœ' ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์—†๊ฒŒ๋˜๋ฉด, ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์„ ๋งŒํผ๋งŒ ๋ฌผ๊ฑด์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฐฐ๋‚ญ์— ๋‹ด๋Š”๋‹ค.

 

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

  • ์ž…๋ ฅ : n๊ฐœ์˜ ๋ฌผ๊ฑด ๋ฐ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ, ๊ฐ€์น˜, ๋ฐฐ๋‚ญ์˜ ์šฉ๋Ÿ‰ C
  • ์ถœ๋ ฅ : ๋ฐฐ๋‚ญ์— ๋‹ด์€ ๋ฌผ๊ฑด ๋ฆฌ์ŠคํŠธ L, ๋ฐฐ๋‚ญ์— ๋‹ด์€ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ ํ•ฉ v
  • 1. ๊ฐ ๋ฌผ๊ฑด์— ๋Œ€ํ•ด ๋‹จ์œ„ ๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜๋ฅผ ๊ณ„์‚ฐ
    2. ๋ฌผ๊ฑด๋“ค์„ ๋‹จ์œ„ ๋ฌด๊ฒŒ ๋‹น ๊ฐ€์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ , ์ •๋ ฌ๋œ ๋ฌผ๊ฑด ๋ฆฌ์ŠคํŠธ๋ฅผ S
    3. L = ∅, w = 0, v = 0 ( w = ๋ฐฐ๋‚ญ์— ๋‹ด๊ธด ๋ฌผ๊ฑด๋“ค์˜ ๋ฌด๊ฒŒ์˜ ํ•ฉ )
    4. S์—์„œ ๋‹จ์œ„๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜๊ฐ€ ๊ฐ€์žฅ ํฐ ๋ฌผ๊ฑด x๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    // ๋ฐฐ๋‚ญ์— ๋ฌผ๊ฑด์„ ํ†ต์งธ๋กœ ๋‹ด๊ธฐ (๋ฌผ๊ฑด์„ ํ†ต์งธ๋กœ ๋‹ด์„ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒ)
    5. whild(w+x<=C) {
    6.	x๋ฅผ L์— ์ถ”๊ฐ€์‹œํ‚จ๋‹ค.
    7.  w = w+x์˜ ๋ฌด๊ฒŒ
    8.  v = v+x์˜ ๊ฐ€์น˜
    9.  x๋ฅผ S์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
    10. S์—์„œ ๋‹จ์œ„ ๋ฌด๊ฒŒ ๋‹น ๊ฐ€์น˜๊ฐ€ ๊ฐ€์žฅ ํฐ ๋ฌผ๊ฑด x๋ฅผ ๊ฐ€์ ธ์˜ด.
    }
    // ๋ฐฐ๋‚ญ์— ๋ฌผ๊ฑด์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ด๊ธฐ
    11. if((C-w)>0){ //๋ฐฐ๋‚ญ์— ๋ฌผ๊ฑด์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ด์„ ์—ฌ์œ ๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธ ( ํ˜„์žฌ๊นŒ์ง€ ๋ฐฐ๋‚ญ์— ๋‹ด์€ ๋ฌผ๊ฑด๋“ค์˜ ๋ฌด๊ฒŒ w๊ฐ€ ๋ฐฐ๋‚ญ์˜ ์šฉ๋Ÿ‰ C๋ณด๋‹ค ์ž‘์œผ๋ฉด, )
    12. 	๋ฌผ๊ฑด x๋ฅผ (C-w)๋งŒํผ๋งŒ ๋ฌผ๊ฑด ๋ฆฌ์ŠคํŠธ L์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    13. 	v = v + (C-w)๋งŒํผ์˜ x์˜ ๊ฐ€์น˜
    }
    14. return L,v

โžฐ์˜ˆ์ œ ๋ฌธ์ œ

 

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

  • Line 1 : n๊ฐœ์˜ ๋ฌผ๊ฑด ๊ฐ๊ฐ์˜ ๋‹จ์œ„ ๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜๋ฅผ ๊ณ„์‚ฐ : O(n)
  • Line 2 : ๋ฌผ๊ฑด์˜ ๋‹จ์œ„ ๋ฌด๊ฒŒ ๋‹น ๊ฐ€์น˜์— ๋Œ€ํ•ด์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ์œ„ํ•œ O(nlogn)
  • Line 5~10 : while ๋ฃจํ”„๋Š” n๋ฒˆ์„ ๋„˜์ง€ ์•Š์Œ  - ๋ฃจํ”„๋‚ด๋ถ€์˜ ์ˆ˜ํ–‰์€ O(1)์‹œ๊ฐ„
  • line 11~14 : ๊ฐ๊ฐ O(1) ์‹œ๊ฐ„
  • O(n) + O(nlogn) + n x O(1) + O(1) = O(nlogn) (Sorting์ด ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ)

 

โžฐ์‘์šฉ

  • 0-1 ๋ฐฐ๋‚ญ ๋ฌธ์ œ๋Š” ์ตœ์†Œ์˜ ๋น„์šฉ์œผ๋กœ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ๋ฌธ์ œ๋กœ, ์กฐํ•ฉ๋ก , ๊ณ„์‚ฐ์ด๋ก , ์•”ํ˜ธํ•™, ์‘์šฉ์ˆ˜ํ•™ ๋ถ„์•ผ์˜ ๊ธฐ๋ณธ๋ฌธ์ œ
  • ์‘์šฉ์‚ฌ๋ก€ : '๋ฒ„๋ฆฌ๋Š” ๋ถ€๋ถ„ ์ตœ์†Œํ™”์‹œํ‚ค๋Š”' ์›์ž์žฌ ์ž๋ฅด๊ธฐ
  • ์ž์‚ฐ ํˆฌ์ž ๋ฐ ๊ธˆ์œต ํฌํŠธํด๋ฆฌ์˜ค์—์„œ์˜ ์ตœ์„ ์˜ ์„ ํƒ
  • Merdle - Hellman ๋ฐฐ๋‚ญ ์•”ํ˜ธ ์‹œ์Šคํ…œ์˜ ํ‚ค ์ƒ์„ฑ

 


Reference 

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