일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- 자바
- 컴퓨터구조론 5판
- 개발자블로그
- 내일배움캠프
- 국비
- 항해
- 개인공부
- 컴퓨터개론
- 프로그래머스
- 개발자스터디
- MySQL
- Python
- 99일지
- 스파르타내일배움캠프TIL
- 스파르타코딩클럽
- 99클럽
- AWS
- 스파르타내일배움캠프
- 코딩테스트
- 부트캠프
- 백준
- 운영체제
- Flutter
- wil
- 스파르타내일배움캠프WIL
- 소프트웨어
- 중심사회
- java
- til
- Today
- Total
목록📖 이론/컴퓨터 알고리즘 (3)
컴공생의 발자취

분할 정복 알고리즘(Divide-and-Conquer) 합병정렬 MergeSort 퀵 정렬 QuickSort 선택 문제 Selection Problem 선택 문제(Selection Problem) : k번째 작은 수를 찾는 문제 입력에서 퀵 정렬에서와 같이 피봇을 선택하여 피봇보다 작은 부분과 큰 부분으로 분할한 후에 k번째 작은 수가 들어 있는 부분을 순환적으로 탐색한다. unsorted array : 최소 숫자를 k번 찾는다. -> 최악 시간복잡도 : O(kn) ** 단, 최소 숫자를 찾은 뒤에는 입력에서 최소 숫자를 제거한다. sorted array : 숫자들을 정렬한 후, k번째 숫자를 찾는다. -> 최악 시간복잡도 : O(nlogn) pseudo code Selection(A, left, rig..

분할 정복 알고리즘(Divide-and-Conquer) 합병정렬 MergeSort 퀵 정렬 QuickSort 선택 문제 Selection Problem 퀵 정렬(QuickSort) 피봇(pivot)이라 일컫는 배열의 원소(숫자)를 기준 피봇보다 작은 숫자들은 왼쪽, 큰 숫자들은 오른쪽으로 위치하도록 분할 분할된 부분문제들에 대해서도 위와 동일한 과정으로 재귀적으로 수행 개념 설명 ** 해당 설명에서 pivot은 무작위로 정해짐 ** pseudo code QuickSort(A, left, right) 입력 : 배열A[left] ~ A[right] 출력 : 정렬된 배열A[left] ~ A[right] if(left < right){ 피봇을 A[left] ~ A[right] 중에서 선택하고 피봇을 A[left..

분할 정복 알고리즘(Divide-and-Conquer) 합병정렬 MergeSort 퀵 정렬 QuickSort 선택 문제 Selection Problem 합병정렬(MergeSort) : 입력이 2개의 부분문제로 분할되고, 부분문제의 크기가 1/2로 감소하는 분할 n개의 숫자들을 n/2개의 부분문제로 분할(Divide) 각각의 부분문제들을 해결(Conquer) 재귀적으로 합병 정렬(Merge) 개념 설명 Pseudo code MergeSort(A, p, q) 입력 : A[p] ~ A[q] 출력 : 정렬된 A[p] ~ A[q] if(p < q){ // 배열의 원소의 수가 2개 이상이면 k = [(p+q)/2] // k : 반으로 나누기 위한 중간 원소의 인덱스(내림으로) MergeSort() // 앞부분 재귀..