Найти рецидивовое отношение этого алгоритма?

StackOverflow https://stackoverflow.com/questions/2197813

  •  25-09-2019
  •  | 
  •  

Вопрос

Предполагая, что n = b-a + 1, мне нужно вывести рецидивовое отношение этого алгоритма:

void recurringalgorithm(int *a, int A, int B){
  if (A == B){
    for (int j=0;j<B;j++){
      cout<<a[j];  
    }
    cout<<endl;
    return;
  }
  for (int i=A;i<B;i++){
    dosomething(a[A],a[i]);
    recurringalgorithm(a,A+1,B);
    dosomething(a[A],a[i]);
  }
}

Помощь?

Это было полезно?

Решение

Предположим, что сложность вашего рекурсивного алгоритма h(A,B).

Из вашего кода вы можете разделить h в 2 случая:

h(A,B) = { complexity-of-if-branch          if A = B
         { complexity-of-rest-of-the-code   otherwise

«Сложность - если ветви» - тривиальна. Для «сложности - остаток кода», так как он включает в себя recurringalgorithm, вам нужно будет включить h опять таки.

Например, если функция определена как

function hh(A,B) {
    for (var i = A+1; i < B; ++ i)
        hh(i, B);
}

Тогда сложность будет

hh(A,B) = hh(A+1, B) + hh(A+2, B) + ... + hh(B-1, B)

Вы можете сравнить это с вашим кодом, чтобы обобщать.

(Кстати, сложность h(A,B) = O(B * (B-A)!))

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top