๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

Comparison Sort

๋ชจ๋“  ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ๊ฒ€์‚ฌํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๊ฒฐ๊ตญ ๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Decision Tree ๋ฅผ ๋งŒ๋“ค์–ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋กœ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋Š” decision tree ์˜ ๋†’์ด์ธ logn ๋งŒํผ ๋น„๊ต์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋น„๊ต์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ี•(n) ์ด๋ฏ€๋กœ ๋น„๊ต์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ฌด๋ฆฌ ๋นจ๋ผ๋„ ี•(nlogn)๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜๊ฐ€ ์—†๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์–ธ๊ธ‰ํ•˜๋Š” ๋น ๋ฅธ ์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ ํ€ต์†ŒํŠธ, ๋จธ์ง€์†ŒํŠธ ์—ญ์‹œ ี•(nlogn)์„ ๋ณต์žก๋„๋กœ ๊ฐ€์ง„๋‹ค.

Counting Sort

๊ทธ๋ ‡๋‹ค๋ฉด ๋งŒ์•ฝ ๋น„๊ต์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–จ๊นŒ? ๋น„๊ต์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด Decision Tree ์˜ ์ œ์•ฝ์‚ฌํ•ญ ์—†์ด ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„๊นŒ?

๊ณ„์ˆ˜์ •๋ ฌ ํ˜น์€ ์นด์šดํŒ… ์†ŒํŠธ๋Š” ์ด๋Ÿฐ ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ ๋‚˜์˜จ ี•(n+๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€๊ฐ’ k)์˜ ์†๋„๊ฐ€ ๋ณด์žฅ๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์นด์šดํŒ… ์†ŒํŠธ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋ฐฐ์—ด ๋‚ด์— ํŠน์ •ํ•œ ๊ฐ’์ด ๋ช‡๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์—ฐ์‚ฐ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

Algorithm Concept

์นด์šดํŒ… ์ •๋ ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.

  1. ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด A์˜ ์š”์†Œ๊ฐ’๋“ค์˜ ๋“ฑ์žฅํšŸ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด B์™€ ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ๊ฐ’๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด C๋ฅผ ์ค€๋น„ํ•œ๋‹ค.
  2. ์ž…๋ ฅ๋ฐญ์€ ๋ฐฐ์—ด์—์„œ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ํ•ด๋‹น ๊ฐ’์„ ๋ฐฐ์—ด B์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•ด B ์˜ ์š”์†Œ ๊ฐ’์„ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. (B[A[i]]++)
  3. B๊ฐ€ ์™„์„ฑ๋˜๋ฉด B์˜ ๊ฐ ์š”์†Œ๋“ค์„ ๋ˆ„์ ํ•ฉ์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค. B[i] = B[i] + B[i-1]
  4. A ์˜ ๊ฐ€์žฅ ๋’ค์—์„œ ๋ถ€ํ„ฐ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ํ•ด๋‹น๊ฐ’์„ B์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์ฐธ์กฐ๋œ B์˜ ๊ฐ’์„ ๋ฐฐ์—ด C์˜ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐ์—ด C์— A์—์„œ ๊บผ๋‚ธ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. C[B[A[i]]] = A[i]
  5. ์‚ฌ์šฉ๋œ B์˜ ๊ฐ’์„ ํ•˜๋‚˜ ๊ฐ์†Œ์‹œํ‚จ๋‹ค. (B[A[i]]--)
  6. A์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด 4๋ฒˆ, 5๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋ฐฐ์—ด์ด ์—ฌ๋Ÿฌ๊ฐœ ์‚ฌ์šฉ๋˜๊ณ  ์„œ๋กœ๊ฐ€ ์„œ๋กœ๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์ด๋ž‘ ๊ธ€๋กœ๋Š” ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด์ž.

Example

