์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- testing
- ๊ฑฐ๋ญ์ ๊ณฑ
- spring data jpa
- fibonacci
- ํ๊ณ
- ์ฒซ๊ธ์๋๋ฌธ์
- ๋ฐฑ์๋
- ์ ๋ค๋ฆญ์ค
- ์๋ฐ
- ์ธํ ๋ฆฌ์ ์ด
- ๋ฌธ์์ด๋ค์ง๊ธฐ
- ์๋ฃ๊ตฌ์กฐ
- ํ์ดํ๋ก๊ทธ๋๋ฐ
- ์ปฌ๋ ์ ํ๋ ์์ํฌ
- HTML
- ๊ณ์ฐ๊ธฐ๋ง๋ค๊ธฐ
- CLI๋ช ๋ น์ด
- java
- ๊ทธ๋ฆฌ๋
- ์คํ๋ง
- ๋ฐ์ผ๋ฆฌ์ฝ๋ฉ
- Spring Data JDBC
- ์๊ณ ๋ฆฌ์ฆ
- ๊นํ๋ธ
- CSS
- Spring Security
- Publishing
- ๋ถํธ์บ ํ
- ๋ฐฑ์ค์๊ณ ๋ฆฌ์ฆ
- FilterChain
- Today
- Total
๋์ ๋ชจ์
026 | Time Complexity ๋ณธ๋ฌธ
๐ ์๊ฐ ๋ณต์ก๋
์๊ณ ๋ฆฌ์ฆ์์๋ ๋ฌธ์ ์ ๋ํ ํด๋ต์ ์ฐพ๋ ๊ฒ๊ณผ ํจ๊ป ์ผ๋ง๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง๋ ์ค์ํ๋ค. ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ญ๊ฐ ์์์ง, ์ด๊ฒ ์ ์ผ ์ข์ ๋ฐฉ๋ฒ์ด ๋ง์์ง ๊ณ ๋ฏผํ๋ ๊ฒ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ฏผํ๋ค๋ ๊ฒ๊ณผ ๊ฐ๋ค.
๐ค ๊ฐ๋
- ์ ๋ ฅ๊ฐ์ ๋ณํ์ ๋ฐ๋ผ ์ฐ์ฐ์ ์คํํ ๋, ์ฐ์ฐ ํ์์ ๋นํด ์ผ๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋์ง๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ
- ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๊ฒ = ์ ๋ ฅ๊ฐ์ด ์ปค์ง์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ ์๊ฐ์ ๋น์จ์ ์ต์ํํ ๊ฒ
๐ค ๋ถ๋ฅ
- ์ต์ ์ ๊ฒฝ์ฐ(Worst Case): ์ต์ ์ ์๋๋ฆฌ์ค๋ก, ๋น ์ค(Big-O) ํ๊ธฐ๋ฒ ์ฌ์ฉ
- ์ต์ ์ ๊ฒฝ์ฐ(Best Case): ์ต์ ์ ์๋๋ฆฌ์ค๋ก, ๋น ์ค๋ฉ๊ฐ(Big-ฮฉ) ํ๊ธฐ๋ฒ ์ฌ์ฉ
- ํ๊ท ์ ์ธ ๊ฒฝ์ฐ(Average Case): ํ๊ท ์๊ฐ์ ๋ํ๋ด๋ฉฐ, ๋น ์ธํ(Big-ฮธ) ํ๊ธฐ๋ฒ ์ฌ์ฉ
๐ Big-O ํ๊ธฐ๋ฒ
๐ค ๋ชฉ์
- ๋ถํ์ํ ์ฐ์ฐ์ ์ ๊ฑฐํ๊ณ ์๊ณ ๋ฆฌ์ฆ ๋ถ์์ ์ฝ๊ฒ ํจ
๐ค ๋ณตํฉ์ฑ
- ์๊ฐ ๋ณต์ก๋
- ๊ณต๊ฐ ๋ณต์ก๋
- ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ ์๋ก ์๊ฐ ๋ณต์ก๋๊ฐ ํฌ๋ฉฐ(์ํ ์๊ฐ์ด ๊น), ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ ์๋ก ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ด ํฅ์๋จ
- ์๊ฐ ๋ณต์ก๋์์ ์ค์ํ ๊ฒ์, ์ ํด์ง ํํ์์์ ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋ n์ ๋จ์
- ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ถ์ํ๋ค๋ ๊ฒ์ ์ ๋ ฅ๊ฐ n์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ผ๋ง๋ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ์ง๋ฅผ ๋ถ์ํ๋ ๊ฒ โ Big-O๋ก ์ ์

๐ซ O(1) - ์์/์ผ์ ํ ๋ณต์ก๋ (Constant Complexity)
์ ๋ ฅ๊ฐ์ด ์ฆ๊ฐํด๋ ์๊ฐ์ด ๋์ด๋์ง ์์

๐ซ O(log n) - ๋ก๊ทธ ๋ณต์ก๋ (Logarithmic Complexity)
์๋ฃ๊ตฌ์กฐ์์ ๋ฐฐ์ ๋ BST(Binary Search Tree)์์ ์ํ๋ ๊ฐ์ ํ์ํ ๋, ๋ ธ๋๋ฅผ ์ด๋ํ ๋๋ง๋ค ๊ฒฝ์ฐ์ ์๊ฐ ์ ๋ฐ์ผ๋ก ์ค์ด๋๋ ๊ฒ๊ณผ ๊ฐ์ ๋ ผ๋ฆฌ

