๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š ์ „๊ณต ๊ณต๋ถ€/์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•ด์„ ๋ฐ ์„ค๊ณ„

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š” ๋ฐ ์ •์˜

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ •์˜ : ์–ด๋–ค ์ž…๋ ฅ์—๋„ ์ •ํ™•ํ•œ ์ถœ๋ ฅ์„ ์œ ํ•œํ•œ ์‹œ๊ฐ„ ์•ˆ์— ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ

  • ์–ด๋–ค ์ž…๋ ฅ : ๋ฌธ์ œ์˜ ๋‚œ์ด๋„๋‚˜, ์ž…๋ ฅ์˜ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  • ์ •ํ™•ํ•œ ์ถœ๋ ฅ : ๋ฌธ์ œ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.
  • ์ •๋‹ต์ด ์š”๊ตฌํ•˜๋Š” ์กฐ๊ฑด์ด ๋ฌด์—‡์ธ์ง€ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ํ•œํ•œ ์‹œ๊ฐ„ : ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€์ง€ ์•Š๊ณ  ๋‚ฉ๋“ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์— ์ข…๋ฃŒํ•œ๋‹ค.

 

ex) 100๋ช…์˜ ํ•™์ƒ๋“ค์˜ ์‹œํ—˜ ์ ์ˆ˜ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜์‹œ์˜ค.

  1. ์ˆ˜ํ•™์  ๊ท€๋‚ฉ๋ฒ•→ ์ •ํ™•์„ฑ : ์ž๋ช…ํ•˜๋‹ค.
  2. → ์‹œ๊ฐ„ : n๋ช…์˜ ์ ์ˆ˜๋ฅผ ์ฝ์œผ๋ฉด, n-1๋ฒˆ ๋น„๊ต.
  3. → max(์ง€๊ธˆ๊นŒ์ง€์˜ ์ตœ๋Œ“๊ฐ’, i+1๋ฒˆ์งธ ํ•™์ƒ์˜ ์ ์ˆ˜)

ex) 100๋ช…์˜ ํ•™์ƒ๋“ค์˜ ์‹œํ—˜ ์ ์ˆ˜ ์ค‘ ์ตœ๋นˆ๊ฐ’์„ ๊ตฌํ•˜์‹œ์˜ค.

ex) ์ž…๋ ฅ : U={1,2, … , n} ์ค‘์—์„œ ํŠน์ •ํ•œ ์ˆ˜ ํ•˜๋‚˜๋งŒ ๋นผ๊ณ  ๋ฌด์ž‘์œ„์˜ ์ˆœ์„œ๋กœ n-1๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ž…๋ ฅ๋จ.

์ถœ๋ ฅ : U์—์„œ ๋น ์ง„ ํ•˜๋‚˜์˜ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.

  1. ํฌ๊ธฐ n์ธ ๋ฐฐ์—ด A๋ฅผ ๋งŒ๋“ค๊ณ  0์œผ๋กœ ์ดˆ๊ธฐํ™”
    • ํ•„์š”ํ•œ ๊ณต๊ฐ„ : ๋ฐฐ์—ด A[n]
    • ํ•„์š”ํ•œ ์‹œ๊ฐ„(๋น„๊ต ํšŸ์ˆ˜) : Best = 1, Worst = n (๋น ์ง„ ์ˆ˜๊ฐ€ n์ผ ๋•Œ), ํ‰๊ท  n/2
  2. ์ˆซ์ž k๊ฐ€ ๋“ค์–ด์˜ค๋ฉด A[k] = 1, n-1๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋“ค์–ด์˜จ ๋’ค A๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋’ค์ ธ์„œ A[j]=0์ธ j์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. ๋ณ€์ˆ˜ x๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”n-1๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด, { n(n-1)/2 } - x๋กœ ๋น ์ง„ ์ˆซ์ž๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. (1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ดํ•ฉ์—์„œ x๋ฅผ ๋นผ๊ธฐ)
    • ํ•„์š”ํ•œ ๊ณต๊ฐ„ : ๋ณ€์ˆ˜ x (n(n-1)/2๊นŒ์ง€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ)
    • ํ•„์š”ํ•œ ์‹œ๊ฐ„ : ๋ณ„๋„์˜ ์ถ”๊ฐ€ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„์ด ํ•„์š”์—†์Œ, ์ €์žฅ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ž‘์—…ํ•˜๋ ค๋ฉด ๋จผ์ € ์ด ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•ด์•ผํ•จ
  4. ์ˆซ์ž k๋ฅผ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค x = x+k

→ ๋ฌธ์ œ์˜ ๋ณ€ํ˜•๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์ •

ex) ์ž…๋ ฅ : U={1,2, … , n} ์ค‘์—์„œ ํŠน์ •ํ•œ ์ˆ˜ 2๊ฐœ๋งŒ ๋นผ๊ณ  ๋ฌด์ž‘์œ„์˜ ์ˆœ์„œ๋กœ n-2๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ž…๋ ฅ๋จ.

