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

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ๋ฌธ์ œ

์ •๋ ฌ ๋ฌธ์ œ→ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋ฉฐ, ๋ฐฉ๋ฒ•๋งˆ๋‹ค ํŠน์ง•์ด ๋‹ค๋ฆ„

  • → ์‹œ๊ฐ„๋ณต์žก๋„, ์ตœ์ ์„ฑ์— ๋Œ€ํ•ด ์ฆ๋ช…์ด ์‰ฌ์›€
  • → n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜๊ฐ€ ์ฃผ์–ด์งˆ ๋–„, ์ด๋“ค์„ ์ด๋™ํ•˜์—ฌ ์ ์  ์ปค์ง€๊ฒŒ(์˜ค๋ฆ„์ฐจ์ˆœ) ๋˜๋Š” ์ ์  ์ž‘์•„์ง€๊ฒŒ(๋‚ด๋ฆผ์ฐจ์ˆœ)์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ

๊ฐ€์ • : ์ •๋ ฌํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋ฅผ O(1)์‹œ๊ฐ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. (= ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.)

๋ฒ„๋ธ” ์ •๋ ฌ

๋งจ ์™ผ์ชฝ ์›์†Œ๋ถ€ํ„ฐ ๋ฐ”๋กœ ์ด์›ƒํ•œ ์›์†Œ์™€ ๋น„๊ตํ•ด๊ฐ€๋ฉด์„œ, ํฐ ์ˆ˜๊ฐ€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๋„๋ก ๊ตํ™˜ํ•จ.

๋งจ ๋๊นŒ์ง€ ๊ฐ€๋ฉด ๊ฐ€์žฅ ํฐ ์›์†Œ๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ, ์ด ๊ณผ์ •์„ ๋‹ค์‹œ ๋‚˜๋จธ์ง€ n-1๊ฐœ ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋ณต

  • ์ •ํ™•์„ฑ : ์ž๋ช…ํ•จ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ์ฒ˜์Œ ๊ฐ€์žฅ ํฐ ์›์†Œ๋ฅผ ๊ตฌํ•  ๋•Œ n-1๋ฒˆ ๋น„๊ต, ๋‘ ๋ฒˆ์งธ ํฐ ์›์†Œ๋ฅผ ๊ตฌํ•  ๋•Œ n-2๋ฒˆ ๋น„๊ต
    • (n-1) + (n-2) + … + 1 = n(n-1)/2 = Θ(n^2)
    • ์ž…๋ ฅ ์ˆœ์„œ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ n๊ฐœ์˜ ๊ฐ’์„ ์ •๋ ฌํ•  ๋•Œ ํ•ญ์ƒ ๋˜‘๊ฐ™์€ ํšŸ์ˆ˜์˜ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•จ

์‚ฝ์ž… ์ •๋ ฌ

์ •๋ ฌ ๋Œ€์ƒ์ด ๋  ์›์†Œ๋ฅผ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ”

  • ์•ž์€ “์ด๋ฏธ ์ •๋ ฌ๋œ ๋ถ€๋ถ„” (์˜ค๋ฆ„์ฐจ์ˆœ ๋งŒ์กฑ)
  • ๋’ค๋Š” “์ •๋ ฌํ•  ๋ถ€๋ถ„”
  • ๋งค๋ฒˆ ์ •๋ ฌํ•  ๋ถ€๋ถ„์˜ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์จฐ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์‚ฝ์ž…(insertion)
  • ์‚ฝ์ž…์€ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์˜ ๊ฐ€์žฅ ํฐ ์›์†Œ(๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์›์†Œ)๋ถ€ํ„ฐ ์™ผ์ชฝ์œผ๋กœ ๋น„๊ตํ•ด๋‚˜๊ฐ€๋ฉด์„œ ์ง„ํ–‰.
  • ์ •ํ™•์„ฑ :
    • ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์€ ํ•ญ์ƒ ์ •๋ ฌ๋˜์–ด์žˆ์Œ.
    • ๋งค๋ฒˆ ์ •๋ ฌํ•  ๋ถ€๋ถ„์˜ ์›์†Œ 1๊ฐœ๋ฅผ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
    • ์ •๋ ฌํ•  ๋ถ€๋ถ„์˜ ์›์†Œ๋Š” ์ฒ˜์Œ์— n-1๊ฐœ, ๋งค๋ฒˆ 1๊ฐœ์”ฉ ๊ฐ์†Œํ•˜๋ฏ€๋กœ ์ตœ์ข…์ ์œผ๋กœ๋Š” ์ •๋ ฌ๋œ ๋ถ€๋ถ„ n๊ฐœ, ์ •๋ ฌํ•  ๋ถ€๋ถ„์— 0๊ฐœ
    • ์ •๋ ฌ๋œ ๋ถ€๋ถ„์€ ์ •๋ ฌ์ด ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์ •ํ™•

