🎯 목표 : 시간 복잡도의 개념 이해와 효율적인 시간 복잡도를 구현 할수 있어야 한다.
느린 순서 ↓
public int O1_algo(int[] arr, int index) {
return arr[index];
}
public void On_algo(int n) {
for(int i = 0; i < n; i++) {
// do.....
}
for(int i = 0; i < n; i++) {
// do.....
}
for(int i = 0; i < n; i++) {
// do.....
}
}
public void Osquared_algo(int n) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
// do.....
}
}
}
public class RecursiveFunction {
public static void main(String[] args) {
System.out.println("30 th fibonacci Tail : "+fibonacciTail(30,0,1));
System.out.println("fibonacci Tail : "+ countFibTail);
System.out.println("30 th fibonacci : "+fibonacci(30));
System.out.println("fibonacci : "+ countFib);
}
public static int fibonacci(int number) {
countFib++;
if(number <=1) return number;
else return fibonacci(number-2)+ fibonacci(number-1);
}
public static int fibonacciTail(int input, int before, int after) {
countFibTail++;
if(input <=1) return after;
else return fibonacciTail(input-1,after,before+after);
}
}
// 출력값
// 30 th fibonacci Tail : 832040
// fibonacci Tail : 30 // O(n)
// 30 th fibonacci : 832040
// fibonacci : 2692537 // O(2^n)
시간복잡도
add : O(1)
remove : O(n)
get : O(1)
Contains : O(n)
iterator.remove : O(n)
# 데이터 추가,삭제를 위해 임시 배열을 생성해 데이터를 복사
# 대량의 자료를 추가/삭제시 복사가 일어 나게 되어 성능 저하
# 데이터의 인덱스를 가지고 있어 데이터 검색시 빠름
시간복잡도
add : O(1)
remove : O(1)
get : O(n)
Contains : O(n)
iterator.remove : O(1)
# 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있다.
# 데이터 추가/삭제시 빠름
# 데이터 검색시 처음부터 노드를 순회하여 상대적으로 느리다
시간복잡도
add : O(1)
contains : O(1)
next : o(h/n) h는 테이블 용량
# 중복 허용 안됨(Key)
# 순서없이 저장
# null을 허용한다.
시간복잡도
add : O(1)
contains : O(1)
next : O(1)
# 속도는 hashSet에 비해 느리지만 좋은 성능을 보장한다.
# 등록한 순으로 정렬을 한다.
# null을 허용한다.
시간복잡도
add : O(log n)
contains : O(log n)
next : O(long n)
# 객체기준으로 정렬을 한다. 느리다.
# null을 허용하지 않는다.
시간복잡도
get : O(1)
containsKey : O(1)
next : O(h/n) h는 테이블 용량
# 순서에 상관없이 저장됨, Null을 허용한다.
시간복잡도
get : O(1)
containsKey : O(1)
next : O(1)
# 순서대로 등록한다. Null을 허용한다. thread-safe 보장하지 않는다.
시간복잡도
offer : O(1)
peek : O(1)
poll : O(1)
size : O(n)
# FIFO 방식 Queue
# 데이터/추가/삭제가 빠름
# size는 O(1)이 아니다.
# null을 허용하지 않는다.