์ผ๋‹จ ๋ฐฐ์—ด A๋ฅผ ์ž…๋ ฅ๋ฐ›์•˜๊ณ , ๋ฐฐ์—ด B์™€ C๋ฅผ ์ค€๋น„ํ–ˆ๋‹ค.

Phase 1

์ œ์ผ ๋จผ์ €, A๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ A์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฐ’๋“ค์˜ ๋“ฑ์žฅ ํšŸ์ˆ˜๋ฅผ ๋ฐฐ์—ด B์— ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A์—์„œ 0์ด๋ผ๋Š” ๊ฐ’์€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— B์˜ 0๋ฒˆ ์ธ๋ฑ์Šค๋Š” 0์ด๋˜๊ณ , 3์€ ์ด 2๋ฒˆ ๋“ฑ์žฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— B์˜ 3๋ฒˆ ์ธ๋ฑ์Šค๋Š” 2๋กœ ๊ฑ์‹ ๋˜์—ˆ๋‹ค.

์ฃผ๋ชฉํ•  ์ ์€ B์˜ ๋ฐฐ์—ด๊ธธ์ด๋Š” A์— ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ดํ›„์— ์ด๊ฒƒ์ด ์„ฑ๋Šฅ์— ์–ด๋–ค ์˜ํ–ฅ์ด ์žˆ์„์ง€ ๋…ผ์˜ํ•ด๋ณด์ž.

Phase 2

B ๋ฐฐ์—ด์˜ ๊ฐ’๋“ค์„ 1๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๊ฐ’๊นŒ์ง€ ๋ฐ”๋กœ ์ด์ „ ๊ฐ’๊ณผ ๊ณ„์† ๋”ํ•ด์„œ ๋ˆ„์ ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

Phase 3

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

Phase 4

  1. A ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ๊ฐ’์ธ 1์„ ๊บผ๋‚ธ๋‹ค.
  2. B ๋ฐฐ์—ด์˜ 1๋ฒˆ ์ธ๋ฑ์Šค์—๋Š” 2๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  3. C ๋ฐฐ์—ด์˜ 2๋ฒˆ์งธ ์œ„์น˜์— A์—์„œ ๊บผ๋‚ธ ๊ฐ’์ธ 1์„ ๋„ฃ์–ด์ฃผ๊ณ ,
  4. B ๋ฐฐ์—ด์˜ 1๋ฒˆ ์ธ๋ฑ์Šค์˜ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜ ์ค„์—ฌ์ค€๋‹ค.

Phase 5

  1. A ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ๊ฐ’์ธ 5๋ฅผ ๊บผ๋‚ธ๋‹ค.
  2. B ๋ฐฐ์—ด์˜ 5๋ฒˆ ์ธ๋ฑ์Šค์—๋Š” 5๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  3. C ๋ฐฐ์—ด์˜ 5๋ฒˆ์งธ ์œ„์น˜์— A์—์„œ ๊บผ๋‚ธ ๊ฐ’์ธ 5์„ ๋„ฃ์–ด์ฃผ๊ณ ,
  4. B ๋ฐฐ์—ด์˜ 5๋ฒˆ ์ธ๋ฑ์Šค์˜ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜ ์ค„์—ฌ์ค€๋‹ค.

Phase 6

  1. A ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ๊ฐ’์ธ 3๋ฅผ ๊บผ๋‚ธ๋‹ค.
  2. B ๋ฐฐ์—ด์˜ 5๋ฒˆ ์ธ๋ฑ์Šค์—๋Š” 4๊ฐ€ ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  3. C ๋ฐฐ์—ด์˜ 4๋ฒˆ์งธ ์œ„์น˜์— A์—์„œ ๊บผ๋‚ธ ๊ฐ’์ธ 3์„ ๋„ฃ์–ด์ฃผ๊ณ ,
  4. B ๋ฐฐ์—ด์˜ 3๋ฒˆ ์ธ๋ฑ์Šค์˜ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜ ์ค„์—ฌ์ค€๋‹ค.

