перед этим это вопрос домашней работы, но у меня возникли трудности с пониманием рекуррентных отношений. Я пробовал интернет для примеров, и они очень расплывчаты для меня. Я понимаю, что рекуррентные отношения для рекурсивных алгоритмов не имеют заданного способа обработки каждого из них, но я теряюсь в том, как их понимать. Вот алгоритм, я должен работать с:Выбор Сортировка Рецидивирование Отношения
void selectionSort(int array[]) {
sort(array, 0);
}
void sort(int[] array, int i) {
if (i < array.length - 1)
{
int j = smallest(array, i); T(n)
int temp = array[i];
array[i] = array[j];
array[j] = temp;
sort(array, i + 1); T(n)
}
}
int smallest(int[] array, int j) T(n - k)
{
if (j == array.length - 1)
return array.length - 1;
int k = smallest(array, j + 1);
return array[j] < array[k] ? j : k;
}
Итак, насколько я понимаю, это то, что я иду с: Т (п) = Т (п - 1) + сп + с Т (n-1) представляет собой рекурсивную функцию сортировки, а добавленная cn представляет собой рекурсивную функцию наименьшей, которая должна уменьшаться по мере уменьшения n, поскольку она вызывается только количество раз, которое остается в массиве каждый раз. Константа, умноженная на n, представляет собой количество времени для запуска дополнительного кода в наименьшем количестве, а дополнительная константа - это количество времени для запуска дополнительного кода в сортировке. Это правильно? Я совсем ушел? Я не объясняю это правильно? Следующий шаг - создать дерево рекурсии из этого, но я не вижу это уравнение как форму T (n) = aT (n/b) + c, которая является формой, необходимой для дерева, если я понимаю это право , Также я не вижу, как мое отношение повторения будет доходить до n^2, если оно будет правильным. Это тоже мой первый пост, поэтому я приношу свои извинения, если я сделал что-то неправильное здесь. Спасибо за помощь!
Итак, мой ответ был почти там с T (n) = T (n-1) + cn + c? Хорошо знать, что я понимаю это. Правильнее ли было бы писать O (n) или Θ (n), поскольку они были бы взаимозаменяемыми в этом случае? или они? Эта сложность для меня сложна. Также я ненавижу быть вредителем, но как повторение становится n^2 от этого? Похоже, что это было бы между (n
Итак, один из способов увидеть, что сумма O (1) + ... + O (n-1) + O (n) становится O (n^2), состоит в том, чтобы вспомнить, что 1 + 2 + 3 + ... + n = n * (n + 1)/2 = (n^2 + n)/2 = O (n^2). Отсюда можно сделать вывод, что O (1) + ... + O (n) также суммируется с O (n^2). Да, в этом случае T (n) = Theta (n^2), откуда следует T (n) = O (n^2). По этой причине временная сложность является квадратичной; он не находится между n и n^2, по крайней мере, не в том смысле, что он n^a при 1 blazs
Спасибо за объяснение! Итак, дерево рекурсии ... должно иметь только одну ветвь на каждом уровне тоже правильно? Поскольку эти функции не ветвятся в какой-либо точке –