๐พ [CS] ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ ๋ฌด์์ผ๊น์?
- ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๋ ๋์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์ ์ธก์ ํ๋ ์งํ์ ๋๋ค.
- ์๊ฐ ๋ณต์ก๋(Time Complexity)๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๊ฐ์ ํ๊ฐํ๋ ๊ฒ์ด๋ผ๋ฉด, ๊ณต๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋์ง๋ฅผ ํ๊ฐํ๋ ๊ฐ๋ ์ ๋๋ค.
1๏ธโฃ ์ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ ์ค์ํ๊ฐ์?
1๏ธโฃ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ.
- ๋ฉ๋ชจ๋ฆฌ๋ ์ ํ๋ ์์์
๋๋ค.
- ํนํ ์๋ฒ ๋๋ ์์คํ ์ด๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ฒ๋ผ ๋ฉ๋ชจ๋ฆฌ ์์์ด ์ ํ๋ ํ๊ฒฝ์์ ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ๊ณ ๋ คํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ผ๋ก ํ๋ก๊ทธ๋จ์ด ์ถฉ๋ํ๊ฑฐ๋ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
๐ ์๋ฒ ๋๋ ์์คํ (Embedded System)
ํน์ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ ๋ฆฝ์ ์ธ ์ปดํจํฐ ์์คํ ์ผ๋ก, ์ผ๋ฐ์ ์ธ ์ปดํจํฐ์ ๋ฌ๋ฆฌ ํน์ ๋ชฉ์ ์ด๋ ์์ ์ ์ต์ ํ๊ฐ ๋์ด ์์ต๋๋ค.
์๋ฒ ๋๋ ์์คํ (Embadded System)์ ํ๋์จ์ด์ ์ํํธ์จ์ด๊ฐ ์กฐํฉ๋์ด ํน์ ์ฅ์น๋ ์์คํ ์ ์ผ๋ถ๋ก ๋ด์ฅ๋๋ฉฐ, ์๋์ฐจ, ๊ฐ์ ์ ํ, ์๋ฃ๊ธฐ๊ธฐ, ์ฐ์ ์ฅ๋น, ๊ฐ์ ์ ํ ๋ฑ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ์ฑ๋ฅ ์ต์ ํ.
- ๋๋ก๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ์๋๋ฟ๋ง ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๋ ์ต์ ํํด์ผ ํฉ๋๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ์ค์ด๋ฉด ํ๋ก๊ทธ๋จ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ต๋๋ค.
3๏ธโฃ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต.
- ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ์ ์๊ฐ ๋ณต์ก๋(Time Complexity)๋ฅผ ๊ฐ์ง๋๋ผ๋, ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๊ฐ ๋ฎ์ ์๊ณ ๋ฆฌ์ฆ(Algorithm)์ด ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
2๏ธโฃ ๊ณต๊ฐ ๋ณต์ก๋์ ์ ์.
- ๊ณต๊ฐ ๋ณต์ก๋(Time Complexity)๋ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๋ฉด์ ์ฌ์ฉํ๋ ์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์๋ฏธํฉ๋๋ค.
- ์ด ๋ฉ๋ชจ๋ฆฌ๋ ๋ค์ ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
-
- ๊ณ ์ ๊ณต๊ฐ(Fixed Part)
-
- ๊ฐ๋ณ ๊ณต๊ฐ(Variable Part)
-
- ์ด ๋ฉ๋ชจ๋ฆฌ๋ ๋ค์ ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
1๏ธโฃ ๊ณ ์ ๊ณต๊ฐ(Fixed Part)
- ์๊ณ ๋ฆฌ์ฆ์ด ๊ณ ์ ๋ ํฌ๊ธฐ๋ก ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์
๋๋ค.
- ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฌด๊ดํ๊ฒ ํญ์ ์ผ์ ํ ๊ณต๊ฐ์ ์ฐจ์งํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉํ๋ ์์, ๋ณ์, ํจ์ ํธ์ถ, ๊ทธ๋ฆฌ๊ณ ํน์ ํฌ๊ธฐ์ ๊ณ ์ ๋ฐฐ์ด ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก O(1)๋ก ํํ๋ฉ๋๋ค.
2๏ธโฃ ๊ฐ๋ณ ๊ณต๊ฐ(Variable Part)
- ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ณํํ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋์ ๋ฐฐ์ด, ์ฌ๊ท ํธ์ถ ์ ์ฌ์ฉ๋๋ ์คํ ๊ณต๊ฐ, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์์ ๋ฐฐ์ด ๋ฑ์ด ์ฌ๊ธฐ์ ํด๋นํฉ๋๋ค.
- ๊ฐ๋ณ ๊ณต๊ฐ(Variable Part) ํฌ๊ธฐ๋ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ, ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)์ ์ค์ํ ์์๊ฐ ๋ฉ๋๋ค.
3๏ธโฃ ๋น -์ค ํ๊ธฐ๋ฒ(Big-O Notation)์ผ๋ก ๊ณต๊ฐ ๋ณต์ก๋ ํํ.
- ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ ์๊ฐ ๋ณต์ก๋(Time Complexity)์ฒ๋ผ ๋น
-์ค ํ๊ธฐ๋ฒ(Big-O Notation)์ ์ฌ์ฉํ์ฌ ํํํฉ๋๋ค.
- ์ด๋ ์ ๋ ฅ ํฌ๊ธฐ(n)๊ฐ ์ปค์ง ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ๋ํ๋ ๋๋ค.
1๏ธโฃ ์ฃผ์ ๊ณต๊ฐ ๋ณต์ก๋ ์์.
1๏ธโฃ O(1) ๐ ์์ ๊ณต๊ฐ(Constant Space)
- ์๊ณ ๋ฆฌ์ฆ์ด ์ ๋ ฅ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ์ผ์ ํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ.
- ์: ๋ณ์ 3๊ฐ๋ง์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ.
int add(int a, int b) { int sum = a + b; return sum; }
- ์ ํจ์๋
a
,b
,sum
์ด๋ผ๋ 3๊ฐ์ ๋ณ์๋ง์ ์ฌ์ฉํ๋ฏ๋ก O(1)์ ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ๊ฐ์ง๋๋ค.
2๏ธโฃ O(n) ๐ ์ ํ ๊ณต๊ฐ(Linear Space)
- ์ ๋ ฅ ํฌ๊ธฐ n์ ๋น๋กํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ.
- ์: ํฌ๊ธฐ๊ฐ n์ธ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ.
int[] copyArray(int[] arr) { int[] newArr = new int[arr.length]; for (int i = 0; i < arr.length; i++) { newArr[i] = arr[i]; } return newArr; }
- ์
๋ ฅ ๋ฐฐ์ด์ ํฌ๊ธฐ n์ ๋น๋กํ๋ ํฌ๊ธฐ์ ์๋ก์ด ๋ฐฐ์ด
newArr
๋ฅผ ์์ฑํ๋ฏ๋ก O(n)์ ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ๊ฐ์ง๋๋ค.
3๏ธโฃ O(n^2) ๐ ์ด์ฐจ ๊ณต๊ฐ(Quadratic Space)
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ๋ ฅ ํฌ๊ธฐ์ ์ ๊ณฑ์ ๋น๋กํ์ฌ ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ.
- ์: ํฌ๊ธฐ n * n์ธ 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ.
int[][] generateMatrix(int n) {
int [][] matrix = new int[n][n];
// ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด n^2์ ๋น๋ก
return martix;
}
4๏ธโฃ ์์๋ฅผ ํตํ ๊ณต๊ฐ ๋ณต์ก๋ ๋ถ์.
1๏ธโฃ O(1) ๊ณต๊ฐ ๋ณต์ก๋.
int findMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
-
๋ถ์
- ์ด ํจ์๋ ์
๋ ฅ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ์๊ด์์ด
max
์i
๋ ๊ฐ์ ๋ณ์๋ง ์ฌ์ฉํฉ๋๋ค.- ๋ฐ๋ผ์ ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ O(1)์ ๋๋ค.
- ์ด ํจ์๋ ์
๋ ฅ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ์๊ด์์ด
2๏ธโฃ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๊ฐ ๋ณต์ก๋.
int factorial(int n) {
if(n <= 1) {
return 1;
}
return n * fatorial(n - 1);
}
-
๋ถ์
- ์ด ์ฌ๊ท ํจ์๋ ์คํ(Stack)์ ์ฌ์ฉํ์ฌ ๊ฐ ํจ์ ํธ์ถ์ ์ ์ฅํฉ๋๋ค.
-
factorial(5)
๋ฅผ ํธ์ถํ๋ฉด ๋ด๋ถ์ ์ผ๋กfactorial(4)
,factorial(3)
๋ฑ์ด ํธ์ถ๋๋ฉฐ, ํธ์ถ์ด ๋๋๊ธฐ ์ ๊น์ง ๊ฐ ํธ์ถ์ด ์คํ(Stack)์ ์ ์ฅ๋ฉ๋๋ค.
-
- ์ฌ๊ท ๊น์ด๋ ์ต๋ n์ด ๋๋ฏ๋ก, ๊ณต๊ฐ ๋ณต์ก๋๋ O(n)์ ๋๋ค.
- ์ด ์ฌ๊ท ํจ์๋ ์คํ(Stack)์ ์ฌ์ฉํ์ฌ ๊ฐ ํจ์ ํธ์ถ์ ์ ์ฅํฉ๋๋ค.
5๏ธโฃ ๊ณต๊ฐ ๋ณต์ก๋ ์ต์ ํ ๋ฐฉ๋ฒ.
1๏ธโฃ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ.
- ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๊ณ ์ ํฌ๊ธฐ์ ๋ฐฐ์ด ๋์ ๋์ ๋ฐฐ์ญ(ArrayList)์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค.
2๏ธโฃ ์ธํ๋ ์ด์ค(In-Place) ์๊ณ ๋ฆฌ์ฆ.
- ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๊ทธ ์๋ฆฌ์์ ์ง์ ์์ ํ๋ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ํํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ๋ฐฐ์ด์ ์ ๋ ฌํ ๋ ์๋ก์ด ๋ฐฐ์ด์ ์์ฑํ์ง ์๊ณ ๊ธฐ์กด ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ O(1)๋ก ์ค์ผ ์ ์์ต๋๋ค.
3๏ธโฃ ์ฌ๊ท ๋์ ๋ฐ๋ณต๋ฌธ ์ฌ์ฉ.
-
์ฌ๊ท ํธ์ถ๋ก ์ธํ ์คํ ๋ฉ๋ชจ๋ฆฌ(Stack Memory) ์ฌ์ฉ์ ์ค์ด๊ธฐ ์ํด ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฌ๊ท ํจ์๊ฐ ๊น์ ์ฌ๊ท ํธ์ถ์ ํตํด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋์ฒดํ๋ฉด ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
6๏ธโฃ ์์ฝ.
- ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ ์๊ณ ๋ฆฌ์ฆ(Algorithm)์ด ์คํ ์ค ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋ํ๋ด๋ฉฐ, ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ(Algorithm) ์ค๊ณ์ ์ค์ํ ์์์ ๋๋ค.
- ์ด๋ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ถ์ํ๋ฉฐ, ๋น -์ค ํ๊ธฐ๋ฒ(Big-O Notation)์ ์ฌ์ฉํ์ฌ ํํ๋ฉ๋๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋(Space Complexity)๋ฅผ ์ ์ดํดํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ๋์ด๊ณ , ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.