알고리즘과 복잡도

Myeongsu Moon·2025년 2월 10일

제로베이스

목록 보기
85/95
post-thumbnail

자료구조와 알고리즘

자료구조(Data structure)

  • 자료 값의 모임, 자료 간의 관계, 자료에 적용할 수 있는 함수나 명령
  • 만능인 자료구조는 없으며, 상황에 맞는 자료 구조를 사용해야 함
  • 자료: 현실 세계로부터 수집한 사실이나 개념의 값 또는 이들의 집합
    -> 정보: 자료를 특정 용도로 사용하기 위해 처리/가공한 것

추상자료형(Abstract data type)

  • 추상자료형은 자료구조와 유사하지만, 구체적인 구현 방법은 정의되어 있지 않음
  • 자료구조를 구현할 때에는 자료구조 자체를 자세히 알아야 하지만, 자료구조를 활용하기 위해서는 추상자료형만 알아도 됨
  • OOP 관점에서 보면 추상자료형은 추상 클래스 역할을 함

자료구조의 분류

  • 선형 자료구조(Linear data structure)
    -> 배열 (Array)
    -> 리스트 (List)
    -> 스택 (Stack)
    -> 큐 (Queue)
    -> 해시 셋 (Hash set)
    -> 해시 테이블 (Hash table)

  • 비선형 자료구조(Nonlinear data structure)
    -> 트리 (Tree)
    -> 그래프 (Graph)
    -> 힙 (Heap, Priority queue)
    -> 트라이 (Trie: Retrieval tree)

자료구조의 필요성

  • 필요한 자료에 효율적으로 빠르게 접근할 수 있게 함
  • 저장장치를 효율적으로 사용할 수 있게 함
  • 자료구조 별로 적절한 알고리즘을 기계적으로 적용할 수 있음
  • 동료들과 협업하는 데 큰 도움이 됨

알고리즘(Algorithm)

  • 어떤 문제 해결을 위한 절차나 방법
  • 조건
    -> 입력 (Input)
    -> 출력 (Output)
    -> 명확성 (Definiteness)
    -> 유한성 (Finiteness)
    -> 효과성 (Effectiveness)

알고리즘의 분류

  • 정렬 (Sorting)
  • 이진 탐색 (Binary search)
  • 투 포인터 (Two pointers)
  • 탐욕법 (Greedy)
  • 분할 정복 (Divide & conquer)
  • 동적계획법 (Dynamic programming)
  • 백트래킹 (Backtracking)
  • 최단 경로 (Minimum distance path)
  • 최소 신장 트리 (Minimum spanning tree)

알고리즘의 복잡도

복잡도(Complexity)

  • 알고리즘의 성능을 나타내는 척도
  • 시간 복잡도 (Time complexity)
    -> 알고리즘을 동작하는 데에 필요한 연산의 횟수
  • 공간 복잡도 (Space complexity)
    -> 알고리즘의 동작에 필요한 메모리의 크기
  • 일반적으로 시간 복잡도와 공간 복잡도는 trade-off 관계가 있음

시간 복잡도(Time complexity)

  • 계산 복잡도 (Computational complexity) 라고도 부르며, 알고리즘의 동작에 필요한 연산의 횟수
    -> 연산은 기초 연산(elementary operation)을 의미
  • 시간 복잡도가 낮을 수록 알고리즘의 성능이 좋음

공간 복잡도(Space complexity)

  • 알고리즘의 동작에 필요한 메모리(RAM)의 크기
  • 일반적으로 알고리즘이 동작하기 위해 필요한 메머리의 최대치(Peak memory)를 공간 복잡도라고 함

복잡도의 점진적 표기법

복잡도의 비교

  • 절대적으로 성능이 더 좋은 알고리즘이 있을까?
  • 복잡도를 비교할 때 단위는 어떻게 정할 것인가?
  • 알고리즘 복잡도 비교의 어려운 점
    -> 시간 복잡도 vs. 공간 복잡도 trade-off
    -> 자료의 크기에 따른 복잡도의 차이
    -> 자료의 내용에 따른 복잡도의 차이

복잡도의 분류

  • 알고리즘 동작 상황에 따라 구분: 최악/최선/평균적인 경우
  • 일반적으로 최악의 경우에 대해 알고리즘 복잡도 정의

최악의 경우 vs. 최선의 경우

점진적 표기법

  • 알고리즘에 입력되는 자료의 개수가 충분히 많다고 가정
  • 성능 평가에 공평한 비교를 하기 위해 사용

빅오 표기법(Big-O Notation)

  • 충분히 큰 N에서 가장 큰 영향력을 주는 항을 기준으로 표기법 결정

이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다

0개의 댓글