Home
>
CS
>
2024
>
๐พ [CS] ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ๋ฌด์์ผ๊น์?
CS
๐พ [CS] ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ๋ฌด์์ผ๊น์?
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์๊ณ ๋ฆฌ์ฆ์ด ์
๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์คํํ๋ ์ฐ์ฐ์ ์๋ฅผ ์ธก์ ํ๋ ์งํ๋ก, ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์ฃผ๋ก ์
๋ ฅ ํฌ๊ธฐ(n)๊ฐ ์ปค์ง์๋ก ์๊ณ ๋ฆฌ์ฆ์ ์คํ์๊ฐ์ด ์ผ๋ง๋ ๋นจ๋ฆฌ ์ฆ๊ฐํ๋ ์ง๋ฅผ ๋ํ๋ด๋ฉฐ, ๋น
-์ค ํ๊ธฐ๋ฒ(Big-O Notaion)์ผ๋ก ํํ๋ฉ๋๋ค.
1๏ธโฃ ์ ์๊ฐ ๋ณต์ก๋(Time Complexity)๊ฐ ์ค์ํ๊ฐ์?
1๏ธโฃ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ.
- ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํ๊ฐํ ๋, ์
๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์คํ ๋๋์ง๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ(Algorithm)์ ์ฑ๋ฅ์ ๋น๊ตํ๊ณ , ๋ ๋์ ์๊ณ ๋ฆฌ์ฆ(Algorithm)์ ์ ํํ ์ ์์ต๋๋ค.
2๏ธโฃ ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ.
- ์ค์ ํ๋ก๊ทธ๋จ์ ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๋๊ฐ ๋ง์ต๋๋ค.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๊ฐ ๋์ ์๊ณ ๋ฆฌ์ฆ(Algorithm)์ ํฐ ์
๋ ฅ์ ์ฒ๋ฆฌํ ๋ ์คํ ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํ์ฌ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
3๏ธโฃ ์ฑ๋ฅ ์์ธก.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ฅผ ์๋ฉด ์
๋ ฅ ํฌ๊ธฐ ๋ณํ์ ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์์ธกํ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ํตํด ์ต์ ํํ ๋ถ๋ถ์ ์๋ณํ๊ณ , ๋ ํจ์จ์ ์ธ ์ฝ๋๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค.
2๏ธโฃ ์๊ฐ ๋ณต์ก๋(Time Complexity)์ ๊ธฐ๋ณธ ๊ฐ๋
.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์
๋ ฅ ํฌ๊ธฐ(n)์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด ์ํํด์ผ ํ๋ ๊ธฐ๋ณธ ์ฐ์ฐ์ ์๋ฅผ ๋ํ๋
๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ ์ ๋์ ์ธ ์ด ๋จ์๋ก ์ธก์ ํ์ง ์๊ณ , ์ฐ์ฐ ํ์๋ก ์ถ์ํํ์ฌ ํํํฉ๋๋ค.
- ์ด๋ ํ๋์จ์ด ์ฑ๋ฅ์ ๋ฐ๋ผ ์ค์ ์๊ฐ์ ๋ค๋ฅผ ์ ์์ง๋ง, ์ฐ์ฐ ํ์๋ ๋์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์ต์
์ ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฉฐ, ์ด๋ ์๊ณ ๋ฆฌ์ฆ(Algorithm)์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
3๏ธโฃ ๋น
-์ค ํ๊ธฐ๋ฒ(Big-O Notation)
-
๋น
-์ค ํ๊ธฐ๋ฒ(Big-O Notation)์ ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ฅผ ํํํ๋ ๋ฐฉ์์ผ๋ก, ์
๋ ฅ ํฌ๊ธฐ(n)๊ฐ ์ฆ๊ฐํ ๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ด ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ๋ํ๋
๋๋ค.
1๏ธโฃ ์ฃผ์ ๋น
-์ค ํ๊ธฐ๋ฒ.
1๏ธโฃ O(1) ๐ ์์ ์๊ฐ(Constant Time)
- ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์ฌ๊ฐ์ด ์
๋ ฅ ํฌ๊ธฐ์ ์๊ด์
์ ์ผ์ ํฉ๋๋ค.
- ์: ๋ฐฐ์ด์ ํน์ ์ธ๋ฑ์ค์ ์ ๊ทผํ๊ธฐ(์:
arr[0]
)
2๏ธโฃ O(lon g) ๐ ๋ก๊ทธ ์๊ฐ(Longarithmic Time)
- ์
๋ ฅ ํฌ๊ธฐ๊ฐ ์ปค์ง ์๋ก ์คํ ์๊ฐ์ด ์๋งํ๊ฒ ์ฆ๊ฐํฉ๋๋ค.
- ์: ์ด์ง ํ์(Binary Search)
3๏ธโฃ O(n) ๐ ์ ํ ์๊ฐ(Linear Time)
- ์
๋ ฅ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ์คํ ์๊ฐ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์: ๋ฐฐ์ด์์ ํน์ ๊ฐ์ ์ฐพ๊ธฐ ์ํด ๋ชจ๋ ์์๋ฅผ ๊ฒ์ฌํ๋ ๊ฒฝ์ฐ.
4๏ธโฃ O(n log n) ๐ ์ ํ ๋ก๊ทธ ์๊ฐ(Linearithmic Time)
- ์ ํ ์๊ฐ๋ณด๋ค ๋ ๋ณต์กํ ์๊ฐ ๋ณต์ก๋.
- ์ผ๋ฐ์ ์ผ๋ก ํจ์จ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ํฉ๋๋ค.
- ์: ํต ์ ๋ ฌ(Quick Sort), ๋ณํฉ ์ ๋ ฌ(Merge Sort)
5๏ธโฃ O(n^2) ๐ ์ด์ฐจ ์๊ฐ(Quadratic Time)
- ์
๋ ฅ ํฌ๊ธฐ์ ๋ํด ์ ๊ณฑ์ ๋น๋กํ์ฌ ์คํ ์๊ฐ์ด ์ฆ๊ฐํฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์์ ๋ฐ์ํฉ๋๋ค.
- ์: ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort), ์ฝ์
์ ๋ ฌ(Insertion Sort)
6๏ธโฃ O(2^n) ๐ ์ง์ ์๊ฐ(Exponential Time)
-
์
๋ ฅ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์คํ ์๊ฐ์ด ์ง์์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
- ๋ณดํต ์
๋ ฅ ํฌ๊ธฐ๊ฐ ์์ ๋๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์: ํผ๋ณด๋์น ์์ด์ ์ฌ๊ท์ ์ผ๋ก ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ
7๏ธโฃ O(n!) ๐ ํฉํ ๋ฆฌ์ผ ์๊ฐ(Factorial Time)
-
์
๋ ฅ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์คํ ์๊ฐ์ด ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํฉ๋๋ค.
- ์ฃผ๋ก ๋ชจ๋ ๊ฐ๋ฅํ ์์ด์ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์์ ๋ฐ์ํฉ๋๋ค.
- ์: ์์ด(permutation) ์์ฑ.
4๏ธโฃ ์๊ฐ ๋ณต์ก๋์ ์์.
1๏ธโฃ O(1) ๐ ์์ ์๊ฐ.
int getFirstElement(int[] arr) {
return arr[0]; // ์
๋ ฅ ํฌ๊ธฐ์ ์๊ด์์ด ์ผ์ ํ ์๊ฐ
}
2๏ธโฃ O(n) ๐ ์ ํ ์๊ฐ.
int sum(int[] arr) {
int sum = 0;
for (int num : arr) {
sum += num; // ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ํ
}
return sum;
}
3๏ธโฃ O(n^2) ๐ ์ด์ฐจ ์๊ฐ.
void printPairs(int[] arr) {
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr.length; j++) {
System.out.println(arr[i] + ", " + arr[j]); // ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ
}
}
}
5๏ธโฃ ์๊ฐ ๋ณต์ก๋ ๋ถ์ ๋ฐฉ๋ฒ.
1๏ธโฃ ๋ฐ๋ณต๋ฌธ.
- ๋ฐ๋ณต๋ฌธ์ด ํ ๋ฒ ์คํ๋ ๋๋ง๋ค O(n).
- ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ O(n^2), O(n^3)์ ๊ฐ์ ๋ ๋์ ์ฐจ์์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
2๏ธโฃ ์กฐ๊ฑด๋ฌธ.
-
if-else ์กฐ๊ฑด๋ฌธ์ ์
๋ ฅ ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์น์ง ์๋ ๊ฒฝ์ฐ O(1)
3๏ธโฃ ์ฌ๊ท ํธ์ถ.
- ์ฌ๊ท ํจ์์ ์๊ฐ ๋ณต์ก๋๋ ์ฌ๊ท ํธ์ถ์ ๊น์ด์ ๊ฐ ํธ์ถ์ ์์
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
-
ํผ๋ณด๋์น ์ฌ๊ท ํจ์๋ O(2^n) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
4๏ธโฃ ์ฐ์ฐ.
- ์ผ๋ฐ์ ์ธ ์ฐ์ ์ฐ์ฐ, ๋น๊ต, ํ ๋น ๋ฑ์ O(1)
6๏ธโฃ ์๊ฐ ๋ณต์ก๋ ์์ธก์ ์ค์์ฑ.
- ์๊ฐ ๋ณต์ก๋๋ฅผ ์ ์ดํดํ๋ฉด, ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ ๋ ํจ์จ์ฑ์ ์์ธกํ ์ ์์ต๋๋ค.
- ์ฝ๋ฉํ
์คํธ๋ ์ค์ ๊ฐ๋ฐ์์๋ ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ค์ํ๋ฐ, ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ฅผ ํตํด ์
๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ป๊ฒ ๋์ํ ์ง ๋ฏธ๋ฆฌ ์์ํ ์ ์์ต๋๋ค.
7๏ธโฃ ์์ฝ.
-
์๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์๊ณ ๋ฆฌ์ฆ์ด ์
๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์คํ ์๊ฐ์ด ์ฆ๊ฐํ๋์ง๋ฅผ ํ๊ฐํ๋ ์งํ๋ก, ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋น๊ตํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
- ๋น
-์ค ํ๊ธฐ๋ฒ(Big-O Notation)์ ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ฅผ ํํํ๋ ๋ฐฉ์์ผ๋ก, ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ์ถ์์ ์ด๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋ํ๋ด์ค, ์
๋ ฅ ํฌ๊ธฐ ๋ณํ์ ๋ฐ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ๋์์ ์์ธกํ ์ ์๊ฒ ๋์์ค๋๋ค.
- ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๊ธฐ ์ํด์๋ ์๊ฐ ๋ณต์ก๋์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์์ ์
๋๋ค.