42SEOUL

[push_swap]

daykim 2022. 7. 3. 16:29

복잡도 (Complexity)

알고리즘 성능 분석을 위한 방법

시간 복잡도와 공간 복잡도가 있다.

시간 복잡도 (Time Complexity)

알고리즘을 실행할 때, 실행된 명령문의 실행 빈도수 (연산의 횟수)
-> 실행 시간으로 할 경우 OS, IDE, 플랫폼에서 동일한 결과가 나오지 않는다.

  • Best case : 최소 리소스(시간 복잡도) 사용량
  • Worst case : 최악 리소스(시간 복잡도) 사용량
  • Average case : 평균 리소스(시간 복잡도) 사용량

공간 복잡도 (Space Complexity)

알고리즘이 완전히 실행될 때까지 필요한 저장 공간

 

- 시간 복잡도와 공간 복잡도는 반비례하는 경향이 있어 알고리즘의 성능을 판단할 때는 시간 복잡도 위주로 판단한다.

 

빅오 표기법 (Big-O notation)

임의의 입력에 대한 복잡도 함수

시간복잡도에서는 특정 크기 입력(n)을 기준으로 실행하는 연산 횟수의 최고 차항을 O(최고 차항)으로 표기하는 방법

ex) n^2 + n => O(n^2)

O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n)

 

Big-O 표기법으로 나타낸 정렬 알고리즘 복잡도

정렬 알고리즘 시간 복잡도
평균(Average) 최선(Best) 최악(Worst)
Bubble Sort O(n^2) O(n^2) O(n^2)
Selection Sort O(n^2) O(n^2) O(n^2)
Insertion Sort O(n^2) O(n) O(n^2)
Merge Sort O(nlogn) O(nlogn) O(nlogn)
Quick Sort O(nlogn) O(nlogn) O(n^2)
Heap Sort O(nlogn) O(nlogn) O(nlogn)
Shell Sort O(n^(1.25)) O(n^(1.25)) O(n^(1.25))
Radix Sort O(dn)
d : 기수의 크기
O(dn) O(dn)

 

Quick sort

swap연산의 횟수가 일정하지 않다. 최악의 경우 n^2이 나오는 것도 이때문이다.

다만 적절한 pivot을 선택하면 최대 swap 횟수가 n/2가 된다.

여기서 가장 적절한 pivot은 한 가운데에 있는 값

해당 과제에선 미리 정렬을해 인덱싱을 해둔 후 사용해도 된다고 했다. 제일 중간 값을 가지고 할 수 있다.

 

그리디 알고리즘 (Greedy Algorithm)

각 단계마다 당장 눈 앞에 보이는 최적의 상황을 선택해 결과를 도출하는 방법

 

C main함수에서 argc의 최대값

argc는 int형이므로 INT_MAX가 최대일 것이고

sysconf()에 maximum argument count가 설정되어있다고 한다

OS마다 ARG_MAX 값은 다르다고 한다.

 

참고

'42SEOUL' 카테고리의 다른 글

[minitalk] 개념정리  (0) 2022.06.26
[born2beroot] 서브젝트 설정  (0) 2022.06.17
[born2beroot] Virtual Box 세팅하기  (0) 2022.06.04
[born2beroot] 개념 정리  (0) 2022.05.22
[ft_printf] printf()  (0) 2022.04.22