๋ชฉ์ฐจ
- ์ด๋ค ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ฅผ ์ ํํ ๋๋, ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ๋ ๋ฅ๋ ฅ์ด ํ์ํ๋ค.
1. ์ฝ์ ์ ๋ ฌ
- ๋ฒ๋ธ ์ ๋ ฌ๊ณผ ์ ํ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ผ๋ก ๊ฐ์ง๋ง ์ค์ ์คํ๋๋ ๋จ๊ณ ์๋ ์ ํ ์ ๋ ฌ์ด ๋ ๋ฐฐ ์ ๋ค. ์ฆ, ๋ ๋ฐฐ ๋น ๋ฅด๋ค.
- 6์ฅ์์๋ ์ฝ์ ์ ๋ ฌ์ ๋ํด ๋ฐฐ์ฐ๋ฉด์ ์ต์ ์ ์๋๋ฆฌ์ค๊ฐ ์๋ ๋ค๋ฅธ ์๋๋ฆฌ์ค๋ฅผ ๋ถ์ํ๋ ๊ฒ์ ์ด๋ค ์ฅ์ ์ด ์๋์ง ์์๋ณธ๋ค.
- ์ฝ์
์ ๋ ฌ์ ์ํ ์์
- ์ฒซ ๋ฒ์งธ pass through์์ ๋ ๋ฒ์งธ ์ ์ ๊ฐ์ ์ญ์ ํ๊ณ ์ด ๊ฐ์ ์์ ๋ณ์์ ์ ์ฅํ๋ค. ์ญ์ ํ ๊ณต๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๋จ๋๋ค.
- ๊ณต๋ฐฑ ๊ธฐ์ค ์ผ์ชฝ์ ๊ฐ๊ณผ ์ฐจ๋ก๋๋ก ๋น๊ตํ์ฌ ์ฌ๋ฐ๋ฅธ ์์น์ ์์ ๋ณ์์ ๊ฐ์ ์ฝ์ ํ๋ค.
- ๋ ๋ฒ์งธ pass through๋ ์ธ ๋ฒ์งธ ์ ์ ๊ฐ์ ์ญ์ ํ๊ณ , ์์ pass through๋ฅผ ๋ฐ๋ณตํ๋ค.
2. ์ฝ์ ์ ๋ ฌ ๊ตฌํ
fun main() {
insertionSort(arrayOf(10, 9, 4, 6, 7, 8, 3, 2, 11, 1)).forEach { print("$it ") }
}
fun insertionSort(arr: Array<Int>): Array<Int> {
for (i in 1 until arr.size) {
var temp_value = arr[i]
var position = i - 1
while (position >= 0) {
if (arr[position] > temp_value) {
arr[position + 1] = arr[position]
position--
} else break
}
arr[position + 1] = temp_value
}
return arr
}
3. ์ฝ์ ์ ๋ ฌ์ ํจ์จ์ฑ
- ์ฝ์ ์ ๋ ฌ์ ํฌํจ๋ ๋จ๊ณ๋ ์ญ์ , ๋น๊ต, ์ํํธ, ์ฝ์ ๋ค ์ข ๋ฅ์ด๋ค.
- ๋น๊ต๋ 1 + 2 + 3 + โฆ + N - 1๋ฒ ์ผ์ด๋๋ค.
- ์ํํธ๋ ๊ฐ์ ํ ์
์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธธ ๋๋ง๋ค ์ผ์ด๋๋ค.
- ๋ฐฐ์ด์ด ์ญ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค๋ฉด(์ต์ ์ ๊ฒฝ์ฐ) ๋น๊ต๊ฐ ์ผ์ด๋ ๋๋ง๋ค ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ํํธํด์ผ ํ๋ค.
- ์ฆ, ๋น๊ต ํ์๋งํผ ์ํํธ๊ฐ ์ผ์ด๋๋ค.
- ๋ฐฐ์ด๋ก๋ถํฐ temp_value๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์ฝ์ ํ๋ ์์ ์ pass through๋น ํ ๋ฒ์ฉ ์ผ์ด๋๋ค.
- pass through๋ ํญ์ N - 1๋ฒ์ด๋ฏ๋ก ๊ฒฐ๊ตญ N - 1๋ฒ์ ์ญ์ ์ N - 1๋ฒ์ ์ฝ์ ์ด ์ผ์ด๋ ๊ฒ์ด๋ค.
- ์ฆ, O(N^2 + N)์ด๋ค.
- ๊ทธ๋ฌ๋ ๋น ์ค ํ๊ธฐ๋ฒ์ ๊ฐ์ฅ ๋์ ์ฐจ์์ N๋ง ๊ณ ๋ คํ๋ค.
- O(N^2 + N) โ O(N^2)
- ๋ฒ๋ธ ์ ๋ ฌ์ ์ ํ ์ ๋ ฌ๋ณด๋ค ๋ ๋ฐฐ ๋๋ฆฌ๊ณ , ์ฝ์ ์ ๋ ฌ์ ๋ฒ๋ธ ์ ๋ ฌ๋ณด๋ค + N๋งํผ์ ๋จ๊ณ๊ฐ ๋ ์กด์ฌํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ ๋ ฌ ์๋๋ ํญ์ ์ฝ์ ์ ๋ ฌ > ๋ฒ๋ธ ์ ๋ ฌ > ์ ํ ์ ๋ ฌ ์์ผ๊น?
4. ํ๊ท ์ ์ธ ๊ฒฝ์ฐ
- ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ์ ํ ์ ๋ ฌ์ด ์ฝ์ ์ ๋ ฌ๋ณด๋ค ๋น ๋ฅด๋ค.
- ๋ชจ๋ ์๋๋ฆฌ์ค ๊ด์ ์์ ์ฝ์ ์ ๋ ฌ์ ํจ์จ์ฑ์ ๊ฒํ ํด ๋ณด์.
- ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๊ณ ์ํํธํ๊ณ , ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ์ด๋ค ๋ฐ์ดํฐ๋ ์ํํธํ์ง ์๋๋ค.
- ํ๊ท ์๋๋ฆฌ์ค์์๋ ๋์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ์ ๋ฐ์ ๋น๊ตํ๊ณ ์ํํธํ ๊ฒ์ด๋ค.
- ์ฆ, N^2 / 2 ๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ๋งํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋น ์ค ๊ด์ ์์๋ ๋ ์๋๋ฆฌ์ค ๋ชจ๋ O(N^2)์ด๋ค.
- ์ฝ์
์ ๋ ฌ์ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ํฌ๊ฒ ์ข์ฐ๋๋ค.
- ์ต์ : O(N^2)
- ์ต์ : O(N)
- ํ๊ท : O(N^2 / 2)
- ์ ํ ์ ๋ ฌ์ ์ต์ ๋ถํฐ ํ๊ท , ์ต์ ์ ์๋๋ฆฌ์ค ๋ชจ๋ N^2 / 2๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค.
6. ๋ง๋ฌด๋ฆฌ
- ์ต์ , ํ๊ท , ์ต์ ์ ์๋๋ฆฌ์ค๋ฅผ ๊ตฌ๋ถํ๋ ๋ฅ๋ ฅ์ ๊ธฐ์กด ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํด์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ๋งํผ์ด๋ ์ฌ์ฉ์ ์๊ตฌ์ ๋ง๋ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ๋ฅด๋ ํต์ฌ ๊ธฐ์ ์ด๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๋ ๊ฒ๋ ์ข์ง๋ง ๋๋ถ๋ถ์ ํ๊ท ์ ์ธ ๊ฒฝ์ฐ๊ฐ ์ผ์ด๋๋ค๋ ๊ฒ์ ๋ช ์ฌํ์.
- 7์ฅ์ ์ฌ๋ฌ ์ฝ๋์ ์์๋ก, ๋ธ๋ก๊ทธ ํฌ์คํ ์ ์คํตํ๋ค.
'๐๏ธ ์ฑ & ๊ฐ์ ์ ๋ฆฌ > ๐๏ธ ๋๊ตฌ๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
9์ฅ ์คํ๊ณผ ํ๋ก ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ (0) | 2022.11.18 |
---|---|
8์ฅ ํด์ ํ ์ด๋ธ๋ก ๋งค์ฐ ๋น ๋ฅธ ๋ฃฉ์ (0) | 2022.11.18 |
5์ฅ ๋น ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ต์ ํ (0) | 2022.11.03 |
4์ฅ ๋น ์ค๋ก ์ฝ๋ ์๋ ์ฌ๋ฆฌ๊ธฐ (0) | 2022.11.02 |
3์ฅ ๋น ์ค ํ๊ธฐ๋ฒ (0) | 2022.10.29 |
- ์ด๋ค ๋ฌธ์ ํด๊ฒฐ์ ์ํด ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ฅผ ์ ํํ ๋๋, ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ๋ ๋ฅ๋ ฅ์ด ํ์ํ๋ค.
1. ์ฝ์ ์ ๋ ฌ
- ๋ฒ๋ธ ์ ๋ ฌ๊ณผ ์ ํ ์ ๋ ฌ์ ์๊ฐ ๋ณต์ก๋๋ O(N^2)์ผ๋ก ๊ฐ์ง๋ง ์ค์ ์คํ๋๋ ๋จ๊ณ ์๋ ์ ํ ์ ๋ ฌ์ด ๋ ๋ฐฐ ์ ๋ค. ์ฆ, ๋ ๋ฐฐ ๋น ๋ฅด๋ค.
- 6์ฅ์์๋ ์ฝ์ ์ ๋ ฌ์ ๋ํด ๋ฐฐ์ฐ๋ฉด์ ์ต์ ์ ์๋๋ฆฌ์ค๊ฐ ์๋ ๋ค๋ฅธ ์๋๋ฆฌ์ค๋ฅผ ๋ถ์ํ๋ ๊ฒ์ ์ด๋ค ์ฅ์ ์ด ์๋์ง ์์๋ณธ๋ค.
- ์ฝ์
์ ๋ ฌ์ ์ํ ์์
- ์ฒซ ๋ฒ์งธ pass through์์ ๋ ๋ฒ์งธ ์ ์ ๊ฐ์ ์ญ์ ํ๊ณ ์ด ๊ฐ์ ์์ ๋ณ์์ ์ ์ฅํ๋ค. ์ญ์ ํ ๊ณต๊ฐ์ ๊ณต๋ฐฑ์ผ๋ก ๋จ๋๋ค.
- ๊ณต๋ฐฑ ๊ธฐ์ค ์ผ์ชฝ์ ๊ฐ๊ณผ ์ฐจ๋ก๋๋ก ๋น๊ตํ์ฌ ์ฌ๋ฐ๋ฅธ ์์น์ ์์ ๋ณ์์ ๊ฐ์ ์ฝ์ ํ๋ค.
- ๋ ๋ฒ์งธ pass through๋ ์ธ ๋ฒ์งธ ์ ์ ๊ฐ์ ์ญ์ ํ๊ณ , ์์ pass through๋ฅผ ๋ฐ๋ณตํ๋ค.
2. ์ฝ์ ์ ๋ ฌ ๊ตฌํ
fun main() {
insertionSort(arrayOf(10, 9, 4, 6, 7, 8, 3, 2, 11, 1)).forEach { print("$it ") }
}
fun insertionSort(arr: Array<Int>): Array<Int> {
for (i in 1 until arr.size) {
var temp_value = arr[i]
var position = i - 1
while (position >= 0) {
if (arr[position] > temp_value) {
arr[position + 1] = arr[position]
position--
} else break
}
arr[position + 1] = temp_value
}
return arr
}
3. ์ฝ์ ์ ๋ ฌ์ ํจ์จ์ฑ
- ์ฝ์ ์ ๋ ฌ์ ํฌํจ๋ ๋จ๊ณ๋ ์ญ์ , ๋น๊ต, ์ํํธ, ์ฝ์ ๋ค ์ข ๋ฅ์ด๋ค.
- ๋น๊ต๋ 1 + 2 + 3 + โฆ + N - 1๋ฒ ์ผ์ด๋๋ค.
- ์ํํธ๋ ๊ฐ์ ํ ์
์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธธ ๋๋ง๋ค ์ผ์ด๋๋ค.
- ๋ฐฐ์ด์ด ์ญ์์ผ๋ก ์ ๋ ฌ๋์ด ์๋ค๋ฉด(์ต์ ์ ๊ฒฝ์ฐ) ๋น๊ต๊ฐ ์ผ์ด๋ ๋๋ง๋ค ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ํํธํด์ผ ํ๋ค.
- ์ฆ, ๋น๊ต ํ์๋งํผ ์ํํธ๊ฐ ์ผ์ด๋๋ค.
- ๋ฐฐ์ด๋ก๋ถํฐ temp_value๋ฅผ ์ญ์ ํ๊ณ ๋ค์ ์ฝ์ ํ๋ ์์ ์ pass through๋น ํ ๋ฒ์ฉ ์ผ์ด๋๋ค.
- pass through๋ ํญ์ N - 1๋ฒ์ด๋ฏ๋ก ๊ฒฐ๊ตญ N - 1๋ฒ์ ์ญ์ ์ N - 1๋ฒ์ ์ฝ์ ์ด ์ผ์ด๋ ๊ฒ์ด๋ค.
- ์ฆ, O(N^2 + N)์ด๋ค.
- ๊ทธ๋ฌ๋ ๋น ์ค ํ๊ธฐ๋ฒ์ ๊ฐ์ฅ ๋์ ์ฐจ์์ N๋ง ๊ณ ๋ คํ๋ค.
- O(N^2 + N) โ O(N^2)
- ๋ฒ๋ธ ์ ๋ ฌ์ ์ ํ ์ ๋ ฌ๋ณด๋ค ๋ ๋ฐฐ ๋๋ฆฌ๊ณ , ์ฝ์ ์ ๋ ฌ์ ๋ฒ๋ธ ์ ๋ ฌ๋ณด๋ค + N๋งํผ์ ๋จ๊ณ๊ฐ ๋ ์กด์ฌํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ ๋ ฌ ์๋๋ ํญ์ ์ฝ์ ์ ๋ ฌ > ๋ฒ๋ธ ์ ๋ ฌ > ์ ํ ์ ๋ ฌ ์์ผ๊น?
4. ํ๊ท ์ ์ธ ๊ฒฝ์ฐ
- ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ์ ํ ์ ๋ ฌ์ด ์ฝ์ ์ ๋ ฌ๋ณด๋ค ๋น ๋ฅด๋ค.
- ๋ชจ๋ ์๋๋ฆฌ์ค ๊ด์ ์์ ์ฝ์ ์ ๋ ฌ์ ํจ์จ์ฑ์ ๊ฒํ ํด ๋ณด์.
- ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๊ณ ์ํํธํ๊ณ , ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ์ด๋ค ๋ฐ์ดํฐ๋ ์ํํธํ์ง ์๋๋ค.
- ํ๊ท ์๋๋ฆฌ์ค์์๋ ๋์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ์ ๋ฐ์ ๋น๊ตํ๊ณ ์ํํธํ ๊ฒ์ด๋ค.
- ์ฆ, N^2 / 2 ๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ๋งํ ์ ์๋ค.
- ๊ทธ๋ฌ๋ ๋น ์ค ๊ด์ ์์๋ ๋ ์๋๋ฆฌ์ค ๋ชจ๋ O(N^2)์ด๋ค.
- ์ฝ์
์ ๋ ฌ์ ์๋๋ฆฌ์ค์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ํฌ๊ฒ ์ข์ฐ๋๋ค.
- ์ต์ : O(N^2)
- ์ต์ : O(N)
- ํ๊ท : O(N^2 / 2)
- ์ ํ ์ ๋ ฌ์ ์ต์ ๋ถํฐ ํ๊ท , ์ต์ ์ ์๋๋ฆฌ์ค ๋ชจ๋ N^2 / 2๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค.
6. ๋ง๋ฌด๋ฆฌ
- ์ต์ , ํ๊ท , ์ต์ ์ ์๋๋ฆฌ์ค๋ฅผ ๊ตฌ๋ถํ๋ ๋ฅ๋ ฅ์ ๊ธฐ์กด ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํด์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ๋งํผ์ด๋ ์ฌ์ฉ์ ์๊ตฌ์ ๋ง๋ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ณ ๋ฅด๋ ํต์ฌ ๊ธฐ์ ์ด๋ค.
- ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๋ ๊ฒ๋ ์ข์ง๋ง ๋๋ถ๋ถ์ ํ๊ท ์ ์ธ ๊ฒฝ์ฐ๊ฐ ์ผ์ด๋๋ค๋ ๊ฒ์ ๋ช ์ฌํ์.
- 7์ฅ์ ์ฌ๋ฌ ์ฝ๋์ ์์๋ก, ๋ธ๋ก๊ทธ ํฌ์คํ ์ ์คํตํ๋ค.
'๐๏ธ ์ฑ & ๊ฐ์ ์ ๋ฆฌ > ๐๏ธ ๋๊ตฌ๋ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
9์ฅ ์คํ๊ณผ ํ๋ก ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ (0) | 2022.11.18 |
---|---|
8์ฅ ํด์ ํ ์ด๋ธ๋ก ๋งค์ฐ ๋น ๋ฅธ ๋ฃฉ์ (0) | 2022.11.18 |
5์ฅ ๋น ์ค๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ์ฝ๋ ์ต์ ํ (0) | 2022.11.03 |
4์ฅ ๋น ์ค๋ก ์ฝ๋ ์๋ ์ฌ๋ฆฌ๊ธฐ (0) | 2022.11.02 |
3์ฅ ๋น ์ค ํ๊ธฐ๋ฒ (0) | 2022.10.29 |