Frinee의 코드저장소

자료구조와 알고리즘의 이해

by Frinee
이 글은 윤성우 저 - "윤성우의 열혈 자료구조"를 공부하고 정리하여 작성하였습니다.

 

1. 자료구조에 대한 기본적인 이해

  • 자료구조: “데이터를 표현하고 저장하는 방법”
  • 알고리즘: “자료구조를 대상으로 하는 문제의 해결 방법”
  • 자료구조의 분류

 

 

2. 알고리즘의 성능분석 방법

2.1. 시간복잡도와 공간 복잡도

  • 시간 복잡도(time complexity) : 속도에 해당하는 알고리즘 수행시간 분석결과
  • 공간 복잡도(space complexity) : 메모리 사용량에 대한 분석결과
  • 일반적으로 알고리즘을 평가할 땐 시간 복잡도에 초점을 맞춤

2.2. 순차 탐색 알고리즘과 시간 복잡도 분석

n개의 원소를 갖고 있는 배열 내에서 타겟 값을 찾는 경우

  • 최선의 경우: 바로 찾을 경우 1
  • 최악의 경우: 모든 원소를 다 탐색해야 할 경우 n
  • 알고리즘의 평가는 “최악의 경우”를 주로 염두하여 평가함

2.3. 이진 탐색(Binary Search) 알고리즘의 소개

  • 전제 조건: 배열에 저장된 데이터는 정렬되어 있어야 함
  • 이진 탐색 알고리즘 과정
const array = [1,2,3,7,9,12,21,23,27]
// 3이 어디있는지를 찾는 과정

// 1. 배열의 시작 인덱스와 끝을 지정함
const [start, end] = [0, 8]

// 4. start <= end 일 때까지 1~3을 반복하고 arr[middle] == 3이면 종료
while(start <= end){
    // 2. 해당 값을 합하여 그 결과를 2로 나눔
    let middle = Math.floor((start + end) / 2) // 4

    // 3. 얻은 결과 4를 인덱스로 하여 arr[4]에 저장된 값이 3인지 확인
    if (arr[middle] > 3) {
        end = middle - 1 // 3
    } else if(arr[middle] < 3) {
        start = middle + 1
    } else if(arr[middle] == 3) {
        console.log(middle)
        break
    }
}
  • 이진 탐색 알고리즘은 탐색의 대상을 반복해서 반씩 떨궈내는 알고리즘이기 때문에 성능이 순차 탐색 알고리즘보다 훨씬 좋음
  • 이진 탐색 알고리즘 시간 복잡도(최악) : $T(n) = log_2n$

2.4. 대표적인 빅-오(Big-O)

  • 빅-오(Big-O): 시간복잡도 함수 T(n)에서 가장 영향력이 큰 부분만을 표시하는 기법
(크기순) 설명
O(1) 상수형 빅-오, 데이터 수와 상관없이 연산횟수가 고정인 유형의 알고리즘
O($logn$) 로그형 빅-오, 데이터 수 증가율에 비해 연산횟수 증가율이 훨씬 낮은 알고리즘
가장 바람직한 유형
O($n$) 선형 빅-오, 데이터 수와 연산횟수가 비례함.
O($nlogn$) 선형로그형 빅-오
O($n^2$) 데이터의 제곱에 해당하는 연산횟수, 주로 중첩 반복문
O($n^3$) 데이터의 세제곱에 해당하는 연산횟수, 삼중 중첩 반복문
O($2^n$) 지수형 빅-오

 

자료

  • 윤성우의 열혈 자료구조 (윤성우 저, 2023.10)

 

'[컴퓨터 과학자 스터디] > 자료구조' 카테고리의 다른 글

스택(stack)  (0) 2024.11.21
연결 리스트(Linked List) 3  (0) 2024.11.20
연결 리스트(Linked List) 2  (0) 2024.11.18
연결 리스트(Linked List) 1  (0) 2024.11.18
재귀(Recursion)  (0) 2024.11.14

블로그의 정보

프리니의 코드저장소

Frinee

활동하기