1
Я пытался решить мою университетскую проблему об уравнениях повторения и вычислительной сложности, но я не могу понять, как установить уравнение повторения.Рекуррентное уравнение - Рекурсия внутри цикла
static void comb(int[] a, int i, int max) {
if(i < 0) {
for(int h = 0; h < a.length; h++)
System.out.print((char)(’a’+a[h]));
System.out.print("\n");
return;
}
for(int v = max; v >= i; v--) {
a[i] = v;
comb(a, i-1, v-1);
}
}
static void comb(int[] a, int n) { // a.length <= n
comb(a, a.length-1, n - 1);
return;
}
Я попытался установить следующее уравнение
O(n) + c if i < 0
T (n, i, j) = {
(j-i) T(n, i-1, j-1) otherwise
Решая
T(n, i, j) = (j-i) T(n, i-1, j-1) =
(j-i) (j-1-i+1) T(n, i-2, j-2) =
(j-i)^k T(n, i-k, j-k)
На данный момент я застрял, и я не могу понять, как действовать.
Спасибо и извините за мой плохой английский.
Луиджи
Извините, в какой части вопроса я должен улучшить? – user4304554
Чтобы пройти мимо места, в которое вы застряли, является условие завершения i <0. Это означает, что ik <0. Поскольку i уменьшается по одному, это означает, что ik = -1 есть, когда T (n, i, j) = O (n) + c. Отсюда возникает вопрос о том, что k = i + 1 и T = O (n) + c заменить то, что находится в вашем уравнении. Не уверен, как это относится к коду, хотя – FrankM