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

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

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋น„๊ต๊ธฐ๋ฐ˜ ์ •๋ ฌ์˜ ํ•œ๊ณ„/๋น„๊ต์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š์€ ์ •๋ ฌ

๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ ํ•œ๊ณ„

์œ„ ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค. (ํฌ๊ธฐ ๋น„๊ต์— ๋”ฐ๋ฅธ ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜)

ํŠธ๋ฆฌ์˜ ๋ฆฌํ”„ ์ˆ˜ L์€ n๊ฐœ์˜ ๊ฐ’์„ ์ •๋ ฌํ•˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•œ๋‹ค.

  • L = n! ≤ 2^h
  • h ≥ log L = log(n!)
  • (n/2)^(n/2) ≤ n! ≤ n^n
  • log(n!) = Ω(n log n)

๋”ฐ๋ผ์„œ ๋‘ ์›์†Œ์˜ ๋น„๊ต์— ๊ธฐ๋ฐ˜ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Ω(n log n)๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์—†๋‹ค.

 

 

๋น„๊ต์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š์€ ์ •๋ ฌ 1 : ๋ฒ„ํ‚ท ์ •๋ ฌ

  • ์ •๋ ฌ๋  ๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋ฆฟ์ˆ˜ ๊ฐœ๋…์ด ์žˆ๋‹ค๋ฉด, ์ด๋ฅผ ์ด์šฉํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ •๋ ฌ๋  ๋ฐ์ดํ„ฐ๊ฐ€ ํƒ๋ฐฐ ์ฃผ์†Œ(~์‹œ ~๊ตฌ ~๋™)๋ผ๋ฉด, ์ฒ˜์Œ ์œ„์น˜(~์‹œ)๋งŒ ๋ณด๊ณ ๋„ ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜๊ฐ€ ๊ฐ€๋Šฅ.
    • ๋ถ„๋ฅ˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ์ •๋ ฌํ•˜๊ณ , ์ด๋ฅผ ์ด์œผ๋ฉด ์ •๋ ฌ ์™„๋ฃŒ
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ :
    • Best = c๊ฐœ์˜ ๋ฒ„ํ‚ท์œผ๋กœ ๋ชจ๋“  ์›์†Œ๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ฐฐ๋ถ„๋˜์–ด ๊ฐ๊ฐ n/c๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ”์„ ๋•Œ,
    • n/c๊ฐœ๋ฅผ O(n/c log (n/c)) ์‹œ๊ฐ„์— ์ •๋ ฌ, ์ด c๊ฐœ์˜ ๋ฒ„ํ‚ท์„ ๋‹ค์‹œ ํ•ฉ์น˜๋ฉด c(n/c) log(n/c) = n(log n/c) = n(log n - log c)
    • Worst = ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์œผ๋กœ ๋ชจ๋“  ์›์†Œ๊ฐ€ ๋ชฐ๋ ธ์„ ๋•Œ, ์ด ๊ฒฝ์šฐ๋Š” ๋ฒ„ํ‚ท์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

 

# stable sorting

  • ๋‘˜ ์ด์ƒ์˜ ํ‚ค๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ.
  • ์ˆœ์„œ์Œ (a, b)์˜ ์•ž ๊ธฐ์ค€ ์ •๋ ฌ vs ๋’ค ๊ธฐ์ค€ ์ •๋ ฌ
  • ์•ž/๋’ค ๊ธฐ์ค€ ์ •๋ ฌ ๋ชจ๋‘ ์ˆ˜ํ–‰ ์‹œ, ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€”์ˆ˜๋„ ์žˆ๊ณ  ์•ˆ๋ฐ”๋€”์ˆ˜๋„ ์žˆ์Œ

ex) 2์ฐจ์› ์ขŒํ‘œ๊ณ„์˜ ์ ๋“ค์„ ๋‹ค์Œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์ž.

  1. x์ขŒํ‘œ์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ
  2. ๋งŒ์•ฝ x์ขŒํ‘œ๊ฐ€ ๊ฐ™๋‹ค๋ฉด y์ขŒํ‘œ์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ๋ผ.

