Я хочу использовать процедуру Divide-and-Conquer для вычисления i-го величайшего элемента в строке целых чисел и анализировать асимптотическую сложность времени алгоритма.Найти i-й величайший элемент
Algorithm ith(A,low,high){
q=partition(A,low,high);
if (high-i+1==q) return A[q];
else if (high-i+1<q) ith(A,low,q-1);
else ith(A,q+1,high);
}
Правильно ли это? Если да, то как мы можем найти его временную сложность?
Сложность времени описывается следующим рекуррентным соотношением:
Т (п) = Т (NQ) + T (Q-1) + Θ (п)
Но как мы можем решить эту проблему рекуррентное отношение, не зная значения q?
Или существует алгоритм с меньшей временной сложностью, который вычисляет i-й наибольший элемент в строке целых чисел?
Что вы подразумеваете под «временной сложностью»? Среднее, худшее, что-то еще? Тогда можно определить правильное отношение повторения. То, что у вас есть для отношения повторения, в настоящее время не соответствует любой версии «временной сложности», которую вы интересуете. –