Algorithm

[자료구조 알고리즘] 빅오(Big-O)표기법

iOSDEv 2024. 3. 2. 16:16
⭐️빅오(Big-O)표기법⭐️

알고리즘의 성능을 수학적으로 표현해주는 표기법
알고리즘의 시간과 공간복잡도를 표현
실제 러닝타임을 표시하는것 보다
데이터나 사용자의 증가율에 따른 알고리즘 성능 예측‼️
상수와 같은 숫자는 모두 1

O(1) 
Constant Time Complexity
데이터 타입의 크기에 상관없이 언제나 일정한 시간이 걸리는 알고리즘을 뜻해요
사실상 가장 효율적이라고 생각이 들어요

 

https://www.youtube.com/watch?v=6Iq5iMCVsXA

 

데이터 크기가 n개의 크기와 상관없이 동일한 단계만 필요한 경우에 알고리즘이 상수 시간으로 실행된다~라고 말을 해요

배열의 크기가 100개 10000개 오억개라도 한 단계만 거치면 결과값이 나오기에 시간 복잡도를 그래프로 나타내면 아래쪽처럼

평평한 형태가 나와요!

 

한빛출판네트워크

 

아무리 데이터 크기가 커지더라도 알고리즘의 실행 시간이 변하지 않으므로 가장 효율적인 알고리즘입니다~

 

O(n)
Linear Time Complexity
데이터의 크기에 비례해서 처리 시간이 걸리는 알고리즘을 뜻해요

 

https://www.youtube.com/watch?v=6Iq5iMCVsXA

선형 시간 복잡도는 데이터 크기가 커지는 만큼 비례해서 늘어나는 알고리즘이며

아래와 같이 그래프가 나타나게 됩니다

 

한빛출판네트워크

 

 

O(n²)
Quardratic Time Complexity
선형 로그 시간 복잡도 다음으로 효율적인 시간 복잡도

 

 

Youtube 엔지니어 대한민국

 

데이터가 커질수록 시간복잡도도 부담스럽기 시작됨

한빛출판네트워크

나중에 갈수록 수직상승하게 되는 특성을 볼 수 있음

why?..

0 -> 1 -> 4 -> 9 -> 16 -> 25 -> 36 ->....식으로 올라가기 때문이다

 

 

O(nm)
위와 동일한 결과를 볼 수 있다

 

Youtube 엔지니어 대한민국

 

O(n³)
Polynomial / Cubic Time

 

Youtube 엔지니어 대한민국

O(2ⁿ)
Exponential Time
Ex) Fibonacci

 

 

Youtube 엔지니어 대한민국
Youtube 엔지니어 대한민국

이렇게 붙이면 피보나치 나선형이 만들어진다

 

Youtube 엔지니어 대한민국

0 -> 1 → 0 + 1 ->  1 + 1 → 2  + 1 -> 3 + 2 -> 5 + 3

 

Youtube 엔지니어 대한민국

 

Youtube 엔지니어 대한민국

 

Youtube 엔지니어 대한민국

 

 

데이터 증가량에따라 더 증가하는걸 알 수 있다

 

O(log n)
대표적인 예 - 이진검색
binary search

 

Youtube 엔지니어 대한민국

 

배열 반을 계속 나눠서 찾는 형식

값이 6이므로 5보다 작은 인덱스는 무시한체 5-9사이를 탐색한다

 

Youtube 엔지니어 대한민국

 

5-9사이의 인덱스는 7이므로 7보다 큰 인덱스는 무시하고 탐색한다

 

Youtube 엔지니어 대한민국


mid 값이 key값과 같다면 바로 return을하고 

본 인덱스에서 인덱스에서 조건에 맞게끔 좌우 인덱스를 확인한다

kodecocodes algorithm

 

 

Youtube 엔지니어 대한민국

 

 

 

Square root

 

Youtube 엔지니어 대한민국

 

 

Youtube 엔지니어 대한민국

 


 

Youtube 엔지니어 대한민국

 

 

 

Youtube 엔지니어 대한민국

⭐️참조 사이트 목록

 

 

⭐️영상 한 번 보세요 정말 강추 입니다⭐️

- 엔지니어 대한민국   

 

 

-한빛출판네트워크

 

[알고리즘] 시간 복잡도와 Big O 표기법

✅ Big O 표기법 알고리즘의 효율에서 가장 중요한 부분은 ‘n이 커질 때 알고리즘의 단계가 얼마만큼 증가하는가’이고, 이것을 잘 나타내는 빅 O 표기법을 사용합니다. ►[알고리즘 + 자료구조 =

m.hanbit.co.kr

 

https://github.com/kodecocodes/swift-algorithm-club/blob/master/Binary%20Search/BinarySearch.swift