# ์ •๋ ฌ ๋ฐฉ๋ฒ•๊ณผ stable ์—ฌ๋ถ€

  • ํ€ต ์ •๋ ฌ
    • ์ •๋ ฌ ๊ธฐ์ค€์ด ๋งจ ์ฒ˜์Œ ์›์†Œ๋ผ๋ฉด stable
    • ์•„๋‹ˆ๋ผ๋ฉด ์ •๋ ฌ ๊ธฐ์ค€๊ณผ ์›๋ž˜ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•จ
  • ๋ฒ„๋ธ” ์ •๋ ฌ
    • stable. ๋‘ ํ‚ค ๊ฐ’์ด ๊ฐ™์„ ๋•Œ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์Œ
  • ์‚ฝ์ž… ์ •๋ ฌ
    • stable
  • ๋ณ‘ํ•ฉ ์ •๋ ฌ
    • stable
  • ํž™ ์ •๋ ฌ
    • not stable. ์ˆœ์„œ ์ •๋ณด๊ฐ€ ํž™์— ๋“ค์–ด๊ฐˆ๋•Œ ํŒŒ๊ดด๋จ.
  • ๊ธฐ์ˆ˜ ์ •๋ ฌ
    • stable

 

๋น„๊ต์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š์€ ์ •๋ ฌ 2 : ๊ธฐ์ˆ˜ ์ •๋ ฌ (radix sort)

์™„์ „ํžˆ ๋น„๊ต๋ฅผ ์ œ์™ธํ•œ ์ •๋ ฌ.

๋‚ฎ์€ ์ž๋ฆฌ์—์„œ ๋†’์€ ์ž๋ฆฌ๋กœ ๊ธฐ์ค€์„ ๋ฐ”๊พธ์–ด๊ฐ€๋ฉด์„œ ์ •๋ ฌํ•จ.

  • ์‹ค์ œ ์ •๋ ฌ์ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š”, 0~9๊นŒ์ง€์˜ ๋ฒ„ํ‚ท์— ์ˆซ์ž๋ฅผ ๋„ฃ์–ด๊ฐ„๋‹ค๋Š” ๊ฐœ๋…
  • ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฐจ๋ก€๋กœ ์ฝ์–ด๋‚˜๊ฐ€๋ฉด์„œ ์ˆœ์„œ๋ฅผ ์ง€ํ‚ค๋ฏ€๋กœ stable
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ์ˆซ์ž๊ฐ€ r ์ž๋ฆฟ์ˆ˜์ด๊ณ  ์ •๋ ฌ๋  ์ˆ˜๊ฐ€ n๊ฐœ์ผ ๋•Œ → O(rn)

 

๋น„๊ต์— ๊ธฐ๋ฐ˜ํ•˜์ง€ ์•Š์€ ์ •๋ ฌ 3 : ๊ณ„์ˆ˜ ์ •๋ ฌ (counting sort)

