일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Sentiment Analysis
- 명제
- relationaldatabaseschema
- Contradiction
- ermodel
- 십진법
- Gate
- full adder
- Decimal notation
- 모두의네트워크요약
- GPT-1
- 명제 동치
- statement equivalence
- CNF
- 모두의네트워크
- 진리표
- Circuit
- 항진명제
- dnf
- Tautology
- Digital Logic Circuits
- half adder
- truth table
- Logical statement
- cnn
- 모두의네트워크정리
- 모순명제
- 써킷
- 이진법 십진법 변환
- Binary notation
- Today
- Total
NLP Learner in Switzerland
[C] Running time and Asymptotic complexity ::: 시간복잡도(정확한 수행시간 및 점근적 표기) 본문
[C] Running time and Asymptotic complexity ::: 시간복잡도(정확한 수행시간 및 점근적 표기)
초코빵 2021. 4. 4. 10:00
까다로운 부분 알아가기
[1] C코드는 Pseudocode에 주어진 그대로 수행을 하면 되기 때문에 설명할 것이 없다.
[2] 문제에서 Exact running time T(n)을 구하라고 하면 cost와 수행횟수를 나타내는 표를 그린다. 각 코드 한줄마다 cost는 c1,c2,c3...식으로 달아주고, 수행횟수를 계산해서 넣어준다. 그 후 cost와 수행횟수를 코드 한줄마다 곱해서 전부 더해준다.
[3] Asymptotic complexity는 점근복잡도이기 때문에 최고차항을 나타내면 된다.
답안 및 출력결과
a) 내림차순으로 정렬하면서 가장 큰 원소부터 k번째 가장 큰 원소까지의 합계를 반환한다.
b)
#include <stdio.h>
int whatIDo(int A[],int n, int k){
int sum=0;
int i,j,maxi,swp;
for(i=0;i<k;i++){
maxi=i;
for(j=i+1;j<n;j++){
if(A[j]>A[maxi]){
maxi=j;
}
}
sum=sum+A[maxi];
swp=A[i];
A[i]=A[maxi];
A[maxi]=swp;
}
return sum;
}
int main(){
int n;
printf("How many integers? ");
scanf("%d",&n);
int A[n],i;
printf("Input integers: ");
for(i=0;i<n;i++){
scanf("%d",&A[i]);
}
int k;
printf("Sum up to: ");
scanf("%d",&k);
printf("%d",whatIDo(A,n,k));
return 0;
}
c)
d)
Best case : 전부 이미 내림차순 정렬되어 있어서 if 조건문이 한번도 수행이 되지 않으며 1번째 원소까지만 합계를 구하는 경우이다. 즉, 위의 하늘색 동그라미 α(알파)=0, k=1인 경우이다. 이를 T(n)에 대입해보면,
따라서, Best case의 Asymptotic complexity는
Worst case : 전부 오름차순 정렬되어 있어서 if 조건문이 최대로 수행이 되어야 하며 마지막 원소까지의 합계를 구하는 경우이다. 즉, α(알파)=1, k=n인 경우이다. 이를 T(n)에 대입해보면,
따라서, Worst case의 Asymptotic complexity는
e) 위의 Best case처럼 k=1이면, linear complexity를 가진다. 하지만 k가 n에 가까워질수록 k~n quadratic complexity를 가지게 된다. 즉, k값이 클수록 cost가 커진다.
f)
1. Empty array인 경우, 즉, n=0, A=[ ].
2. k=0인 경우, for loop자체를 들어가지 못하고 끝난다.
3. k>n인 경우, 수행은 되지만 이상한 결과값을 반환한다.
'Algorithm in C > Exercise' 카테고리의 다른 글
[C] Recurrence Mathematical Induction ::: 점화식 귀납법으로 풀기 (0) | 2021.04.06 |
---|---|
[C] Asymptotic tight bound ::: 점근적 하한 계산하기 (0) | 2021.04.05 |
[C] Pascal Triangle ::: 파스칼 삼각형 출력하기 (0) | 2021.04.03 |
[C] Iteration and Recursion ::: 문자열에서 첫번째 대문자 찾아 인덱스를 반환하기 (0) | 2021.04.02 |
[C] Multiple Recursion ::: 재귀호출이 2번 이상 일어나는 경우 (0) | 2021.04.01 |