Phase 7

  1. A ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ๊ฐ’์ธ 1๋ฅผ ๊บผ๋‚ธ๋‹ค.
  2. B ๋ฐฐ์—ด์˜ 1๋ฒˆ ์ธ๋ฑ์Šค์—๋Š” 1์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  3. C ๋ฐฐ์—ด์˜ 1๋ฒˆ์งธ ์œ„์น˜์— A์—์„œ ๊บผ๋‚ธ ๊ฐ’์ธ 1์„ ๋„ฃ์–ด์ฃผ๊ณ ,
  4. B ๋ฐฐ์—ด์˜ 1๋ฒˆ ์ธ๋ฑ์Šค์˜ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜ ์ค„์—ฌ์ค€๋‹ค.

Phase 8

  1. A ๋ฐฐ์—ด์—์„œ ๋‹ค์Œ ๊ฐ’์ธ 3๋ฅผ ๊บผ๋‚ธ๋‹ค.
  2. B ๋ฐฐ์—ด์˜ 3๋ฒˆ ์ธ๋ฑ์Šค์—๋Š” 3์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
  3. C ๋ฐฐ์—ด์˜ 3๋ฒˆ์งธ ์œ„์น˜์— A์—์„œ ๊บผ๋‚ธ ๊ฐ’์ธ 3์„ ๋„ฃ์–ด์ฃผ๊ณ ,
  4. B ๋ฐฐ์—ด์˜ 3๋ฒˆ ์ธ๋ฑ์Šค์˜ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜ ์ค„์—ฌ์ค€๋‹ค.

์ •๋ ฌ ๋!

Implement

// k == max number
// n == number of data in A
void counting_sort(int A[], int B[], int C[]){

    /* ์นด์šดํŒ… ๋ฐฐ์—ด 0์œผ๋กœ ์ดˆ๊ธฐํ™” */
    for (int i = 0 ; i <= k ; i++){
        B[i] = 0;
    }

    /* ์นด์šดํŒ… ๊ฐ’ ๊ฐฑ์‹   */
    for (int i = 1 ; i <= n ; i++){
        B[A[i]] = B[A[i]] + 1;
    }

    /* ๋ˆ„์ ํ•ฉ ๊ณ„์‚ฐ */
    for (int i = 1 ; i <= k ; i++){
        B[i] = B[i] + B[i-1];
    }

    /* ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๊ฐ’ ๋„ฃ๊ธฐ */
    for (int i = n ; i >= n ; i--){
        C[B[A[i]]] = A[i];
        B[A[i]] = B[A[i]] - 1;
    }
}

Algorithm Analysis

์•ž์„œ ์ž ๊น ์–ธ๊ธ‰ํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์น˜๋ช…์ ์ธ ๋‹จ์ ์€ ์นด์šดํŒ…์„ ์œ„ํ•œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด ๊ฐ’๋“ค ์ค‘ ์ตœ๋Œ“๊ฐ’์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด์˜ ๊ฐ’๋“ค์ด (1, 100000) ์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ์ด ๋ฐฐ์—ด์€ ๋‘ ๊ฐœ์˜ ๊ฐ’๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์นด์šดํŒ… ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 100000์œผ๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค.

๋˜ํ•œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ี•(n * k) ๊ฐ€ ๋˜๋Š”๋ฐ, ๋ฐฐ์—ด์„ ์ฐธ์กฐํ•˜๋Š” ์—ฐ์‚ฐ O(n) ์ด B ๋ฐฐ์—ด์˜ ๊ธธ์ด์ธ k, ์ฆ‰ ๋ฐฐ์—ด ๋‚ด์˜ ์ตœ๋Œ€ ๊ฐ’์˜ ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ๊ฐœ์ˆ˜๊ฐ€ k ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๊ต‰์žฅํžˆ ์œ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋˜๊ฒ ์ง€๋งŒ, k ๊ฐ€ ๋” ํฐ๊ฒฝ์šฐ์—๋Š” ๋น„ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.