๋ฒ”์œ„๊ฐ€ ์ž‘์€ ์ˆ˜๋“ค์„ ๋น ๋ฅด๊ฒŒ ์ •๋ ฌ.

  1. ๊ฐ ์ˆ˜๊ฐ€ ๋‚˜์˜จ ํšŸ์ˆ˜๋ฅผ ์„ผ๋‹ค.
  2. 1์˜ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ์ˆ˜๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ์„ผ๋‹ค.
  3. 2์˜ ๊ฒฐ๊ณผ๋กœ, ํŠน์ •ํ•œ ์ˆ˜๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ex) {5, 9, 3, 6, 9, 5, 2, 10, 1}

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : n๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(n)
    • ๊ฐ ์ˆซ์ž๊ฐ€ ๋‚˜์˜จ ํšŸ์ˆ˜๋ฅผ ์„ธ๋Š”๋ฐ O(n)
    • ์ด๋Š” ์ˆซ์ž๋“ค์˜ ๋ฒ”์œ„๊ฐ€ ์ข์•„์„œ O(1) ์‹œ๊ฐ„์— ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
    • ๋‹ค์‹œ ์ˆซ์ž๋ฅผ ์ •๋ ฌ๋  ๋ฆฌ์ŠคํŠธ์— ์ฑ„์›Œ๋„ฃ๋Š”๋ฐ์— O(n)
  • ๋งŒ์•ฝ ์ˆซ์ž๋“ค์˜ ๋ฒ”์œ„๊ฐ€ ํฌ๋‹ค๋ฉด?
    • (์ตœ๋Œ“๊ฐ’ - ์ตœ์†Ÿ๊ฐ’)์˜ ๋ฒ”์œ„ ์ˆ˜๋งˆ๋‹ค ํ•ญ๋ชฉ ํ•˜๋‚˜๊ฐ€ ํ•„์š”
    • S๊ฐ€ ์ˆซ์ž ๋‚˜์˜จ ํšŸ์ˆ˜๋ฅผ ์„ธ๋Š” ํ…Œ์ด๋ธ”์ด๋ผ๋ฉด, ์ด ํ…Œ์ด๋ธ”์„ ๋‹ค์‹œ ์ฝ์–ด์•ผํ•˜๋ฏ€๋กœ ์ •ํ™•ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O( n+|S| )

 

 

์„ ํƒ ๋ฌธ์ œ

  • ์ฃผ์–ด์ง„ n๊ฐœ์˜ ์›์†Œ ์ค‘์—์„œ, ํฌ๊ธฐ ์ˆœ์œผ๋กœ k๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ
  • ํ•ด๋ฒ• : ์›์†Œ๋ฅผ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ๋ฐ”๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๋ ฌ์€ ์„ ํƒ๋ณด๋‹ค ์–ด๋ ค์šด ๋ฌธ์ œ.(๋ชจ๋“  ์›์†Œ์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.) ์ •๋ ฌ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ O(n log n)๋ณด๋‹ค ๋นจ๋ฆฌ ํ’€ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  1. ํ€ต ์ •๋ ฌ์˜ ์‘์šฉ
    • ๊ธฐ์ค€ ๋“ฑ์ˆ˜๊ฐ€ k๋“ฑ ์ผ๋•Œ, ๊ธฐ์ค€์ด ์›ํ•˜๋Š” ๋‹ต.
    • ๊ธฐ์ค€ ๋“ฑ์ˆ˜๊ฐ€ k๋ณด๋‹ค ํด ๋•Œ, ๊ธฐ์ค€๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋“ค ์ค‘์—์„œ k๋“ฑ์„ ๊ณ ๋ฅด๋ฉด ๋œ๋‹ค.
    • ๊ธฐ์ค€ ๋“ฑ์ˆ˜๊ฐ€ k๋ณด๋‹ค ์ž‘์„ ๋•Œ, ๊ธฐ์ค€๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋“ค์ด a๊ฐœ ์žˆ๋‹ค๋ฉด, ๊ธฐ์ค€๋ณด๋‹ค ํฐ ์›์†Œ๋“ค ์ค‘์—์„œ k-(a+1)๋“ฑ์„ ๊ณ ๋ฅด๋ฉด ๋จ (์ด ์›์†Œ์˜ ์™ผ์ชฝ์— a+1๊ฐœ์˜ ์›์†Œ ์กด์žฌ)
  2. ํ€ต ์ •๋ ฌ์—์„œ, ํ•ญ์ƒ ํ•œ ๊ธฐ์ค€ ์›์†Œ์˜ ๋“ฑ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋จ.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ๊ธฐ์ค€๊ฐ’์— ์˜ํ•ด์„œ ์–ด๋–ป๊ฒŒ ๋ฒ”์œ„๊ฐ€ ๋‚˜๋ˆ„์–ด์ง€๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
    • Best : T(n) = T(n/2) + n = O(n)
    • Worst : T(n) = T(n-1) + n = O(n^2)
  • ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ T(n) = T((99/100)n + n) = O(n)