์ถœ๋ ฅ : U์—์„œ ๋น ์ง„ ๋‘ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค.

  1. ํฌ๊ธฐ n์ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋นˆ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๊ธฐ
  2. ๋ณ€๊ฒฝ์‚ฌํ•ญ → ๊ฐ ์ˆ˜์˜ ํ•ฉ x์™€ ๊ฐ ์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ•ฉ y๋„ ๊ตฌํ•œ๋‹ค.
    • u + v = n(n+1)/2 - x
    • (u^2 + v^2) = n(n+1)(2n+1)/6 - y
    • t^2 - (u+v)t + uv = 0์˜ ๋‘ ๊ทผ์ด ์ •๋‹ต์ด๋‹ค.
  3. ๋ฏธ์ง€์˜ ์ˆ˜๊ฐ€ u์™€ v๋ผ๊ณ  ํ•  ๋•Œ,

ex) ํ•˜๋…ธ์ด ํƒ‘. ๊ธฐ๋‘ฅ 1์˜ ์›๋ฐ˜ n๊ฐœ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ทœ์น™์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๊ธฐ๋‘ฅ 3์œผ๋กœ ๋ชจ๋‘ ์˜ฎ๊ธธ ๊ฒƒ์ธ๊ฐ€?

→ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ๊ธฐ๋ฒ• ์ค‘ ๋˜๋ถ€๋ฆ„(recursion) ์ด์šฉํ•˜๊ธฐ.

  1. n = 1 ์ผ ๋•Œ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
  2. n = k ์ผ ๋•Œ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
  3. n = k+1 ์ผ ๋•Œ ์œ„ ๊ฐ€์ •์„ ์ด์šฉํ•˜์—ฌ k๊ฐœ์˜ ์›๋ฐ˜์„ ๊ธฐ๋‘ฅ2๋กœ ์˜ฎ๊ธด๋‹ค.
  4. k+1๋ฒˆ์งธ ์›๋ฐ˜์„ ๊ธฐ๋‘ฅ 3์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
  5. ๊ทธ๋Ÿผ k๊ฐœ์˜ ์›๋ฐ˜์„ ๊ธฐ๋‘ฅ 3์œผ๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

→ k๊ฐœ์˜ ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๋Š” ๋ฌธ์ œ = k-1๊ฐœ์˜ ์›๋ฐ˜์„ ์˜ฎ๊ธฐ๋Š” ๋ฌธ์ œ

๊ฐ™์€ ๋ฌธ์ œ์ด์ง€๋งŒ ์ž…๋ ฅ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฌธ์ œ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ฉด ๋œ๋‹ค.

→ ์›๋ฐ˜์˜ ์ด๋™ ํšŸ์ˆ˜

  • n๊ฐœ์˜ ์›๋ฐ˜์ด ์žˆ์„ ๋•Œ ์›๋ฐ˜์˜ ์ด๋™ ํšŸ์ˆ˜ T(n) : T(n-1) + 1 + T(n-1) = 2T(n-1) + 1
  • T(n) = 2^n - 1

 

ex) Stable Marriage

→ n๋ช…์˜ ๋‚จ์ž์™€ n๋ช…์˜ ์—ฌ์ž๊ฐ€ ์žˆ์„ ๋•Œ, ๋‹ค์Œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋„๋ก ๋ชจ๋“  ๋‚จ๋…€๋ฅผ 1:1๋กœ ์ง์ง€์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  1. ๋ชจ๋“  ๋‚จ๋…€๋Š” ์ด์„ฑ์— ๋Œ€ํ•œ 1~n๋“ฑ์˜ ์„ ํ˜ธ๋„๊ฐ€ ์žˆ๋‹ค.
  2. (๋‚จ,๋…€)์˜ ์Œ์ด (a,b)(c,d)๊ฐ€ ์žˆ๋Š”๋ฐ, b๊ฐ€ a๋ณด๋‹ค c๋ฅผ ์„ ํ˜ธํ•˜๊ณ  c๊ฐ€ d๋ณด๋‹ค b๋ฅผ ์„ ํ˜ธํ•˜๋ฉด ์ด๋“ค์€ ์Œ์„ ๊นจ๊ณ  ์ƒˆ๋กœ์šด ์Œ์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค.

  • ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ •ํ™•ํ•˜๋‹ค.
    • ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ๋ชจ๋“  ์—ฌ์„ฑ์€ ๋ฐ˜๋“œ์‹œ ์ง์„ ๊ฐ–๊ฒŒ ๋˜๊ณ , ์กฐ๊ฑด 2์— ์–ด๊ธ‹๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.
  • ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒํ•œ๋‹ค.
    • ๋‚จ์„ฑ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜ํ–‰ ๊ณผ์ •์—์„œ ํŒŒํŠธ๋„ˆ ๋ณ€๊ฒฝ๋•Œ๋งˆ๋‹ค ํŒŒํŠธ๋„ˆ ์„ ํ˜ธ๋„ ๊ฐ์†Œ. (์—ฌ์„ฑ ํŒŒํŠธ๋„ˆ์˜ ์„ ํ˜ธ๋„๋Š” ์ฆ๊ฐ€)
    • ๋”ฐ๋ผ์„œ, ํ•œ ๋‚จ์„ฑ์ด n๋ฒˆ ์ด์ƒ ํŒŒํŠธ๋„ˆ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์—†๋‹ค.
    • ์ด n^2๋ฒˆ ์ด์ƒ ํŒŒํŠธ๋„ˆ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2).

 

