2017-10-04 8 views

Répondre

0

Prenez le « travail utile » à chaque niveau de récursivité être une fonction f(n):

enter image description here

Observons ce qui se passe quand nous substituons à plusieurs reprises ce retour sur lui-même.


  1. T(n) termes:

enter image description here spot le modèle?

à la profondeur de récursivité m:

  • Il y a enter image description here appels récursifs à T
  • Le premier terme de chaque paramètre pour T est enter image description here
  • Les gammes second terme de enter image description here à enter image description here, dans les étapes de enter image description here

Ainsi, la somme de tous les T -termes à chaque niveau est donné par:

enter image description here


  1. f(n) termes:

enter image description here

Regardez familier?

Les f(n) termes sont exactement un niveau de récursivité derrière les termes T(n). Par conséquent adapter l'expression précédente, nous arrivons à la somme suivante:

enter image description here

noter toutefois que nous commençons seulement unf -TERM, cette somme a un cas limite invalide. Cependant, ceci est simple à rectifier - le résultat du cas spécial pour m = 1 est simplement f(n).


La combinaison de ce qui précède, et en additionnant les f termes pour chaque niveau de récursivité, nous arrivons à la (presque) expression finale pour T(n):

enter image description here


Nous avons besoin prochain pour trouver quand la première sommation pour T -terms se termine. Supposons que c'est quand n ≤ c.

Le dernier appel à mettre fin a intuitivement le plus grand argument-à-dire l'appel à:

enter image description here

Par conséquent, l'expression finale est donnée par:

enter image description here


Retour au problème original, quelle est f(n)?

Vous n'avez pas indiqué ce que c'est, donc je ne peux que supposer que la quantité de travail effectué par appel est ϴ(n) (proportionnelle à la longueur du tableau). Ainsi:

enter image description here

Votre hypothèse était correcte.


Notez que même si nous avions quelque chose de plus général comme

enter image description here

a est une constante pas égale à 1, nous aurions encore ont ϴ(n log n) à la suite, étant donné que les termes enter image description here dans l'équation ci-dessus annulent:

enter image description here

+0

J'ai finalement compris. Merci! Que faire si la quantité de travail effectuée est log (n), au lieu de n (comme chercher dans un tableau ordonné)? Je suppose que la complexité tombe à O (n). Comment ajuster la partie finale de la preuve? –

+0

Remplacer 'f (n)' par 'log (n)'. Cependant, la solution devient non triviale, nous pouvons donc avoir besoin de faire quelques approximations pour arriver à une réponse finale. – meowgoesthedog