Merge Sort(ํ•ฉ๋ณ‘ ์ •๋ ฌ)

Merge Sort(ํ•ฉ๋ณ‘ ์ •๋ ฌ)๋ž€?

๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜๋กœ,

  1. ์ž…๋ ฅ๊ฐ’๋“ค์„ ๋ถ„ํ• ํ•ด์„œ ์ž‘์€ ๋ฌธ์ œ๋“ค๋กœ ๋งŒ๋“ค๊ณ  (Divide)
  2. ๊ฐ๊ฐ์˜ ๋ฌธ์ œ๋“ค์˜ ํ•ด๋ฅผ ์–ป๊ณ  (Conquer)
  3. ๊ฐ๊ฐ์˜ ํ•ด๋“ค์„ ํ•ฉ์ณ์„œ ์ตœ์ข… ํ•ด๋ฅผ ์–ป๋Š”๋‹ค.(Combine)

Merge Sort(ํ•ฉ๋ณ‘ ์ •๋ ฌ) ๊ณผ์ •

mergeSort

  1. ํ•ฉ๋ณ‘์ •๋ ฌ์€ ์ˆœํ™˜ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์ž…๋ ฅ๊ฐ’๋“ค์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋ถ„ํ• ํ•œ๋‹ค.
  2. ์ˆœํ™˜ํ•จ์ˆ˜๋Š” ๊ณ„์† ์ž๊ธฐ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ตญ ๊ฐ๊ฐ์€ 1์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ๋•Œ๊นŒ์ง€ ๋ถ„ํ• ๋œ๋‹ค.
  3. ๋” ์ด์ƒ ๋ถ„ํ•  ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐ๊ฐ ์ˆœํ™˜ํ•จ์ˆ˜๋“ค์—์„œ ํ•ฉ๋ณ‘ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ •๋ ฌ๊ณผ์ •(๊ฐ๊ฐ์˜ ํ•ด๋“ค์„ ์–ป๋Š”๋‹ค)์ด ์‹œ์ž‘๋œ๋‹ค.
  4. ๊ฒฐ๊ตญ์—” ๋ชจ๋“  ํ•ด๋“ค์ด ํ•ฉ์ณ์ ธ์„œ ์ •๋ ฌ๊ณผ์ •์ด ์™„๋ฃŒ๋œ๋‹ค.

Merge Sort(ํ•ฉ๋ณ‘ ์ •๋ ฌ) ์•Œ๊ณ ๋ฆฌ์ฆ˜

MergeSort(int l, int h){
    int m;
    if(l >= h) return 0; // ์ˆœํ™˜ํ•จ์ˆ˜์˜ ๋
    m = (l + h) / 2; 
    MergeSort(l, m); // 
    MergeSort(m+1, h); // ์ˆœํ™˜ํ•จ์ˆ˜๋กœ ๊ฐ๊ฐ 1/2๋กœ ๋ถ„ํ• 
    Merge(l, m, h); // ์ •๋ ฌ ๋ฐ ๊ฐ ํ•ด๋“ค์˜ ํ•ฉ๋ณ‘ ๊ณผ์ •
}

Merge Sort(ํ•ฉ๋ณ‘ ์ •๋ ฌ) ์‹œ๊ฐ„ ๋ณต์žก๋„(Big O)


ํ•ฉ๋ณ‘์ •๋ ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœํ™˜ํ•จ์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

MS(n)
= 0 (if n <= 1)
= 2MS(n/2) + n (if n >= 2)

์™œ ์ €๋ ‡๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ?

์œ„ ์ฝ”๋“œ์—์„œ ๋ณด๋ฉด MergeSort(l, m)๊ณผ MergeSort(m+1, h)์ด MS(n/2)์™€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด n์€ ์–ด๋””์„œ ๋‚˜ํƒ€๋‚œ ๊ฒƒ์ผ๊นŒ?

ํ•ฉ๋ณ‘์ •๋ ฌ ๊ณผ์ • ๊ทธ๋ฆผ์— ์žˆ๋Š” Conquer ๋ถ€๋ถ„์„ ์ž˜ ์‚ดํŽด๋ณด์ž.

Conquer ๊ณผ์ • ์ฆ‰, Merge(l, m, h)์˜ ์ •๋ ฌ๊ณผ์ •์—์„œ n๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๊ฒฐ๊ตญโ€ฆ!

MS(n)
= 2MS(n/2)+n/2 + n
= 2(2MS(n/4) + n/4) + n
= 2^2(MS(n/4)) + n/2 + n
= โ€ฆ
= 2^k * MS(n/2^k) + k
n (n/2^k = 1)
= n * log n (k = log n)

์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n*log(n))์ด ๋œ๋‹ค.

mergeSort

์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•ด๋ณด์ž๋ฉด ๋ถ„ํ• ๊ณผ์ •์—์„œ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

์ฆ‰, ์‹ค์ œ๋กœ๋Š” ํ•ฉ๋ณ‘ ๊ณผ์ •์—์„œ ์—ฐ์‚ฐ์˜ ๋Œ€๋ถ€๋ถ„์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋Œ€์‹  ๋ถ„ํ•  ๊ณผ์ •์—์„œ ์ž…๋ ฅ๊ฐ’๋“ค์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๋ฉด์„œ ํ•ฉ๋ณ‘ ๊ณผ์ •์˜ ๋†’์ด๊ฐ€ log(n)์ด ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ์˜ ํ•ฉ๋ณ‘ ๊ณผ์ •์—์„œ๋Š” n๋งŒํผ์˜ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๊ฒฐ๊ตญ n(๊ฐ€๋กœ) * log n(๋†’์ด)์ด ๋œ๋‹ค.