[์ •๋ ฌ] ๊ธฐ์ˆ˜ ์ •๋ ฌ

๊ธฐ์ˆ˜ ์ •๋ ฌ์ด๋ž€?

๋‚ฎ์€ ์ž๋ฆฌ์ˆ˜๋ถ€ํ„ฐ ๋น„๊ตํ•˜์—ฌ ์ •๋ ฌํ•ด๊ฐ€๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ ๋น„๊ต ์—ฐ์‚ฐ์ด ๋ถˆํ•„์š”ํ•œ ์ •๋ ฌ์ด๋‹ค. 
์ž๋ฆฟ์ˆ˜์— ํ•ด๋‹น๋˜๋Š” ๊ฐ’์— ๋”ฐ๋ผ ๋ฒ„ํ‚ท์— ๋ฐ์ดํ„ฐ๋“ค์„ ์‚ฝ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต ์—ฐ์‚ฐ์ด ๋ถˆํ•„์š”ํ•˜์ง€๋งŒ ์ž๋ฆฟ์ˆ˜๋งŒํผ์˜ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.  (๋˜ํ•œ ์ž๋ฆฟ์ˆ˜๋งŒํผ์˜ ์ถ”๊ฐ€์ ์ธ ๋กœ์ง๋„ ํ•„์š”ํ•˜๋‹ค)

์ž๋ฆฟ์ˆ˜๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ํฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์“ธ๋ฐ์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.

 

๊ตฌํ˜„๊ณผ ์‹œ๊ฐ„ ๋ณต์žก๋„ 

์ž๋ฐ”๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„

    public static void main(String[] args) {
        RadixSort radixSort = new RadixSort();

        for(int i=0; i<10; i++) {
            buckets.add(new LinkedList<>());
        }

        // 1
        int digit = radixSort.getMaximumDigit();
        // 2
        for(int i=1; i<=digit; i++) {
            // 2-1
            for (int number : numbers) {
                // 2-1-1
                int digitValue = radixSort.getDigitValue(number, i);
                // 2-1-2
                buckets.get(digitValue).offer(number);
            }

			/ 2-2
            int idx = 0;
            for (LinkedList<Integer> bucket : buckets) {
                while (!bucket.isEmpty()) {
                    numbers[idx++] = bucket.poll();
                }
            }
        }

        System.out.println(Arrays.toString(numbers));

    }

    private int getMaximumDigit() {
        int max = 0;
        for (int number : numbers) {
            max = Math.max((int) Math.log10(number)+1, max);
        }
        return max;
    }

    private int getDigitValue(int number, int digit) {
        return (int) (number / Math.pow(10, digit-1)) % 10;
    }

1. ์ž๋ฆฟ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. (digit) 

2. 1์˜ ์ž๋ฆฌ๋ถ€ํ„ฐ digit ์ž๋ฆฌ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. O(d)

  2-1. ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ๋ฐ˜๋ณตํ•œ๋‹ค. O(n)

    2-1-1. ์ž๋ฆฟ์ˆ˜์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„๋‚ธ๋‹ค.

    2-1-2. ๋ฝ‘์•„๋‚ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น๋˜๋Š” Bucket์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค. 

  2-2. bucket์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.  

 

์‹œ๊ฐ„ ๋ณต์žก๋„

๋ชจ๋“  ์ž๋ฆฟ์ˆ˜์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(์ž๋ฆฟ์ˆ˜) 

๊ทธ๋ฆฌ๊ณ  ์ž๋ฆฟ์ˆ˜๋งˆ๋‹ค ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(๋ฐ์ดํ„ฐ ์ˆ˜) 

๋”ฐ๋ผ์„œ ๊ธฐ์ˆ˜ ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(์ž๋ฆฟ์ˆ˜ * ๋ฐ์ดํ„ฐ ์ˆ˜)

์ฆ‰, O(dn) (d๋Š” ์ตœ๋Œ€ ์ž๋ฆฟ์ˆ˜) ์ด๋‹ค.