지금은 재발 관계에 대해 배우고 있습니다. 나는 그것들을 풀 수 있고 그들에 대한 경계를 파악할 수있다. 그러나 내가 정말로 확신 할 수없는 것은 특정 알고리즘에 대한 반복 관계를 생각해내는 방법이다. 여기에 내 책의 예는 다음과 같습니다정렬 알고리즘에 대한 반복 관계 작성
이// Sort array A[] between indices p and r inclusive.
SampleSort (A, p, r) {
// Base Case: use HeapSort
//
if (r - p < 12) {
HeapSort(A, p, r) ;
}
// Break the array into 1st quarter, 2nd quarter and second half
//
n = r - p + 1 ; // number of items in A[p..r] inclusive
q1 = p - 1 + n/4 ; // end of 1st quarter
q2 = q1 + n/4 ; // end of 2nd quarter
// Sort each of the 3 pieces
// using SampleSort recursively, Insertion-Sort and Heap-Sort
//
SampleSort (A, p, q1) ;
InsertionSort (A, q1 + 1, q2) ;
HeapSort (A, q2 + 1, r) ;
// Merge the 3 sorted arrays into 1 sorted array
//
Merge (A, p, q1, q2) ; // Merge 1st & 2nd quarter
Merge (A, p, q2, r) ; // Merge 1st & 2nd halves
return ;
}
그것은 또한 내가 삽입 정렬, 힙 정렬을 가정 Θ (N2)가, Θ가와 Θ (N) (N 로그 n)하는 병합 수 있다고 말한다. 여기까지 제가 지금까지 생각해 냈습니다 : 배열을 세 조각으로 나눕니다. 첫 번째 두 조각은 원래 데이터의 1/4이며 세 번째 조각 (1/2)은 데이터의 1/2입니다. 지금 당장 T (n) = 2T (n/4) + T (n/2)입니다. 여기에서 어디로 가는지 잘 모르겠습니다. 어떤 도움이라도 대단히 감사하겠습니다!
이러한 세 가지 종류 중 하나만 재귀 호출입니다. 적절한 재발을 한 후에는 마스터 정리를 적용하십시오. –