NICK dev
로그인
NICK dev
로그인
[JAVA] 시간 복잡도, 공간 복잡도 ?!
nick
·
2024년 3월 15일
팔로우
0
Java
공간 복잡도
시간 복잡도
0
JAVA
목록 보기
7/13
오늘 알아볼 내용은
1. 시간 복잡도, 공간 복잡도 정의
2. Big-O Notation
💡시간 복잡도
➡ 정의
알고리즘을 프로그램으로 실행해 완료하는 데까지 소요되는 시간
시간 복잡도 = 프로그램 컴파일 시간 +
실행 시간
컴파일 시간은 프로그램 특성과 큰 관련 없음 → 고려 안해도 된다
실행 시간도 컴퓨터에 따라 성능이 달라질 수 있기에 명령문의
실행 빈도수
를 계산해 추정
진짜 실행 시간으로 비교하고 싶다면
서로 다른 알고리즘을 동일한 hardware에서
실행시켜야 함
➡ 분석 방법
입력 크기 n에 대한 실행 시간의 증가율만
분석하는
점근적 분석(Asymptotic Analysis)
을 활용
증가율만 보기에 실행 빈도 함수의 상수항과 계수 무시하고
가장 큰 하나의 항에 대해서 차수 표기법(Order Notation)
으로 시간 복잡도를 표기
무시하는 이유
: 정확한 연산의 개수를 알고 싶은게 아니라
input n에 따른 증가 추세
가 궁금하기 때문에
n이 커질수록 상수항과 계수의 영향력은 미미
해진다
➡ 표기 종류
Big-O
notation
(하한)
최악의 경우
에도 g(n) 안에는 수행
Big-Omega
notation
(상한)
최소
g(n)의 수행 시간 필요
Big-Theta
notation
(정확)
상한과 하한이 같은 정확한 차수를 표기하기 위한 표기법
정확한 시간복잡도 계산이 가능할 때 사용 → 어려움 → 빅오사용
💡공간 복잡도
➡ 정의
프로그램 실행과 완료까지 얼마나 많은 공간(메모리)가 필요한지
총 필요 공간 = 고정 공간 + 가변 공간
고정 공간
입출력 횟수, 크기와 관계없는 공간들을 말함(코드 저장 공간, 단순 변수, 상수 등)
int, double, 크기가 정해진 배열
상수 → 성능에 큰 영향 X
가변 공간
필요에 따라 동적으로 할당, 해제되는 메모리 공간
특정 instance에 따라서 사이즈가 달라지는 변수들
성능에 큰 영향 O
통상적으로 시간 복잡도와 공간 복잡도는
반비례적인 경향
이 있음
최근은 하드웨어가 대용량에다가 가격도 싸졌기에 공간 복잡도보다는
시간 복잡도가 우선
➡ 표기 방법
시간 복잡도와 마찬가지로
Big-O 표기법
사용한다
💡Big-O Notation
➡ 정의
실행 빈도 함수의 상한을 나타내기 위한 표기법
최악의 경우
에도
g(n)의 수행 시간 안에
는 알고리즘이
수행이 완료
된다
일반적으로 최악의 경우를 고려한 해결책을 찾기에
Big-O
를 주로 사용한다
➡ 실행 시간 함수 (오름차순)
O
(
1
)
O(1)
O
(
1
)
O
(
l
o
g
N
)
O(log N)
O
(
l
o
g
N
)
O
(
N
)
O(N)
O
(
N
)
O
(
N
l
o
g
N
)
O(Nlog N)
O
(
N
l
o
g
N
)
O
(
N
2
)
O(N^2)
O
(
N
2
)
O
(
N
3
)
O(N^3)
O
(
N
3
)
O
(
2
N
)
O(2^N)
O
(
2
N
)
1번이 제일 빠르고 갈수록 점점 느려짐
nick
티스토리로 이전 : https://andantej99.tistory.com/
팔로우
이전 포스트
[JAVA] try-with-resources 써야 돼?
다음 포스트
[JAVA] ArrayList의 내부를 뜯어보자
0개의 댓글
댓글 작성