[자료구조] 복잡도

2024. 10. 19. 11:49·💻 CS/자료구조

자료구조(Data Structure)는 효율적으로 데이터를 관리하고 수정, 삭제, 탐색, 저장할 수 있는 데이터 집합을 의미한다.

이러한 자료구조를 사용할 때 크게 두가지의 복잡도를 고려하며 사용하게 되는데, 바로 시간 복잡도와 공간 복잡도이다.

 

앞서 복잡도를 나타낼 때 사용하는 표기법인 빅오 표기법(O(n))이 있다. 빅오 표기법은 입력 범위 n이라는 것이 주어졌을 때 n을 기준으로 로직이 몇 번 반복되는지 나타내는 것을 의미한다. 표기하는 방법은 가장 영향을 많이 끼치는 항의 상수 인자를 빼고 나머지 항을 없애서 계산한다. 왜냐하면 증가 속도를 고려할 때 가장 영향을 많이 끼치는 항의 상수 인자를 제외하고 미미하기 때문이다.

 

 

시간복잡도(Time Complexity)

  • 알고리즘이 실행되는 데 걸리는 시간을 측정한 것이다. 입력 크기(n)에 따라 알고리즘이 수행해야 할 기본 연산의 횟수를 나타낸다.
  • 예를 들어, O(1), O(n), O(n^2)와 같은 표기법을 사용한다. 여기서 O(1)은 입력 크기에 상관없이 일정한 시간이 걸리는 경우를, O(n)은 입력 크기에 비례해 시간이 증가하는 경우를 의미한다.

공간복잡도(Space Complexity)

  • 알고리즘이 실행되는 동안 필요한 메모리 양을 측정한 것이다. 마찬가지로 입력 크기(n)에 따라 필요한 메모리 양이 어떻게 변하는지를 나타낸다.
  • 예를 들어, O(1)은 일정한 메모리를 사용하고, O(n)은 입력 크기에 비례해 메모리 사용량이 증가하는 경우를 의미한다.

다음은 자료구조에서의 시간 복잡도를 나타낸 테이블이다.

 

자료구조의 평균 시간 복잡도

자료구조 접근 (Access) 탐색 (Search) 삽입 (Insertion) 삭제 (Deletion)
배열 (Array) O(1) O(n) O(n) O(n)
연결 리스트 (Linked List) O(n) O(n) O(1) O(1)
스택 (Stack) O(1) O(n) O(1) O(1)
큐 (Queue) O(1) O(n) O(1) O(1)
해시 테이블 (Hash Table) O(1) O(1) O(1) O(1)
이진 탐색 트리 (Binary Search Tree) O(log n) O(log n) O(log n) O(log n)
AVL 트리 / 레드-블랙 트리 (AVL Tree / Red-Black Tree) O(log n) O(log n) O(log n) O(log n)
힙 (Heap) O(n) O(n) O(log n) O(log n)
트라이 (Trie) O(m) O(m) O(m) O(m)

 

자료구조의 최악의 시간 복잡도

자료구조 접근 (Access) 탐색 (Search) 삽입 (Insertion) 삭제 (Deletion)
배열 (Array) O(1) O(n) O(n) O(n)
연결 리스트 (Linked List) O(n) O(n) O(1) O(1)
스택 (Stack) O(n) O(n) O(1) O(1)
큐 (Queue) O(n) O(n) O(1) O(1)
해시 테이블 (Hash Table) O(n) O(n) O(n) O(n)
이진 탐색 트리 (Binary Search Tree) O(n) O(n) O(n) O(n)
AVL 트리 / 레드-블랙 트리 (AVL Tree / Red-Black Tree) O(log n) O(log n) O(log n) O(log n)
힙 (Heap) O(n) O(n) O(log n) O(log n)
트라이 (Trie) O(m) O(m) O(m) O(m)

 

자주 쓰는 자료구조의 시간 복잡도를 생각할 때 평균, 최악의 시간 복잡도를 고려하면서 사용한다.

'💻 CS > 자료구조' 카테고리의 다른 글

[자료구조] 비선형 자료 구조  (1) 2024.10.20
[자료구조] 선형 자료 구조  (1) 2024.10.19
'💻 CS/자료구조' 카테고리의 다른 글
  • [자료구조] 비선형 자료 구조
  • [자료구조] 선형 자료 구조
kkongdo
kkongdo
kkongdo 님의 블로그 입니다.
  • kkongdo
    숲을 바라보며 나무를 심는 아이
    kkongdo
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • 🌏 Web (0)
      • ☕ Java (5)
      • 🌱 Spring (9)
        • Spring Boot (7)
        • Spring Data JPA & QueryDSL (2)
      • 🗂️ Database (5)
      • 💻 CS (12)
        • 운영체제 (4)
        • 네트워크 (5)
        • 자료구조 (3)
      • 🗃️Git (1)
      • 🔍 Algorithm (0)
      • 📡 DevOps (0)
        • Docker (0)
      • 🔭 ETC (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    springbatch
    QueryDSL
    네트워크기기
    스케줄링
    DI
    JPA
    spring
    자료구조
    복잡도
    SpringMVC
    운영체제
    db
    SpringSecurity
    데이터베이스
    java
    조인
    네트워크
    CS
    @annotation
    OS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kkongdo
[자료구조] 복잡도
상단으로

티스토리툴바