- ์์
- n์ด ์ฃผ์ด์ก์ ๋ ๊ณ์ํด์ ๋ฐ์ฉ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ์ฐ์ฐ ํ์๋ log2(n)์ด๊ณ ๋น ์คํ๊ธฐ๋ฒ์ผ๋ก ๋ํ๋ด๋ฉด O(log n)
int i = n;
while (i > 0) {
i /= 2;
}
๐ซ O(n) - ์ ํ/์ง์ ์ ์๊ฐ (Linear Complexity)
์ ๋ ฅ๊ฐ์ ์ฆ๊ฐ์ ์๊ฐ์ด ๊ฐ์ ๋น์จ๋ก ์ฆ๊ฐ

- ์์_1
- for๋ฌธ ๋ด ์ฝ๋๊ฐ arr ๊ธธ์ด๋งํผ ์คํ๋จ. arr ๊ธธ์ด๋ฅผ n์ด๋ผ๊ณ ํ๋ฉด O(n)์ด๋ผ๊ณ ๋นจ๋ฆฌ ํ์ ํ ์ ์์
public int chooseOne(int[] arr, int index) {
return arr[index];
}
int[] arr = new int[]{1, 2, 3, 4, 5};
for(int i = 0; i < arr.length; i += 1){
int result = chooseOne(arr, i);
System.out.println(result);
}
- ์์_2
- ์ฒซ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ n๋ฒ์ ์คํํ๊ณ , ๋๋ฒ์งธ ๋ฐ๋ณต๋ฌธ์ n-1๋ฒ ๋ฐ๋ณต
int a = 0,
int b = 0;
for(int i = 1; i < n; i+=1) {
a += 1;
}
for(int j = 2; j < n; j+=1) {
b += 1;
}
๐ซ O(n^2) - 2์ฐจ ์๊ฐ (Quadratic Complexity)
์ ๋ ฅ๊ฐ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ฐ์ด n์ ์ ๊ณฑ์์ ๋น์จ๋ก ์ฆ๊ฐํ๋ ๊ฒ
์๋ฅผ ๋ค์ด, ์ ๋ ฅ๊ฐ์ด 1์ผ ๋, 1์ด๊ฐ ๊ฑธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ 5๋ผ๋ ์ ๋ ฅ๊ฐ์ ์ค ๋ 25์ด(5^2)๊ฐ ๊ฑธ๋ฆฌ๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(n^2)๋ผ๊ณ ํํํ๋ค.

- ์์
- n๊ฐ์ i์ ๋ํด ๊ฐ๊ฐ n๊ฐ์ j๋ฅผ ๊ฐ์ง๊ณ ๋ก์ง์ ์ํํจ. Big-O notation์์๋ ๊ณ์์ ์์ํญ์ ์ ์ธํ๊ณ ํํ
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
// do something with i and j
}
}
๐ซ O(2^n) - ์ง์/๊ธฐํ๊ธ์์ ์๊ฐ (Exponential Complexity)
๊ฐ์ฅ ๋๋ฆฐ ๋ณต์ก๋๋ก, ๊ตฌํํ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๊ฐ ์ง์ ์๊ฐ์ด๋ผ๋ฉด ๋ค๋ฅธ ๋ฐฉ์์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์
์ฌ๊ท๋ก ๊ตฌํํ๋ ํผ๋ณด๋์น ์์ด์ด O(2^n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.

๐ค ํด์ฆ
โ๋ ์๊ณ ๋ฆฌ์ฆ A, B์ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฐ๊ฐ O(n), O(log n)์ด๋ฉด, ์๊ณ ๋ฆฌ์ฆ B๋ ์๊ณ ๋ฆฌ์ฆ A๋ณด๋ค ํญ์ ๋น ๋ฅด๋ค?
โํญ์ ๋น ๋ฅธ ๊ฒ์ ์๋
- n์ด ์ ์ ์ปค์ง์๋ก B๊ฐ ๋ ๋นจ๋ผ์ง
- input 1๊ฐ: ๋ ๋ค 1
- input 2๊ฐ: 1 / 2
- input 4๊ฐ: 2 / 4
- input 8๊ฐ: 3 / 8
โ ๋ค์ ์คํ์ ํํํ ์ฝ๋์์ ๋์ฌ ์ ์๋ ์๊ฐ ๋ณต์ก๋๋?
class Stack {
private ArrayList<Integer> listStack = new ArrayList<Integer>();
public void push(Integer data) {
listStack.add(data);
}
public Integer pop() {
return listStack.remove(listStack.size() - 1);
}
public boolean contains(Integer data) {
return listStack.contains(data);
}
}
Stack stack = new Stack();
โO(1), O(n)
- O(1): ์คํ์ ์๋ก์ด ์์๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ ๋ ๋ฐ์ (๋ฃ์ ๋์ ๋บ ๋ ๊ฐ์ฅ ๋ง์ง๋ง ์์๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ)
- O(n)์คํ์ ํ์ (์คํ ํ ๋ฒ ์ํ)
'SEB > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
027 | Permutation & Combination, Greedy Implementation (0) | 2022.07.29 |
---|---|
026 | Greedy, Brute-Force, Binary Search Algorithm (0) | 2022.07.29 |
024 | Data Structure - Tree, Graph (0) | 2022.07.26 |
023 | Data Structure - Stack & Queue (0) | 2022.07.25 |
019 | Java - I/O, Thread, JVM (0) | 2022.07.19 |