5.1 복잡도

2025. 2. 5. 21:09·SW개발/면접을 위한 CS 전공지식 노트
반응형

5.1.1 시간 복잡도

  • 시간 복잡도(Time Complexity)는 알고리즘이 실행되는 데 걸리는 연산 횟수를 표현하는 방식
  • 보통 빅-오 표기법(Big-O Notation)을 사용하며, 최악의 경우(최악 시간 복잡도)를 기준으로 분석

빅-오 표기법(Big-O Notation)

표기법 의미 예시
O(1) 상수 시간 배열의 특정 원소 접근 (arr[i])
O(log N) 로그 시간 이진 탐색 (std::lower_bound)
O(N) 선형 시간 단순 순회 (std::find)
O(N log N) 로그 선형 시간 퀵 정렬 (std::sort)
O(N^2) 제곱 시간 이중 루프 탐색
O(2^N) 지수 시간 부분 집합 생성

시간 복잡도 예제 (C++ STL)

[벡터 원소 탐색]

#include <iostream>
#include <vector>
#include <algorithm> // std::find 사용

using namespace std;

int main() {
    vector<int> vec = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // 특정 원소 탐색 (O(N))
    int target = 7;
    auto it = find(vec.begin(), vec.end(), target);

    if (it != vec.end()) {
        cout << "원소 " << target << "을(를) 찾았습니다. 인덱스: " << distance(vec.begin(), it) << endl;
    } else {
        cout << "원소를 찾을 수 없습니다." << endl;
    }

    return 0;
}
  • std::find 함수는 순차 탐색(Linear Search)를 사용하므로 O(N)의 시간 복잡도를 가진다.

5.1.2 공간 복잡도

  • 공간 복잡도(Space Complexity)는 알고리즘이 사용하는 메모리 양을 의미
  • 시간 복잡도와 마찬가지로 빅-오 표기법(Big-O Notation)으로 표현

공간 복잡도 표기법

표기법 의미 예시
O(1) 상수 공간 변수 1~2개 사용
O(N) 선형 공간 크기 N짜리 배열 선언
O(N^2) 제곱 공간 N×N 크기의 2D 배열

공간 복잡도 예제 (C++ STL)

[O(N)의 공간 복잡도, 배열 할당]

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N = 1000000;
    
    // 크기 N인 벡터 생성 (O(N) 공간 사용)
    vector<int> arr(N);

    cout << "배열이 " << arr.size() << "개의 원소를 가지고 있습니다." << endl;

    return 0;
}
  • vector<int> arr(N);은 O(N)의 공간을 사용

5.1.3 자료 구조에서의 시간 복잡도

[STL 컨테이너별 기본 연산의 시간 복잡도]

자료구조 삽입 삭제 탐색 정렬
vector O(1) (끝 삽입) / O(N) (중간 삽입) O(N) O(N) O(N log N)
list O(1) (양 끝) O(1) (양 끝) / O(N) (중간 삭제) O(N) O(N log N)
deque O(1) (양 끝) O(1) (양 끝) O(N) O(N log N)
set O(log N) O(log N) O(log N) 자동 정렬
unordered_set O(1) (평균) / O(N) (최악) O(1) (평균) / O(N) (최악) O(1) (평균) / O(N) (최악) 자동 정렬 X
map O(log N) O(log N) O(log N) 자동 정렬
unordered_map O(1) (평균) / O(N) (최악) O(1) (평균) / O(N) (최악) O(1) (평균) / O(N) (최악) 자동 정렬 X
priority_queue O(log N) O(log N) O(1) (최댓값 접근) 자동 정렬

 

[set을 이용한 정렬된 삽입과 탐색]

#include <iostream>
#include <set>

using namespace std;

int main() {
    set<int> s;

    // 삽입 (자동 정렬, O(log N))
    s.insert(10);
    s.insert(5);
    s.insert(20);
    s.insert(15);

    // 탐색 (O(log N))
    if (s.find(10) != s.end()) {
        cout << "10이 존재합니다." << endl;
    }

    // 정렬된 상태로 출력
    for (int x : s) {
        cout << x << " ";
    }
    cout << endl;

    return 0;
}
 
 
10이 존재합니다.
5 10 15 20
  • set은 내부적으로 이진 탐색 트리(BST, Red-Black Tree)를 사용, O(log N) 시간 복잡도
반응형
저작자표시 비영리 변경금지 (새창열림)

'SW개발 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글

5.3 비선형 자료 구조 (Non-Linear Data Structures)  (1) 2025.02.05
5.2 선형 자료 구조 (Linear Data Structures)  (0) 2025.02.05
참고. 데이터베이스 관련 면접 질문 리스트  (1) 2025.01.24
4.7 조인의 원리  (1) 2025.01.22
4.6 조인의 종류  (1) 2025.01.22
'SW개발/면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
  • 5.3 비선형 자료 구조 (Non-Linear Data Structures)
  • 5.2 선형 자료 구조 (Linear Data Structures)
  • 참고. 데이터베이스 관련 면접 질문 리스트
  • 4.7 조인의 원리
코코도롱
코코도롱
    반응형
  • 코코도롱
    도롱이의 전자공학소
    코코도롱
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • AI (17)
        • 데이터 분석과 모델 학습 (4)
        • 모델별 정리 (8)
        • (PJT)음성 화자 분류 (4)
      • SW개발 (38)
        • C++ (9)
        • 면접을 위한 CS 전공지식 노트 (24)
        • Django+Vue.js (0)
        • 이런저런 개발이야기 (1)
        • 갑자기 C코테를 봐야할때 (2)
        • RPI5 프로젝트 (1)
        • 트러블슈팅 (1)
      • ESG (2)
        • 내가 쓰는 Assay (1)
        • 뉴스 스크랩 (1)
      • 반도체 (4)
        • 반도체 (3)
        • 슬기로운 학부생활 (1)
        • 회로 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MySQL
    전공 지식
    c언어 입출력
    c io
    보고서 수식
    파일입출력 #DataFrame불러오기
    홉바이홉통신
    요약본
    공백포함입력받기
    반도체 공학
    ios7계층
    데이터전처리 #데이터분석 #딥러닝 #머신러닝 #Pandas #Numpy #Python
    데이터분석 #머신러닝 #딥러닝 #데이터사이언스 #알고리즘 #데이터전처리
    ESG
    데이터분석 #데이터전처리 #결측치 #머신러닝 #딥러닝 #Pandas #DataFrame
    운영체제
    페이징 기법
    면접을 위한 CS 전공지식 노트
    면접을 위한 cs전공지식 노트
    멀티프로세스
    LAN
    메시지큐
    반도체 물성
    os구조
    입출력관리
    홉바이홉
    word 수식
    정리본
    반도체 소자 공학
    CS지식
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코코도롱
5.1 복잡도
상단으로

티스토리툴바