๋ฐ์ํ
๐ ๊ณ์ ์ ๋ ฌ(counting sort) ์ด๋
- ์์ ๋ฒ์ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ์ ํํด์ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ
- ์๊ฐ๋ณต์ก๋: O(N), ์ต์ ์ ๊ฒฝ์ฐ O(N^2)
- ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐฏ์๋ง ์ธ์ฃผ๋ฉด ๋๋ค. ๋น๊ต์ ๋ ฌ X
๐ ๊ณ์ ์ ๋ ฌ(counting sort) ๊ตฌํ
N = 5 # 5 ์ดํ์ธ ์๋ค์ ์ ๋ ฌํด๋ผ
numbers = [1, 2, 3, 4, 5, 1, 1, 2, 3, 4, 5, 3,
3, 2, 1, 2, 3, 1, 2, 3, 4, 1, 5, 1,
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3,
4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
print(f'์ ๋ ฌ ์ : {numbers}')
count_list = [0] * (N + 1)
for number in numbers:
count_list[number] += 1
sorted_numbers = []
for i in range(len(count_list)):
for j in range(count_list[i]):
sorted_numbers.append(i)
print(f'์ ๋ ฌ ํ: {sorted_numbers}')
๐ ๊ณ์ ์ ๋ ฌ(counting sort) ํน์ง
- ์ฅ์
- ํน์ ์กฐ๊ฑด์์ ๋งค์ฐ ๋น ๋ฆ O(N)
- ์์ ์ ๋ ฌ
- ๋จ์
- ๋ฒ์๊ฐ ์ปค์ง์๋ก ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํ๋ค.
- ์๋์ ์๊ฐ๋ณต์ก๋๋ O(N+K) ์ฌ๊ธฐ์ K๋ ๋ฒ์์ค ๊ฐ์ฅ ํฐ ์
K๊ฐ N๋ณด๋ค ์ปค์ง๊ฒ ๋๋ฉด ์๊ฐ๋ณต์ก๋ ์ฆ๊ฐ
๋ง์ฝ 10๊ฐ(N)์ ์ซ์๋ฅผ ๋น๊ตํ๋๋ฐ ๊ฐ์ฅ ํฐ์๊ฐ 100(K)์ด๋ฉด
100๊ฐ๋ฅผ ๋ชจ๋ ์ํํด์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ O(N^2)
๋ฐ์ํ
'CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊น์ด ์ฐ์ ํ์(Depth First Search, DFS) (0) | 2020.09.28 |
---|---|
๋๋น ์ฐ์ ํ์(Breath First Search, BFS) (0) | 2020.09.27 |
๋ณํฉ ์ ๋ ฌ(merge sort) (0) | 2020.09.25 |
ํต ์ ๋ ฌ(quick sort) (1) | 2020.09.24 |
์ฝ์ ์ ๋ ฌ(insertion sort) (0) | 2020.09.23 |