ex)

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ :
    • Best = ์ด๋ฏธ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ, ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์›์†Œ๋ฅผ ๋„ฃ์„ ๋•Œ ๋งˆ๋‹ค ๋น„๊ต๋ฅผ ํ•œ๋ฒˆ์”ฉ๋งŒ ํ•˜๋ฉด ๋จ
      • ์ด n-1๋ฒˆ = Θ(n)
    • Worst = ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ˆ˜๋ฅผ ์ •๋ ฌํ•  ๋•Œ
      • i๋ฒˆ์งธ ์œ„์น˜์˜ ์›์†Œ๋ฅผ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์ถ”๊ฐ€ํ•  ๋•Œ, ์•ž๋ถ€๋ถ„์˜ i-1๊ฐœ ์›์†Œ๋“ค๊ณผ ๋ชจ๋‘ ๋น„๊ตํ•ด์•ผํ•จ
      • i = 2,3, … ,n ์ด๋ฏ€๋กœ, 1+2+ … + n-1 = n(n-1)/2 = Θ(n^2)
  • ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„ = i๊ฐœ์˜ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— i+1๋ฒˆ์งธ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ
    • ์‚ฝ์ž… ํ›„ : ์ •๋ ฌ๋œ ๋ถ€๋ถ„ i+1๊ฐœ, ์ƒˆ๋กœ ๋“ค์–ด์˜จ ์›์†Œ๋Š” 1๋“ฑ ~ i+1๋“ฑ ์ค‘ ํ•˜๋‚˜.
    • i+1๋“ฑํ•  ํ™•๋ฅ  = 1/(i+1), ๋น„๊ต 1๋ฒˆ
    • i๋“ฑํ•  ํ™•๋ฅ  = 1/(i+1), ๋น„๊ต 2๋ฒˆ
    • 3๋“ฑ ํ™•๋ฅ  = 1/(i+1), ๋น„๊ต i-1๋ฒˆ
    • 2๋“ฑ ํ™•๋ฅ  = 1/(i+1), ๋น„๊ต i๋ฒˆ
    • 1๋“ฑ ํ™•๋ฅ  = 1/(i+1), ๋น„๊ต i๋ฒˆ (๋งจ์•ž ์›์†Œ์™€ ๋น„๊ต ํ›„ 1๋“ฑvs2๋“ฑ ๊ฒฐ์ •ํ•˜๋ฏ€๋กœ)
    i+1๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ํ‰๊ท  ๋น„๊ตํšŸ์ˆ˜๋Š”, [ 1/(i+1) * {1+2+ … + i-1 + i} ] + 1/(i+1)*i

