Algorithm

시간 복잡도

busy맨 2023. 3. 22. 16:37

시간 복잡도

  • 주어진 문제를 해결하기 위한 연산 횟수
  • 보통 빅-오(O(n)) 표기법을 기준으로 수행 시간을 계산 → 항상 최악일 때(데이터의 크기가 가장 클 때)를 기준

시간 복잡도 유형

  • 빅-오메가(Ω(n)): 최선일 때(best case)의 연산 횟수를 나타낸 표기법
  • 빅-세타(Θ(n)): 보통일 때(average case)의 연산 횟수를 나타낸 표기법
  • 빅-오(O(n)): 최악일 때(worst case)의 연산 횟수를 나타낸 표기법

시간 복잡도 도출 기준

  1. 상수는 시간 복잡도 계산에서 제외
  2. 가장 많이 중첩된 반복문의 수행 횟수가 시간 복잡도의 기준

 

예제1) 연산횟수 = N

#include<iostream>
using namespace std;

int main()
{
int n=1000;
int cnt=1;

for(int i=0;i<n;i++){
    cout<<"연산 횟수: "<<cnt++<<endl;
	}
}

예제2) 연산횟수 = 3N

#include<iostream>
using namespace std;

int main()
{
int n=1000;
int cnt=1;

for(int i=0;i<n;i++){
    cout<<"연산 횟수: "<<cnt++<<endl;
	}
    
for(int i=0;i<n;i++){
    cout<<"연산 횟수: "<<cnt++<<endl;
	}
    
for(int i=0;i<n;i++){
    cout<<"연산 횟수: "<<cnt++<<endl;
	}
}

위의 두 예제의 연산 횟수는 3배 차이이나

시간 복잡도를 계산할 때, 상수를 무시하므로 두 코드의 시간 복잡도는 O(n)으로 같다.

 

예제3) 연산 횟수 = N^2

#include<iostream>
using namespace std;

int main()
{
int n=1000;
int cnt=1;

for(int i=0;i<n;i++){
	for(int j=0;j<n;j++){
    		cout<<"연산 횟수: "<<cnt++<<endl;
    }
    }
}

예제 3에서는 이중 for문이 사용되었다.

시간 복잡도는 가장 많이 중첩된 반복문을 기준으로 도출하므로 시간복잡도는 N^2이다.

 

'Algorithm' 카테고리의 다른 글

알고리즘 공부 GitHub  (0) 2024.02.14
23.05.30) 퀵 정렬  (0) 2023.06.26
C++ 시간 단축 구문  (0) 2023.05.01
배열, 리스트, 벡터, 구간합  (0) 2023.05.01