Я изучаю рекуррентные отношения на данный момент. Я могу решить их и выяснить границы на них, но я не уверен в том, как придумать рекуррентное отношение для конкретного алгоритма. Вот пример в моей книге:Запись рекуррентного отношения для алгоритма сортировки
// 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), Θ (п § п) и Q (п). Вот что я нашел до сих пор: Я разделяю массив на три части. Первые две части составляют 1/4 исходных данных, а третья часть (половина) составляет 1/2 от данных. Так что прямо сейчас у меня есть T (n) = 2T (n/4) + T (n/2). Не знаете, куда идти отсюда. Любая помощь будет принята с благодарностью!
Только один из этих трех видов является рекурсивным вызовом. Когда у вас будет правильный повтор, примените основную теорему. –