O(n^2)๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  • ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ O(n^2)๋ณด๋‹ค ๋นจ๋ฆฌ ์ •๋ ฌํ•  ์ˆ˜ ์—†๋‹ค. (O(n^2)๊ฐ€ ์ตœ์ ์ด๋‹ค!)
  • ์ฆ๋ช… : n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์›์†Œ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์€ n! ๊ฐ€์ง€์ด์ง€๋งŒ, ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋Š” ๋‹จ ํ•œ๊ฐ€์ง€์ด๋‹ค.
    • n๊ฐœ์˜ ์›์†Œ ์ค‘ 2๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๋ฐฉ๋ฒ•์€ (n,2)๊ฐ€์ง€
    • ์ •๋ ฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์ˆœ์„œ๊ฐ€ ํ‹€๋ฆฐ ์Œ์ด ์กด์žฌํ•œ๋‹ค. ์ •๋ ฌ๋˜์—ˆ๋‹ค๋ฉด, ์ˆœ์„œ๊ฐ€ ํ‹€๋ฆฐ ์Œ์ด ์—†๋‹ค.
    • ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๊ตํ™˜ํ•˜๋ฉด ํ‹€๋ฆฐ ์Œ ์ค‘ ์˜ค๋กœ์ง€ ํ•œ ์Œ์ด ์ œ๊ฑฐ๋œ๋‹ค.
    • ์ตœ์•…์˜ ๊ฒฝ์šฐ, ๋ชจ๋“  ์Œ์˜ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋˜์–ด ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ (n,2) = O(n^2)๋ฒˆ์˜ ๊ตํ™˜์ด ํ•„์š”ํ•˜๋‹ค.

 

 

๋ถ„ํ•  ์ •๋ณต ๊ธฐ๋ฒ• (Divide and Conquer)

์ฐฉ์•ˆ์  : ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋” ํ’€๊ธฐ ์–ด๋ ต๋‹ค.

  • Divide = ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆˆ๋‹ค.
  • Delegate = ๊ฐ๊ฐ์˜ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค.
  • Combine = ๊ฐ ๋ฌธ์ œ์˜ ๋‹ต์„ ์ด์šฉํ•˜์—ฌ ์›๋ž˜ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋งŒ๋“ ๋‹ค.

์ •๋ ฌ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ถ„ํ• ์ •๋ณต ๊ธฐ๋ฒ• : ๋ณ‘ํ•ฉ ์ •๋ ฌ (Merge sort) & ํ€ต ์ •๋ ฌ (Quick sort)

 

๋ณ‘ํ•ฉ ์ •๋ ฌ

  • Divide = ์ •๋ ฌํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ์•ž์ชฝ ๋ฐ˜/๋’ค์ชฝ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
  • Delegate = ์•ž์ชฝ ๋ฐ˜์„ ์ •๋ ฌ
  • Delegate(2) = ๋’ค์ชฝ ๋ฐ˜์„ ์ •๋ ฌ
  • Combine = ๋‘˜์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ์ •๋ ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

โžข ์•ž์ชฝ ๋ฐ˜, ๋’ค์ชฝ ๋ฐ˜์€ ๋ณ‘ํ•ฉ ์ •๋ ฌ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

โžข ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ 1์ด๋ฉด ๊ทธ ์ž์ฒด๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค. ๋˜๋Š”, ์–ด๋Š์ •๋„ ๊ธธ์ด ์ดํ•˜์ด๋ฉด ๋‹ค๋ฅธ๋ฐฉ๋ฒ•์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

โžข ๋‘˜์„ ํ•ฉ์ณ์„œ ํ•˜๋‚˜์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋Š”?

์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋‘ ๋ฆฌ์ŠคํŠธ A, B์˜ ๋ณ‘ํ•ฉ → ๋งจ ์ฒ˜์Œ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ž‘์€ ์ชฝ์„ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ์— ์‚ฝ์ž….

