알고리듬 정렬 알고리듬(2) 퀵 정렬 (중요) 평균 : O(n log n), 최악 : O(n2), 메모리 : O(log n), 안정성 : X 일반/범용적으로 가장 빠름, 분할 정복 알고리듬 어떤 값(pivot)을 기준으로 목록을 하위 목록 2개로 나눔 목록을 나누는 기준은 pivot 보다 작다/크다 위 과정을 재귀적으로 반복 재귀 단계마다 새로운 pivot 을 선정 로무토(Lomuto) 분할법 왼쪽 -> 오른쪽 방향으로... 알고리듬알고리듬 (CLRS) - 7 최악의 경우 Θ(n2). 부분열 A[p..r]에 대한 PARTITION의 실행 시간은 Θ(n). 이때 n = r - p + 1. 대충 바닥/천장 함수 무시하고 보면 마스터 정리에 의해 T(n) = Θ(n lg n)인 걸 알 수 있음. 대충 상수 constant 비율로 깊이가 Θ(lg n)이고, 각 단계의 비용이 O(n)인 재귀 트리를 분할하면 실행 시간 O(n lg n)임. 직관적으로 보면 ... 알고리듬알고리듬 (CLRS) - 6 최대 힙 max-heap의 최대 힙 속성 max-heap property은 루트가 아닌 모든 노드 i에 대해서 힙의 기본적인 연산들은 최대 힙의 높이와 비례하므로 O(lg n) 걸림. MAX-HEAPIFY 함수, O(lg n). MAX-HEAP-INSERT, HEAP-EXTRACT-MAX, HEAP-INCREASE-KEY, HEAP-MAXIMUM 함수, O(lg n). MAX-HEAPIFY는... 알고리듬알고리듬 재귀함수, 주먹구구식 알고리듬, P, NP 각 단계의 변수 상태 자동 저장 (함수의 스택 프레임) 꼬리 호출 (tail call) 스택 프레임 : 함수에서 사용 중인 변수 값 유지, 타 함수 호출 후 반환시 스택에 저장된 값을 되돌려 사용 꼬리 호출의 경우 타 함수의 반환 값으로 더 이상의 연산이 없다 이러한 경우 스택 프레임을 만들지 않은 꼬리 호출 최적화를 하기도 한다 아직 자바 VM(virtual Machine)은 꼬리 호출 최... 알고리듬알고리듬 알고리듬 (CLRS) - 15 동적 프로그래밍은 이런 하위 문제 하나를 해결하면, 이걸 도표에 기록해놓고, 나중에 또 필요할 때 연산할 필요 없이 기록된 도표만 참고해서 값을 바로 받아올 수 있음. 이 공식에 따르면 최적 해는 두 개의 하위 문제가 아니라 하나의 하위 문제에 대한 식이 됨. MEMOIZED-CUT-ROD(p, n) MEMOIZED-CUT-ROD-AUX(p, n, r) 하위 문제를 순서대로 처리함: 크기가 ... 알고리듬동적프로그래밍동적프로그래밍
정렬 알고리듬(2) 퀵 정렬 (중요) 평균 : O(n log n), 최악 : O(n2), 메모리 : O(log n), 안정성 : X 일반/범용적으로 가장 빠름, 분할 정복 알고리듬 어떤 값(pivot)을 기준으로 목록을 하위 목록 2개로 나눔 목록을 나누는 기준은 pivot 보다 작다/크다 위 과정을 재귀적으로 반복 재귀 단계마다 새로운 pivot 을 선정 로무토(Lomuto) 분할법 왼쪽 -> 오른쪽 방향으로... 알고리듬알고리듬 (CLRS) - 7 최악의 경우 Θ(n2). 부분열 A[p..r]에 대한 PARTITION의 실행 시간은 Θ(n). 이때 n = r - p + 1. 대충 바닥/천장 함수 무시하고 보면 마스터 정리에 의해 T(n) = Θ(n lg n)인 걸 알 수 있음. 대충 상수 constant 비율로 깊이가 Θ(lg n)이고, 각 단계의 비용이 O(n)인 재귀 트리를 분할하면 실행 시간 O(n lg n)임. 직관적으로 보면 ... 알고리듬알고리듬 (CLRS) - 6 최대 힙 max-heap의 최대 힙 속성 max-heap property은 루트가 아닌 모든 노드 i에 대해서 힙의 기본적인 연산들은 최대 힙의 높이와 비례하므로 O(lg n) 걸림. MAX-HEAPIFY 함수, O(lg n). MAX-HEAP-INSERT, HEAP-EXTRACT-MAX, HEAP-INCREASE-KEY, HEAP-MAXIMUM 함수, O(lg n). MAX-HEAPIFY는... 알고리듬알고리듬 재귀함수, 주먹구구식 알고리듬, P, NP 각 단계의 변수 상태 자동 저장 (함수의 스택 프레임) 꼬리 호출 (tail call) 스택 프레임 : 함수에서 사용 중인 변수 값 유지, 타 함수 호출 후 반환시 스택에 저장된 값을 되돌려 사용 꼬리 호출의 경우 타 함수의 반환 값으로 더 이상의 연산이 없다 이러한 경우 스택 프레임을 만들지 않은 꼬리 호출 최적화를 하기도 한다 아직 자바 VM(virtual Machine)은 꼬리 호출 최... 알고리듬알고리듬 알고리듬 (CLRS) - 15 동적 프로그래밍은 이런 하위 문제 하나를 해결하면, 이걸 도표에 기록해놓고, 나중에 또 필요할 때 연산할 필요 없이 기록된 도표만 참고해서 값을 바로 받아올 수 있음. 이 공식에 따르면 최적 해는 두 개의 하위 문제가 아니라 하나의 하위 문제에 대한 식이 됨. MEMOIZED-CUT-ROD(p, n) MEMOIZED-CUT-ROD-AUX(p, n, r) 하위 문제를 순서대로 처리함: 크기가 ... 알고리듬동적프로그래밍동적프로그래밍