Two Types of Complexity Analysis
Algorithm Analysis
: 효율적인 알고리즘을 찾기 위한 접근법
-> time complexity & space complexity
problem Analysis
: 좀 더 본질적인 문제의 복잡성에 대한 분석
-> matrix multiplication의 경우 n^3이 되는 경우, n^2.81(스트라센) 아무튼 이런저런 방식이 있음
-> 계산 복잡도에 대한 분석을 해보자? (computatuinal complexity analysis)
Computational Complexity
Objective
Ω(f(n))에 대해 Θ(f(n))을 개발하는 방법?
-> 하지만 문제의 하한보다 낮은 알고리즘을 개발하는 것은 불가능!!
ex. sorting problem
- Exchange sort : Θ(n^2)
- Merge sort: Θ(n^2) (n lg n)
- sorting problem의 하한은 Ω (n lg n)
- 다행히 정렬 문제의 하한선을 건드리는 알고리즘을 찾음! -> 더 작은 lower bound는 어떻게 찾을 수 있을까?
Insertion Sort
Insertion Sort : 정리 된 부분과 아닌 부분으로 나눠서 정렬
Problem
내림차순으로 정리되지 않은 n개의 키 값들
Input
- 양의 정수 n
- 1부터 n까지 키 값들을 담고 있는 배열 S
Output
내림차순으로 정리된 배열 S
void insertionsort(int n, keytype S[]) {
index i, j;
keytype x;
for(i = 2; i <= n; i++){ //2번째부터 끝까지
x = S[i]; //지금 확인할 값
j = i - 1; //이미 다 정리된 값들 중 가장 큰 값?
while(j > 0 && S[j] > x) { //x보다 큰 값이 나올 때 까지 내려가기
S[j + 1] = s[j];
j--;
}
S[j + 1] = x;
}
}
Inserting Sort Algorithm Analysis
Worst case Time Complexity Analysis
모든 경우에서 i - 1번 하는 경우
Average case Time Complexity Analysis
아무튼 i개 중에 하나니까.. 1/i? 아무튼 저런 복잡도를 갖는다..~
Selection Sort
: 가장 작은걸 맨 앞에, 2번째 작은건 2번째 ..
Problem
내림차순으로 정리되지 않은 n개의 키 값들
Input
- 양의 정수 n
- 1부터 n까지 키 값들을 담고 있는 배열 S
Output
내림차순으로 정리된 배열 S
void selectionsort(int n, keytype S[]) {
index i, j, smallest;
for (i = 1; i <= n - 1; i++) { //1부터 끝나기 하나 전 까지
smallest = i; //현재 검사하는거랑 비교할거임
for(j = i + 1; j <= n; j++) { // 전부 다 돌아보면서 찾음
if(S[j] < S[smallest]) //더 작은걸 찾으면
smallest = j;
exchange S[i] and S[smallest]; //바꿔주기
}
}
}
Selection Sort Algorithm Analysis
Every case Time Complexity Analysis
근데 여러가지 방법을 해봤는데 결과적으로 비슷하더라
Lower Bounds for Algorithms that Remove at Most one inversion per comparison
아무튼 한 번 비교할 때 하나밖에 알 수 없다는거!
- [1, 2, 3, ..., n]을 나열하는 방법은 n! 개
- 만약 i < j 인데 ki > kj 라면 inversion
worst case
[n, n - 1, ... , 2, 1] 반대로 정렬된 정렬을 정렬하는 경우
-> 전부 살펴야하기 때문에 n(n-1)/2
Average case
P= [k1, k2,..., kn] //이건 정렬된거?
PT= [kn,..., k2, k1] //이건 정렬 안된거?
- 임의의 쌍(s, r)은 항상 P 또는 PT에 속한다. //아무래도 그렇지
- In other words, I(P) + I(PT) = ½ n(n-1) .
- 따라서 평균적으로 ¼ n(n-1)이 존재한다
그렇기 하네요 대략적으로 절반이다~라는건가?
강의 대충 들어서 잘 모르겠으니 조만간 다시 하도록 하죠
아마 내일쯤
'아무튼 공부중 > algorithm' 카테고리의 다른 글
[알고리즘]Heap sort 그리고 조금의 merge sort &Quick sort (0) | 2023.12.14 |
---|---|
[알고리즘] The Traveling Salesperson Problem(외판원 문제) (0) | 2023.12.13 |
[알고리즘] Branch and Bound Algorithm | 분기 한정법 (0) | 2023.12.11 |
[알고리즘] Monte Carlo Algorithm | Sum of Subsets Problem | Hamiltonian Circuits Problem (1) | 2023.12.06 |
[알고리즘] Backtracking | n Queens Problem (0) | 2023.12.03 |