→ ์ด ์‚ฝ์ž…๋œ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์ง„ํ–‰.

  • ์ •ํ™•์„ฑ : A, B ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ → ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ์ด๋ฏธ ์ •๋ ฌ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ๋ณ‘ํ•ฉ ๊ฒฐ๊ณผ๋Š” ๊ทธ ์ž์‹ ์ด๋‹ค. ์ •๋ ฌ&์ •ํ™•
    • ๊ท€๋‚ฉ ๋‹จ๊ณ„ - A, B ๋‘˜๋‹ค ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด? → ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด๊ฐ€๋Š” ์›์†Œ๋Š” ๋ชจ๋“  ์›์†Œ ์ค‘ ์ตœ์†Œ๊ฐ’.
    • ์žฌ๊ท€์ ์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ณผ์ •์—์„œ, A, B ์ค‘ ํ•˜๋‚˜๋Š” ์›๋ž˜๋ณด๋‹ค ์›์†Œ๊ฐ€ ํ•˜๋‚˜ ์ ๋‹ค.
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ง„ํ–‰
    1. ์ „์ฒด ๋ฆฌ์ŠคํŠธ์˜ ์•ž์ชฝ ๋ฐ˜, ๋’ค์ชฝ ๋ฐ˜์„ ๋ณ‘ํ•ฉ์ •๋ ฌ๋กœ ์ •๋ ฌ
    2. ๋ณ‘ํ•ฉ ์ •๋ ฌ์— ์˜ํ•ด ์•ž์ชฝ ๋ฐ˜, ๋’ค์ชฝ ๋ฐ˜ ๋ชจ๋‘ ์ •๋ ฌ ์™„๋ฃŒ
    3. ๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณ‘ํ•ฉ

  • ๋‘ ๋ฆฌ์ŠคํŠธ ๋ณ‘ํ•ฉ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ : Best = ๊ต์ฐจ๋˜๋Š” ๋ถ€๋ถ„์ด ์—†์„ ๋•Œ n/2
    • ์‹ค์ œ ์ •๋ ฌ : ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์—ฐ์†์œผ๋กœ ๋ณ‘ํ•ฉ, ์ตœ์ข… ๋‹จ๊ณ„์—์„œ๋Š” ์ •๋ ฌ ์™„๋ฃŒ ์ƒํƒœ
    • ์ ํ™”์‹ : T(n) = 2T(n/2) + n, T(n) = Θ(n log n)
      • n/2๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ 2๊ฐœ๋ฅผ ์ •๋ ฌํ•˜๊ณ , ํ•ฉ์น  ๋•Œ n๋ฒˆ ๋น„๊ตํ•จ.
    • ์ž…๋ ฅ ํ˜•ํƒœ์— ์ƒ๊ด€์—†์ด ํ•ญ์ƒ ๊ฐ™์€ ์‹œ๊ฐ„๋ณต์žก๋„ ๋ณด์žฅ, ํ•ญ์ƒ ๋ฌธ์ œ์˜ ํฌ๊ธฐ๊ฐ€ 1/2๋กœ ์ค„์–ด๋“ฌ
    • ์‹ค์ œ๋กœ๋Š” ์›์†Œ๋“ค์ด ๋” ์ž์ฃผ ์›€์ง์—ฌ์„œ ์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ๊ฑธ๋ฆผ.
    • ํ€ต ์ •๋ ฌ์˜ ๊ฒฝ์šฐ, ์ผ๋‹จ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง„ ์›์†Œ๋Š” ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค!
  • Worst = ์„œ๋กœ ๋ชจ๋‘ ๊ต์ฐจํ•  ๋•Œ n
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : A, B๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ 2n
  • linked list๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ n (A, B์˜ ์›๋ž˜ ๋‚ด์šฉ์€ ํŒŒ๊ดด๋จ)

 

ํ€ต ์ •๋ ฌ

ํŠน์ • ์›์†Œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์€ ๊ฒƒ์€ ์™ผ์ชฝ, ํฐ ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ & ์žฌ๊ท€์  ์‹คํ–‰

์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์˜ ์ˆœ์„œ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ, ๊ธฐ์ค€ ์›์†Œ์˜ ์ˆœ์„œ๋Š” ๊ฒฐ์ •๋œ๋‹ค.