์ตœ์ ์„ฑ์˜ ์ฆ๋ช…

  • ๋ชจ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ์ด๋ณด๋‹ค ๋” ์ข‹์€ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Œ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฒƒ.
  • ์ตœ์†Œํ•œ ๋ฐ˜๋“œ์‹œ ์ด๋งŒํผ์˜ ์ผ์„ ํ•ด์•ผํ•˜๋ฏ€๋กœ ๋” ์ž˜ ํ•  ์ˆ˜๋Š” ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์ธ๋‹ค.

ex1) ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด E[1 … n] ์—์„œ ์–ด๋–ค ๊ฐ’ k๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๊ณ , ์žˆ๋‹ค๋ฉด ๊ทธ ์ธ๋ฑ์Šค๋ฅผ, ์—†๋‹ค๋ฉด -1๋ฅผ ๋ฐ˜ํ™˜ํ•˜์‹œ์˜ค

int index, ans = -1;
for(index = 0; index < n; index++){
	if(k == E[index]){
		ans = index;
		break;
	}
}
return ans;
  • ex1์˜ ์ตœ์ ์„ฑ ์ฆ๋ช…
    • ๋น„๊ต๋ฅผ ํ•œ๋ฒˆ ํ•  ๋•Œ๋งˆ๋‹ค, ์›์†Œ ํ•˜๋‚˜์˜ ๋‹ต ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์ด n๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    • n๋ฒˆ ๋น„๊ต๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด, ์ •๋ ฌ์„ ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผํ•จ.

ex2) ์ •๋ ฌ๋œ ๋ฐฐ์—ด E[1 … n] ์—์„œ ์–ด๋–ค ๊ฐ’ k๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๊ณ , ์žˆ๋‹ค๋ฉด ๊ทธ ์ธ๋ฑ์Šค๋ฅผ, ์—†๋‹ค๋ฉด -1๋ฅผ ๋ฐ˜ํ™˜ํ•˜์‹œ์˜ค

  1. E[1], E[b+1], E[2b+1], … ์™€ k๋ฅผ ๋น„๊ตํ•œ๋‹ค.E[ ib + 1 ] , E[ ib + 2 ], … E[ (i+1)b ]์—์„œ k๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
    • ์‹œ๊ฐ„๋ณต์žก๋„ : Worst = n/b + b ๋ฒˆ ๋น„๊ต (์ด๋ถ„ํƒ์ƒ‰๋ณด๋‹ค๋Š” ๋Š๋ฆฌ์ง€๋งŒ ๊ตฌํ˜„์€ ๋” ์‰ฝ๋‹ค)
    • b = $root(n)$์ผ ๋•Œ, ์ตœ์†Ÿ๊ฐ’ = 2 $root(n)$ = $O(root(n))$
  2. ex : b=3, ์ธ๋ฑ์Šค 1๊ณผ 4์™€ 7 ๋น„๊ต, … ๋งŒ์•ฝ k๊ฐ€ 5๋ผ๋ฉด 4≤5<7 ์ด๋ฏ€๋กœ i=2
  3. E[ ib + 1 ] ≤ k < E[ (i+1)b + 1 ]์ธ i๋ฅผ ์ฐพ๋Š”๋‹ค.
  4. ์ด์ง„ ํƒ์ƒ‰T(n) = 1 + T(n/2) = 1 + (1 + T(n/4)) = … = 1+1+…+1+ T(n/2^k) = k + 1 = O(log n) ๋ฒˆ ๋น„๊ต
  5. ์ฆ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1์€ ์ตœ์ ์ด ์•„๋‹ˆ๋‹ค. ์ด์ง„ํƒ์ƒ‰์ด ์ตœ์ ์ผ๊นŒ?
  6. n = 2^k ๋กœ ๊ฐ€์ •ํ•˜๋ฉด,

 

ํ•จ์ˆ˜์˜ ์ฆ๊ฐ€, ์‹œ๊ฐ„๋ณต์žก๋„

  • ์šฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž…๋ ฅ์ด n๊ฐœ ์ฃผ์–ด์งˆ ๋•Œ ์—ฐ์‚ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ํ•จ์ˆ˜ f(n)์ด๋ผ ํ•˜์ž.
  • ์ •์˜์ƒ f(n)์€ ์ž์—ฐ์ˆ˜์— ๋Œ€ํ•ด ์ •์˜๋œ ํ•จ์ˆ˜์ด๋‹ค.
  • ์ฆ๊ฐ€ํ•จ์ˆ˜์ผ ๊ฒƒ์ด๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด f(n)์ด n์˜ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์ปค์ง€๋Š”์ง€๋ฅผ ์•„๋Š” ๊ฒƒ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ํ‰๊ฐ€์— ์ค‘์š”ํ•˜๋‹ค.

g(n) = O(f(n)) → g๋Š” f๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฆ๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. (g ≤ f)