Notice
Recent Posts
Recent Comments
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- DataBinding
- Higher-Order
- 알고리즘
- 자바
- kotiln
- 안드로이드#코틀린#디자인패턴#싱글턴패턴#개발#앱개발
- 등산로조성
- tomtoc
- 삼성청년sw아카데미
- 삼성파우치
- 삼성역량테스트
- lateinit
- 비트마스킹
- 백준
- 싸피
- 탐탁노트북파우치
- 아키텍처패턴
- 탐탁삼성파우치
- #충무로맛집#골목식당#스테이크#
- 코딩테스트
- Kotlin
- 안드로이드
- Java
- ssafy서울
- 코틀린
- nullalble
- MVVM
- bitmasking
- 투포인터
- Android
Archives
공상하는 개발자
[알고리즘/파이썬] 시간 복잡도, 공간 복잡도 이해하기 본문
반응형
알고리즘은 무엇인가?
- 알고리즘은 어떤 목적을 달성하거나 결과물을 만들어 내기 위해 거쳐야 하는 일련의 과정들을 의미한다.
- 시간 복잡도를 분석하는 것은 input n에 대하여 알고리즘이 문제를 해결하는 데에 얼마나 오랜 시간이 걸리는지 분석하는 것입니다.
빅오 표기법이란?
2 ==> O(1)
2n+3 ==> O(n)
3n^2 ==> O(n^2)
◆ 대표적인 시간 복잡도들을 정의해봅시다.
- O(1) - 상수 시간 : 입력값 n이 주어졌을 때, 알고리즘이 문제를 해결하는데 오직 한단계만 거칩니다.
- O(log n) - 로그 시간 : 입력값 n이 주어졌을 때, 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듭니다.
- O(n) – 직선적 시간 : 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가집니다.
- O(n^2) – 2차 시간 : 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱입니다.
- O(C^n) – 지수 시간 : 문제를 해결하기 위한 단계의 수는 주어진 상수값 C 의 n 제곱입니다.
위 정의를 가지고 예를 들어봅시다.
var n = 12 //입력값이 12일 때
O(1) = 1 //시간복잡도 = 1
O(log n) = 3.xxx //시간복잡도 = 3
O(n) = 12 //시간복잡도 = 12
O(n^2) = 144 //시간복잡도 = 144
O(2^12) = 4096 //시간복잡도 = 4096
시간복잡도 계산법
※시간 복잡도가 적은 알고리즘이 좋은 알고리즘입니다. 평균적인 경우가 가장 이상적으로 보이겠지만 알고리즘이 복잡해질수록 평균적인 경우는 구하기가 매우 어려워집니다. 그러므로 최악의 경우로 알고리즘의 성능을 파악합니다.
공간복잡도 계산법
공간 복잡도 계산은 간단합니다. 메모리를 얼마나 사용하는지 계산하면 됩니다.
예를 들어 크기가 n인 배열을 입력했는데 알고리즘이 내부에서 n x n의 이차원 배열을 생성한다면 이 알고리즘의 공간 복잡도는 $n^2$이 됩니다.
공간 복잡도는 보통 시간 복잡도에 밀려 중요하게 생각하지 않는 경우가 많은데 빅데이터 처리를 할 경우 공간 복잡도가 위와 같이 제곱으로 뛰게 되면 프로그램이 메모리에 한 번에 올라가지 않아 프로그램을 실행할 수 없는 문제가 발생합니다.
그래서 빅데이터 처리시 데이터를 나눠서 처리하고 다시 합치는 방법을 사용하게 됩니다.
알고리즘 작성시 공간 복잡도를 아예 생각하지 않게 되면 문제가 발생할 수도 있으므로 공간 복잡도도 신경 써서 작성하는 게 좋습니다.
출처
https://joshuajangblog.wordpress.com/2016/09/21/time_complexity_big_o_in_easy_explanation/
반응형
'개발 > 알고리즘' 카테고리의 다른 글
[알고리즘/JAVA] SWEA 1949 등산로 조성 (BFS,DFS) (0) | 2020.05.03 |
---|---|
[알고리즘/자바] 다익스트라 알고리즘 (Dijkstra Algorithm) (1) | 2020.04.26 |
[코딩테스트 후기] 2020 라인 코딩테스트 후기(문제 해설X,찐 후기) (0) | 2020.04.06 |
[알고리즘/자바] 조합, 순열, 중복조합, 중복순열 (0) | 2020.03.14 |
[알고리즘] 알고리즘 바보가 알려주는 알고리즘 (꿀)팁 (0) | 2020.02.23 |
Comments