ex)

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ :
    • Best = ๊ธฐ์ค€์˜ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ์— ๊ฐ™์€ ์ˆ˜์˜ ์›์†Œ.
    • T(n) = 2T(n/2) + n T(n) = **O(n log n)**
    • Worst = ๊ธฐ์ค€์˜ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์ค‘ ํ•œ์ชฝ์œผ๋กœ๋งŒ ์›์†Œ๊ฐ€ ์ ๋ฆผ
    • T(n) = T(n-1) + n T(n) = **O(n^2)**
    • ํ‰๊ท  = ๋ณต์žก. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ์—๋„ T(n) = O(n log n)๊ธฐ์ค€์„ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋žœ๋ค์œผ๋กœ ๊ณ ๋ฆ„ ?? ← ๊ฐ•์˜ ๋ณด๊ธฐ
    • ex) T(n) = T(99n/100) + T(n/100) + n
๐Ÿ’ก < ๊ต์ˆ˜๋‹˜ comment >
์ˆ˜์—…์‹œ๊ฐ„์— Quicksort๋Š” stableํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
python์œผ๋กœ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ง  quicksort๋Š” stableํ•˜์ง€๋งŒ,
๊ทธ๋ฆผ์œผ๋กœ ๋ณด์—ฌ์ค€ ์˜ˆ๋Š” ์ด ์ž์ฒด๋งŒ์œผ๋กœ๋Š” stableํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ,
<ํ€ต ์ •๋ ฌ>
๋‘ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ stable
์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ณต์žกํ•จ

 

 

ํž™ ์ •๋ ฌ

  • ๋ฒ„๋ธ” ์ •๋ ฌ๊ณผ ๋น„์Šทํ•˜๋ฉฐ, 1๋“ฑ์„ ๋ฝ‘์•„๋‚ด๊ณ  ๋‚˜๋จธ์ง€ ์›์†Œ์—์„œ 1๋“ฑ์„ ๋˜ ๋ฝ‘์•„๋‚ด๋ฉด ์ •๋ ฌ๋จ
  • ๋ฒ„๋ธ” ์ •๋ ฌ์€ ๋‚จ์€ ์›์†Œ์—์„œ 1๋“ฑ์„ ๋‹ค์‹œ ๋น„๊ต๋กœ ์ฐพ๋Š”๋‹ค๋ฉด,
    • ํž™ ์ •๋ ฌ์€ 1๋“ฑ์„ ๋ฝ‘์•„๋‚ธ ํ›„ ๋‚˜๋จธ์ง€ ์›์†Œ์—์„œ 1๋“ฑ์„ ์ฐพ์„ ๋•Œ ๊ธฐ์กด์˜ 2๋“ฑ์ด ์ž๋™์œผ๋กœ 1๋“ฑ์ด๋œ๋‹ค.

ํž™ ์ƒ์„ฑ → ๋ฃจํŠธ ์›์†Œ ์ œ๊ฑฐ → ํž™์„ ์œ ์ง€

  • ํž™(Heap)์˜ ์„ฑ์งˆ
    • ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž์‹์ด ๋ฐ˜๋“œ์‹œ 2๊ฐœ.
    • ์™„์ „์ด์ง„ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ์–ด๋–ค ๋…ธ๋“œ ์ดํ›„๋ถ€ํ„ฐ ๋ชจ๋‘ ์ƒ๋žต๋œ ํ˜•ํƒœ์ด๋‹ค.
    • ๋ถ€๋ชจ๋Š” ์ž์‹๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ํฌ๊ฑฐ๋‚˜(max heap), ์ž์‹๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ์ž‘๋‹ค(min heap)
    • ํŠธ๋ฆฌ๋ฅผ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํž™ ๋งŒ๋“ค๊ธฐ ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ๋นˆ ํž™์— ์ฐจ๋ก€๋Œ€๋กœ ์›์†Œ ์‚ฝ์ž… : log 1 + log 2 + … + log n ≤ n * log n ⇒ O(n log n)
    • ๋‘ ํž™์„ ๋ณ‘ํ•ฉ : T(n) = 2T(n/2) + log n = O(n)

๋‘ ํž™์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณต - ์‹œ๊ฐ„๋ณต์žก๋„