💡시간 복잡도
: 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마만큼 걸리는가?
💡 최선의 방법을 강구하여 해결하는 것이 바람직하지만 결과를 반환하는데 최선은 1초, 최악은 1시간이 걸린다고 했을 때, 최선의 방법만 생각하면 최악의 결과가 나왔을 때 문제가 없는 코드임에도 문제가 있다고 판단하여 그 문제를 파악하는데 많은 시간을 소요할 수 있다.
=> 최악 (Big-O) 의 상황을 고려하여 대비하는 것이 바람직!
Big - O를 사용하는 이유
1. 알고리즘을 빠르게 분석하기 위해
2. 어떤 로직을 사용할 것인지 쉽게 파악하기 위해
💡 n = 입력값의 수
💡 O(함수) = 입력값에 따른 연산 횟수
return arr[index];
// 바로 index위치에 있는 값을 출력해준다.
for(int i=0; i < arr.length; i++) {
....
}
// 입력값 수마다 연산을 실행한다.
or(int i = 0; i < n; i++) { // n^1
for(int j = 0; j < n; j++) { // n^2
// do something for 1 second
}
}
데이터 크기 제한 | 예상되는 시간 복잡도 |
---|---|
n <= 1,000,000 | O(n) or O(log n) |
n <= 10,000 | O(n2) |
n <= 500 | O(n3) |
💡 가장 빠른/느린 시간 복잡도는 무엇일까요?
-> 빠른 것은 O(1),O(log n), 느린 것은 O(2^n)
💡효율적인 알고리즘을 구성했다 함은 무엇을 의미할까요?
-> 입력값 대비 적은 연산 횟수
💡시간 복잡도는 A와 B의 비례함이 어느 정도인지를 나타냅니다. A와 B는 무엇일까요?
-> 입력값과 연산 횟수