Résoudre ou approximer les relations de récurrence pour des suites de nombres


90

En informatique, nous avons souvent à résoudre des relations de récurrence , c'est-à-dire à trouver une forme fermée pour une suite de nombres définie récursivement. Quand on considère les temps d'exécution, on s'intéresse souvent principalement à la croissance asymptotique de la séquence .

Des exemples sont

  1. Le temps d'exécution d'une fonction queue récursive descendant à partir de dont le corps prend le temps :0nf(n)

    T(0)=0T(n+1)=T(n)+f(n)

  2. La séquence de Fibonacci :

    F0=0F1=1Fn+2=Fn+Fn+1

  3. Le nombre de mots de Dyck avec paires de parenthèses:n

    C0=1Cn+1=i=0nCiCni

  4. La récurrence de l'exécution de mergesort sur des listes de longueur :n

    T(1)=T(0)=0T(n)=T(n/2)+T(n/2)+n1

Quelles sont les méthodes pour résoudre les relations de récurrence? Nous recherchons

  • méthodes générales et
  • méthodes pour une sous-classe significative

aussi bien que

  • méthodes qui donnent des solutions précises et
  • méthodes qui fournissent (limites sur) la croissance asymptotique.

Ceci est supposé devenir une question de référence. Veuillez poster une réponse par méthode et fournir une description générale ainsi qu'un exemple illustratif.


9
Ces notes peuvent être utiles. (Mais non, je ne les transcrireai pas en réponses.)
JeffE

Réponses:


35

Conversion de l'historique complet en historique limité

Il s’agit d’une première étape dans la résolution des récurrences où la valeur de tout entier dépend des valeurs de tous les entiers plus petits. Considérons, par exemple, la récurrence qui survient dans l'analyse de quicksort randomisé . (Ici, est le rang du pivot choisi de manière aléatoire.) Pour tout entier , la valeur de dépend de tout avec . Les récurrences de ce formulaire sont appelées récurrences complètes .knT(n)T(k)k<n

T(n)=n+1nk=1n(T(k1)+T(nk))
knT(n)T(k)k<n

Pour résoudre cette récurrence, nous pouvons la transformer en une récurrence historique limitée , où dépend que d’un nombre constant de valeurs précédentes. Mais d’abord, il est utile de simplifier un peu la récurrence, de collecter les termes communs et d’éliminer les fractions embêtantes. Passons maintenant à la conversion en récurrence limitée de l'historique , nous écrivons la récurrence pour , soustrayons et regaérons les termes: n T ( n )T(n) T(n-1) ( n - 1 ) T ( n - 1 )

nT(n)=n2+2k=1n1T(k)
T(n1)
(n1)T(n1)=(n1)2+2k=1n2T(k)nT(n)(n1)T(n1)=(2n1)+2T(n1)nT(n)=(2n1)+(n+1)T(n1)T(n)n+1=2n1n(n+1)+T(n1)n

Maintenant, si nous définissons et remplaçons la fraction par la forme asymptotique plus simple , on obtient la récurrence beaucoup plus simple L' élargissement de ce récurrence dans une sommation nous donne immédiatement , où est le ième nombre harmonique . Nous concluons que .2 n - 1t(n)=T(n)/(n+1) Θ(1/n)t(n)=Θ(1/n)+t(n-1). t(n)=Θ(Hn)=Θ(logn)Hnn2n1n(n+1)Θ(1/n)

t(n)=Θ(1/n)+t(n1).
t(n)=Θ(Hn)=Θ(logn)HnnT(n)=Θ(nlogn)

1
Si vous voulez la solution précise pour , ce n'est pas difficile (ici), même si c'est un peu fastidieux; on obtient . En fait, me trouble donc je préfère la variante précise. Pesky somme des termes de Landau . T ( n ) = deux ( n + 1 ) H n + ( T ( 0 ) - 3 ) n + T ( 0 ) Σ n i = 1 Θ ( 1 / i ) = Θ ( H n )TT(n)=2(n+1)Hn+(T(0)3)n+T(0)i=1nΘ(1/i)=Θ(Hn)
Raphaël

En fait, il suffit d’observer (inductivement) que , où . En fait, j’avais déjà utilisé cette astuce au tout début, quand j’ai remplacé le temps pour partitionner un tableau avec le plus simple . Ceci est un abus totalement standard de la notation. t * ( n ) = 1 / n + t * ( n - 1 ) Θ ( n ) nT(n)/(n+1)=Θ(t(n))t(n)=1/n+t(n1)Θ(n)n
JeffE

28

Fonctions de génération

Chaque série de nombres correspond à une fonction génératrice . Il est souvent facile d'obtenir, à partir d'une récurrence, que ses coefficients - les éléments de la série - soient pincés.

Cette réponse inclut l’ansatz général avec un exemple complet, un raccourci pour un cas particulier et quelques notes sur l’utilisation de cette méthode pour obtenir des asymptotiques (même si le résultat précis ne peut pas être obtenu).

La méthode

Soit une série de nombres. Ensuite, la série formelle de puissance(an)nN

A(z)=n=0anzn

est la fonction génératrice ordinaire ¹ de . Les coefficients dans le développement en série de égaux à la séquence, c'est-à-dire . Par exemple, la fonction génératrice ordinaire des fameux nombres catalans est(an)nNA(z)[zn]A(z)=an Cn

C(z)=114z2z .

La définition de est aussi notre ansatz pour résoudre une récidive. Cela fonctionne mieux pour les récurrences linéaires, donc supposons, par souci de simplicité, une récurrence de la forme.A

a0=c0ak1=ck1an=f(n)+i=1kbiani,nk

pour certains fixes et une fonction indépendante de tout . Maintenant, nous insérons simplement les deux ancres et la partie récursive dans l'ansatz, c'est-à-direb1,,bkRf(n):NNai

A(z)=n=0anzn=c0z0+c1z1++ck1zk1+n=k[f(n)+(i=1kbiani)]zn

En utilisant des mécanismes de manipulation des sommes, des propriétés des séries de puissances formelles et des identités connues ², le dernier membre de droite doit être présenté sous une forme fermée, généralement en . L'équation résultante peut (souvent) être résolue pour . L’extension en série du résultat (qui peut être facilement obtenu, connu ou accessible d’une autre manière) est essentiellement la solution.A(z)A(z)

On trouve de bonnes introductions dans le livre de Wilf [3] et dans GKP [4]. Les matériaux avancés ont été collectés par Flajolet et Sedgewick [5].

Exemple

Considérer

a0=1a1=2an=5n+3an12an2,n>1

Nous calculons:

A(z)=n=0anzn=1+2z+n=2[3an12an2+5n]zn=1+2z+3n=2an1zn2n=2an2zn+5n=2nzn=1+2z+3zn=1anzn2z2n=0anzn+5n=2nzn=1+2z+3z(A(z)a0)2z2A(z)+5(z(1z)2z)=16z+(3z2z2)A(z)+5z(1z)2

Cela résout à

A(z)=13z+13z26z3(12z)(1z)3=1612z51z5(1z)25(1z)3=16n=02nzn5n=0zn5n=0(n+1)zn5n=0(n+1)(n+2)2zn

Maintenant, nous pouvons enfin lire

an=162n55(n+1)52(n+1)(n+2)=2n+452n2252n15

Une fois que vous vous y êtes habitué , vous remarquez que tout cela est plutôt mécanique. En fait, la calcul formel peut faire tout cela pour vous dans de nombreux cas. Le bon côté est qu’il reste (plus ou moins) cette mécanique même si la récurrence est plus complexe. Voir ici pour un exemple plus impliqué, moins mécanique.

Notez également que les techniques générales fonctionnent également si les objets recherchés sont des nombres complexes, voire des polynômes.

Un raccourci

Pour les récurrences linéaires et homogènes, c'est-à-dire de la forme

a0=c0ak1=ck1an=i=1kbiani,nk

ce qui précède passe exactement de la même manière, à chaque fois. En effectuant le calcul ci-dessus symboliquement, nous trouvons le lemme suivant . Laisser

zkb1zk1b2zk2bk

être le polynomal caractéristique (de la récidive). Soit en outre les (distincts par paires) dudit polynôme de multiplicité , respectivement. Ensuite, le coefficient souhaité est donné parλ1,,λlri

an=i=1lj=1ribi,jnj1λin

avec inconnu . Comme le polynôme caractéristique a le degré , il existe exactement (complexes) zéros, c’est-à-dire que la somme égale à . Par conséquent, les coefficients manquants peuvent être déterminés en résolvant le système d'équations linéaires avec équations obtenues en assimilant la formule ci-dessus à tout de (par exemple, les ancres).bi,jkkrikkkan

Asymptotiques

Obtenir la forme fermée pour est généralement la partie la plus facile. En exprimant cela en fonctions génératrices, nous connaissons rapidement les coefficients d'efficacité (comme nous l'avons fait dans l'exemple). Les exemples sont d'en haut et celui pour le nombre de mots de Dyck mentionnés dans la question.A(z)C(z)

On peut employer des mécanismes d’analyse complexes, en particulier l’analyse de la singularité, afin d’obtenir des asymptotiques pour les coefficients; Les mots à la mode incluent la méthode de Darboux et la méthode du point de selle. Celles-ci sont basées sur le théorème des résidus et la formule intégrale de Cauchy . Voir [6] pour plus de détails.


  1. Vous pouvez faire la même chose avec exponential , Dirichlet et d’ autres fonctions génératrices. Ce qui fonctionne le mieux dépend de la séquence en cours et en particulier si vous trouvez les formulaires fermés nécessaires.
  2. Par exemple, à partir de la feuille de triche du TCS ou de [3].
  3. Generatingfunctionology de H. Wilf (1994, 2e éd.) - disponible gratuitement en téléchargement
  4. Mathématiques concrètes de RL Graham, DE Knuth et O. Patashnik (1994, 2e éd.)
  5. Introduction à l'analyse des algorithmes de R. Sedgewick et P. Flajolet (2e édition, 2013) - disponible en téléchargement gratuit
  6. La combinatoire analytique de P. Flajolet et R. Sedgewick (2009) - disponible en téléchargement gratuit

21

Théorème Maître

Le théorème principal donne des solutions asymptotiques pour les solutions de récurrences dites diviser et conquérir , c'est-à-dire telles que diviser leur paramètre en blocs proportionnés (au lieu de couper les constantes). Ils se produisent généralement lors de l'analyse (récursive) d'algorithmes de division et de conquête, d'où le nom. Le théorème est populaire parce qu'il est souvent incroyablement facile à appliquer. D'autre part, il ne peut être appliqué qu'aux récurrences de la forme suivante:

T(n)=aT(nb)+f(n)

avec . Il y a trois casa1,b>1

  1. fO(nlogb(a)ε)

    pour certains ;ε>0

  2. fΘ(nlogbalogkn) ,

    pour certains ;k0

  3. fΩ(nlogb(a)+ε)

    pour certains etε>0

    af(nb)cf(n)

    pour certains et .c<1n

ce qui implique les asymptotiques

  1. TΘ(nlogba) ,
  2. TΘ(nlogbalogk+1n) et
  3. TΘ(f) ,

respectivement. Notez que les cas de base ne sont ni indiqués ni utilisés ici; cela a du sens, étant donné que nous n’étudions que le comportement asymptotique . Nous supposons silencieusement que ce sont des constantes (ce peuvent - ils être. D' autre qui constantes que nous ne voyons pas est hors de propos, ils ont tous disparaissent dans le .Θ

Exemples

  1. Considérons la récurrence

    T(n)=4T(n3)+n .

    Avec et - notez que nous voyons que le cas s’applique avec . Par conséquent, .f(n)=n,a=4b=3logba1.26ε=0.25TΘ(nlog34)=Θ(n1.261)

  2. Considérons la récurrence

    T(n)=2T(n/2)+n .

    Avec et - notez que nous voyons que le cas deux s’applique avec . Par conséquent, .f(n)=n,a=2b=2logba=1k=0TΘ(nlogn)

  3. Considérons la récurrence

    T(n)=3T(n4)+n .

    Avec et - notez que nous voyons que le cas trois s’applique avec et . Par conséquent, .f(n)=n,a=3b=4logba0.79ε=0.2c=1TΘ(n)

  4. Considérons la récurrence

    T(n)=16T(n4)+n!

    Ici nous avons , et- beaucoup d'exemples standard auront le polynôme , mais ce n'est pas une règle. Nous avons , et le cas trois s’applique de nouveau. Dans ce cas cependant, nous pouvons choisir n'importe quel et comme pour tout . D'où .a=16b=4f(n)=n!flogba=2εc>0n!Ω(nk)kTΘ(n!)

Lectures complémentaires

  • Il est bien possible qu'aucun des cas du théorème de maître ne s'applique. Par exemple, les sous-problèmes peuvent ne pas avoir la même taille ou une forme plus complexe. Il existe certaines extensions au théorème maître, par exemple Akra-Bazzi [1] ou Roura [2]. Il existe même une version qui fonctionne pour les récurrences discrètes (les sols et les plafonds sont utilisés sur les paramètres récursifs) et fournit des résultats plus précis [3].

  • Habituellement, vous devez mettre en forme la relation de récurrence actuelle avant de pouvoir appliquer le théorème principal. Les transformations courantes qui préservent l’asymptotique incluent l’abaissement des planchers et des plafonds ainsi que la supposition de . Veillez à ne pas casser des choses ici; reportez-vous à la section [4] 4.6 et à cette question pour plus de détails.n=bk


  1. Sur la solution des équations de récurrence linéaire de M. Akra et L. Bazzi (1998)
  2. Un théorème maître amélioré pour les récurrences diviser pour régner par S. Roura (1997)
    Fait référence à d'autres théorèmes maîtres améliorés.
  3. Un théorème maître pour les récurrences discrètes de division et conquête de M. Drmota et W. Szpankowski (2011)
  4. Introduction aux algorithmes de Cormen et al. (2009, 3ème édition)

C’est peut-être une question stupide, mais j’ai souvent du mal à tenir le modèle mental quand a n’est pas égal à b, je ne sais pas pourquoi, mais par intuition, j’ai toujours le sentiment que les deux doivent être identiques, comme dans le mergesort, nous divisons le problème en deux parties égales (presque) et avec n / 2 instances chacune. De plus, si nous divisons l'algorithme en trois parties égales, les entrées doivent également être divisées en trois parties égales, ce qui rend égaux a et b égaux. Comment puis-je casser cette mauvaise intuition?
CodeYogi

17

Deviner et prouver

Ou comment j'aime l'appeler, la " technique ". Il peut être appliqué à toutes sortes d'identités. L'idée est simple:

Devinez la solution et prouvez son exactitude.

Cette méthode est populaire, sans doute parce qu’elle nécessite habituellement un peu de créativité et / ou d’expérience (bon pour montrer) mais peu de mécanique (apparence élégante). L'art ici est de faire de bonnes suppositions éclairées; la preuve est (dans notre cas) généralement une induction plus ou moins simple.

Lorsqu'il est appliqué aux récurrences, "deviner" est généralement fait par

  • étendre la récurrence plusieurs fois,
  • déterminer l' ancre et
  • deviner le motif pour l'intermédiaire (les ).

Exemple simple

s0=s1=s2=1sn=5sn3+6n2

Élargissons la définition de quelques fois:sn

sn=5sn3+6=5(5sn6+6)+6=5(5(5sn9+6)+6)+6 =5(5(5(51n÷3 times+6)+6)+6)+6n÷3 times

Ici, le motif est facile à repérer et nous amène à l’affirmation suivante:

sn=5n3+6i=0n315i=525n364

Maintenant, nous prouvons l'identité par induction. Pour , nous pouvons établir la correction en insérant la valeur correspondante. En supposant que l’identité soit valable pour tout pour un arbitraire mais fixe , nous calculonsn{0,1,2}nnn3

sn+3=5sn+6=5(525n364)+6=525n3+164=525n+3364

ce qui prouve l'identité par le pouvoir de l'induction.

Si vous essayez de l'utiliser sur des récurrences plus complexes, vous rencontrerez rapidement le principal inconvénient de cette méthode: il peut être difficile de voir le motif, ou de le condenser en un formulaire fermé et agréable.

Asymptotiques

Il est également possible d’utiliser cette méthode pour les asymptotiques. Sachez cependant que vous devez deviner les constantes pour les symboles de Landau, car il doit y avoir une constante qui établit la limite pour tout , c’est-à-dire que le facteur constant ne peut pas changer pendant l’induction.n

Considérons, par exemple, la récurrence d'exécution de Mergesort, simplifiée pour le cas de k¹:n=2k

T(1)=T(0)=0T(n)=2T(n/2)+n1n1

On devine que avec la constante , c’est . Nous le prouvons par induction sur ; la marche inductive ressemble à ceci:T(n)O(nlogn)c=1T(n)nlognk

T(n)=2T(n/2)+n12n2logn2+n1=nlognnlog2+n1<nlogn


  1. Pour les séquences naturelles non décroissantes, chaque sous-séquence infinie a la même croissance asymptotique que la séquence d'origine.

15

La méthode Akra-Bazzi

La méthode Akra-Bazzi donne des asymptotiques pour les récurrences de la forme: Ceci couvre les récurrences habituelles de division et conquête, mais aussi les cas dans lesquels la division est inégale. Les "termes de fudge" peuvent prendre en compte des divisions qui ne sortent pas exactement, par exemple. Les conditions d'applicabilité sont:

T(x)=1ikaiT(bix+hi(x))+g(x)for xx0
hi(x)
  • Il y a suffisamment de cas de base pour que la récurrence continue
  • Les et sont toutes des constantesaibi
  • Pour tout ,iai>0
  • Pour tout ,i0<bi<1
  • |g(x)|=O(xc) pour une constante commecx
  • Pour tout ,i|hi(x)|=O(x/(logx)2)
  • x0 est une constante

Notez que et que la fonction en dents de scie est toujours comprise entre 0 et 1, remplaçant ainsi (ou comme il ) satisfait les conditions du .bix=bix{bix}{u}=uubixbixhi

Trouvez tel que: Alors le comportement asymptotique de comme est donné par: avec "assez grand", c'est-à-dire qu'il y a pour que pour tout .p

1ikaibip=1
T(x)x
T(x)=Θ(xp(1+x1xg(u)up+1du))
x1k1>0
(2)g(x/2)k1g(x)
x>x1

Exemple A

Par exemple, prenons la récursivité pour , où : Les conditions sont remplies, nous avons besoin de : Comme par hasard, . Nous avons donc: n5T(0)=T(1)=T(2)=T(3)=T(4)=17

T(n)=9T(n/5)+T(4n/5)+3nlogn
p
9(15)p+(45)p=1
p=2
T(n)=Θ(n2(1+3n3uloguu3du))=Θ(n2)

depuis avec nous remplissons pour tout . Notez que parce que l'intégrale converge même si nous utilisons d'autres constantes, telles que , en tant que borne inférieure, il est légal de les utiliser également; la différence disparaît dans .k112(1log2log3)(2)x31Θ

Exemple B

Voici un autre exemple pour : Nous avons , vérifiez. Nous avons qu’il existe un seul , , qui vérifie. En supposant que le soit vraiment et / ou , le sous-entendu vérifie également. Nous avons donc besoin de: Donc et: n2

T(n)=4T(n/2)+n2/lgn
g(n)=n2/lnn=O(n2)a1=4b1=1/2n/2n/2n/2hi(n)
a1b1p=4(1/2)p=1
p=2
T(n)=Θ(n2(1+2nu2duu3lnu))=Θ(n2(1+2nduulnu))=Θ(n2lnlnn)
Nous appliquons le même truc que ci-dessus à la limite inférieure de l'intégrale, seulement que nous utilisons parce que l'intégrale ne converge pas pour .21

(L'aide de maxima avec l'algèbre est grandement appréciée)


1
J'ai vérifié le papier d'origine. Ils ont une restriction technique sur la limite inférieure de l'intégrale; votre version (citant l'enquête de Mehlhorn?) exige explicitement que l'intégrale converge. Etant donné que je pense que la condition d'origine est plus facile à vérifier, j'ai modifié la déclaration et les exemples en conséquence, veuillez vérifier.
Raphaël

1
De plus, le document original ne donne pas la version avec le ; est-ce tiré du manuscrit de Leighton? Avez-vous une référence évaluée par les pairs pour cela? Devrions-nous passer à la version donnée dans le document de 1998 par Akra & Bazzi? hi
Raphaël

1
Je suis tombé sur ce qui semble être une incohérence dans le théorème . Peut-être connaissez-vous la réponse?
Raphaël

11

Sommations

On rencontre souvent une récurrence de la forme où est monotone. Dans ce cas, nous pouvons développer et donc avec une valeur de départ , afin d'estimer il faut estimer la somme .

T(n)=T(n1)+f(n),
f(n)
T(n)=T(c)+m=c+1nf(m),
T(c)T(n)f(c+1)++f(m)

non décroissantf(n)

Lorsque est monotone non décroissant, nous avons les bornes évidentes Ces limites sont optimales dans le sens où elles sont resserrées pour certaines fonctions: la limite supérieure des fonctions constantes et la limite inférieure des fonctions de pas ( pour et pour ). Cependant, dans de nombreux cas, ces estimations ne sont pas très utiles. Par exemple, lorsque , la limite inférieure est et la limite supérieure est , elles sont donc très éloignées les unes des autres.f(n)

f(n)m=c+1nf(m)(nc)f(n).
f(m)=1mnf(m)=0m<nf(m)=mn(nc)n

L'intégration

Une meilleure estimation est donnée par intégration: Pour , cela donne la valeur correcte de la somme jusqu'aux termes d'ordre inférieur: Lorsque nous pouvons calculer la somme explicitement, mais dans de nombreux cas, le calcul explicite est difficile. Par exemple, lorsque l’antidivatif de est , et donc

cnf(x)dxm=c+1nf(m)c+1n+1f(x)dx.
f(m)=m
12n212c2m=c+1nm12(n+1)212(c+1)2.
f(m)=mf(m)=mlogmf(1/2)x2logx(1/4)x2
m=c+1nmlogm=12n2logn±Θ(n2).

La formule d'Euler – Maclaurin donne de meilleures estimations. Cette formule peut être utilisée, par exemple, pour prouver des formes fortes de la formule de Stirling, en estimant la somme .logn!=m=1nlogm

Non croissantf(n)

Dans certains cas, est monotone sans augmentation. Les estimations triviales deviennent et les estimations intégrales Par exemple, pour , en utilisant nous obtenons f(n)

f(1)m=c+1nf(m)(nc)f(1),
c+1n+1f(x)dxm=c+1nf(m)cnf(x)dx.
f(m)=1/mf(m)=logm
m=c+1n1m=logn±Θ(1).

Cette réponse traite moins de la résolution des récidives que de l’estimation de sommes (ce qui peut être utile pour résoudre des récidives); la technique est la dualité des sommes de Riemann . Il devrait également fonctionner avec d'autres formes telles que pour constante ? T(nd)d
Raphaël

À droite, peut également être résolu de cette façon. T(n)=cT(nd)+f(n)
Yuval Filmus

9

Sedgewick et Flajolet ont effectué des travaux approfondis en combinatoire analytique , ce qui permet de résoudre les récurrences de manière asymptotique en combinant des fonctions génératrices et des analyses complexes. Leur travail permet de résoudre automatiquement de nombreuses récurrences et a été implémenté dans certains systèmes de calcul formel.

Ce manuel sur le sujet a été écrit par Flajolet et Sedgewick et constitue une excellente référence. Ce texte de Sedgewick et Flajolet est un exposé un peu plus simple, axé sur les applications à l'analyse algorithmique .

J'espère que cela t'aides!


4
C'est une bonne référence, mais nous souhaitons rassembler des méthodes de manière accessible. Pouvez-vous présenter une méthode particulière en détail?
Raphaël

9

Il peut arriver que vous rencontriez une étrange récurrence comme celle-ci: Si vous êtes comme moi, vous réaliserez que vous ne pouvez pas utiliser le théorème maître et vous pourrez alors penser: " hmmm ... peut-être qu'une analyse d'arbre de récurrence pourrait fonctionner. " Vous réaliseriez alors que l’arbre commence à devenir très brut. Après quelques recherches sur Internet, vous verrez que la méthode Akra-Bazzi fonctionnera! Ensuite, vous commencez réellement à examiner la situation et vous réalisez que vous ne voulez pas vraiment faire tous les calculs. Si vous avez été comme moi jusqu'à présent, vous serez ravi de savoir qu'il existe un moyen plus simple.

T(n)={cn<72T(n5)+4T(n7)+cnn7


Le théorème de la division inégale, partie 1

Soit et des constantes positives.ck

Soit alors des constantes positives telles que .{a1,a2,,ak}1kai<1

Nous devons également avoir une récurrence du formulaire (comme notre exemple ci-dessus):

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

Prétendre

Ensuite, je revendique où est une constante (par exemple, asymptotiquement linéaire) et:T(n)bnb

b=c1(1kai)

Preuve par induction

Base :n<max{a11,a21,,ak1}T(n)c<b<bn

Induction : Vrai pour n'importe quel , on a alorsn<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+ba1n+ba2n++bakncn+ba1n+ba2n++bakn=cn+bn1kai=cncn1kai1(1kai)+cn1kai1(1kai)=cn1(1kai)=bn

Alors nous avons .T(n)bnT(n)=O(n)

Exemple

T(n)={cn<72T(n5)+4T(n7)+cnn7
Nous vérifions d’abord les coefficients des appels récursifs dont la somme est inférieure à un:
1>1kai=15+15+17+17+17+17=25+47=3435

Nous vérifions ensuite que le cas de base est inférieur au max des inverses des coefficients:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7}=7

Avec ces conditions remplies, nous savons où est une constante égale à: Nous avons donc: T(n)bnb

b=c1(1kai)=c13435=35c
T(n)35cnT(n)cnT(n)=Θ(n)


Le théorème de la division inégale, partie 2

De même, nous pouvons prouver une limite pour quand . La preuve suivra beaucoup du même format:1k=1

Soit et des constantes positives telles que .ckk>1

Soit alors des constantes positives telles que .{a1,a2,,ak}1kai=1

Nous devons également avoir une récurrence du formulaire (comme notre exemple ci-dessus):

T(n)c0<n<max{a11,a21,,ak1}T(n)cn+T(a1n)+T(a2n)+T(akn)nmax{a11,a21,,ak1}

Prétendre

Alors je réclame (nous choisissons base car sera le facteur de branchement de l’arbre de récursion) où et sont des constantes (par exemple asymptotiquement linéarithmique ) tel que:T(n)αnlogkn+βnlogkkαβ

β=c
et
α=c1kailogkai1

Preuve par induction

Base :n<max{a11,a21,,ak1}T(n)c=β<αnlogkn+βn

Induction : Vrai pour n'importe quel , on a alorsn<n

T(n)cn+T(a1n)+T(a2n)++T(akn)cn+1k(αainlogkain+βain)=cn+αn1k(ailogkain)+βn1kai=cn+αn1k(ailogknai1)+βn=cn+αn1k(ai(logknlogkai1))+βn=cn+αn1kailogknαn1kailogkai1+βn=αn1kailogkn+βn=αnlogkn+βn

Alors nous avons .T(n)αnlogkn+βnT(n)=O(nlogn)

Exemple

Modifions cet exemple précédent que nous avons utilisé juste un petit peu:

T(n)={cn<352T(n5)+4T(n7)+T(n35)+cnn35

Nous vérifions d’abord les coefficients dans les appels récursifs dont la somme est égale à un:

1=1kai=15+15+17+17+17+17+135=25+47+135=3535

Nous vérifions ensuite que le cas de base est inférieur au max des inverses des coefficients:

n<max{a11,a21,,ak1}=max{5,5,7,7,7,7,35}=35

Avec ces conditions remplies, nous savons où et est une constante égale à: Nous avons donc: T(n)αnlogn+βnβ=cα

b=c1kailogkai1=c2log755+4log777+log735351.048c
T(n)1.048cnlog7n+cnT(n)=O(nlogn)


6

Après avoir vérifié à nouveau ce post, je suis surpris que ce ne soit pas encore arrivé.

Transformation de domaine / changement de variables

Lorsque vous traitez avec des récurrences, il est parfois utile de pouvoir modifier votre domaine si la profondeur de la pile de récursivité n'est pas claire.

Par exemple, prenons la récurrence suivante:

T(n)=T(22loglogn)+logloglogn

Comment pourrions-nous jamais résoudre ce problème? Nous pourrions étendre la série, mais je vous promets que cela va devenir très rapide. Au lieu de cela, considérons comment notre entrée change à chaque appel.

Nous avons d'abord:

  1. n , alors
  2. 22loglogn , puis
  3. 22loglog(22loglogn) , etc.

Le but d'une transformation de domaine sera maintenant de changer notre récurrence en un équivalent, de sorte qu'au lieu des transitions ci-dessus, nous ayons simplement .S(k)k,k1,k2,

Par exemple, si , voici ce que nous obtenons pour notre récurrence précédente: Ensuite, nous pouvons simplement le récrire comme : Ensuite, tout ce que vous avez à faire est de reconvertir en pour obtenir: n=2222k

T(2222k)=T(22loglog2222k)+logloglog(2222k)=T(2222k1)+2k
T(k)=T(k1)+2k=i=1k2k=2k+11
kn
T(n)=2(loglogloglogn)+11=O(logloglogn)


Avec cet exemple, nous pouvons maintenant voir notre objectif.

Supposons que Pour une constante et fonctions et .

T(n)={h(1)n=1aT(f(n))+h(n)otherwise
af(n)h(n)

Nous essayons maintenant de trouver une fonction et telle que g(k)=nf(g(k))=g(k1)

T(g(k))=aT(f(g(k)))+h(g(k))=aT(g(k1))+h(g(k))

Plus généralement, on veut où est l'application répétée de sur , fois. (par exemple, ). Cela permettra à d’agir en tant que fonction "itérative". Où, à la profondeur de la récursion, le travail effectué est simplement .f(i)(n)=g(ki)f(i)(n)fnif(2)(n)=f(f(n))g(k)ih(g(ki))

Ensuite , nous pouvons facilement convertir en de telle sorte que Ensuite , nous avons seulement à se soucier en sommant pour tout jusqu'à un cas de base donné. C'est-à-dire que S(k)=T(g(k))

S(k)=aS(k1)+h(g(k))
h(g(k))k
S(k)=i=g1(1)kakih(g(i))

Si nous pouvons déterminer pour une fonction fermée de , alors nous pouvons déterminer comme étant S(k)=γ(k)γT(n)

T(n)=γ(g1(n))

Ensuite, nous utilisons ceci pour obtenir une borne sur via l’une des méthodes ci-dessus. Vous pouvez évidemment modifier légèrement cette méthode selon vos spécifications, mais en général, vous essayez de trouver une fonction itérative pour transformer en une récursion simple.T(n)g(k)T(n)

Je ne connais pas de méthode exacte pour déterminer à ce stade, mais je continuerai d'y penser et de le mettre à jour si cela devient plus clair (ou si un commentateur a des astuces!). J'ai surtout trouvé mes fonctions par essais et erreurs dans le passé (voir ici , ici , ici et ici pour des exemples).g(k)g(k)


1
Existe-t-il des restrictions sur , et / ou ? Je demande spécifiquement parce que des trucs de substitution de folklore similaires échouent parfois lorsque la notation Landau est impliquée, ce qui me rend inquiet si est toujours la bonne réponse. fghγg1
Raphaël

@ Raphaël, c'est la partie dont je ne suis pas tout à fait sûr. Je pense que nous devons nous assurer de l’établissement d’une équivalence. 1) La profondeur de récursion est la même, ceci peut être assuré par et . 2) le travail effectué à chaque niveau de récursivité est le même, ce qui, à mon avis, est imposé par , puis . L'idée de base est de transformer simplement en une somme, à savoir . La conversion de en Je ne suis pas non plus sûr à 100% de (je n'ai pas de preuve), mais je ne vois pas pourquoi. Incorrect. Pensées? f(g(k))=g(k1)g(k)=ng(k)=nh(g(k))=h(n)T(n)i=ckh(g(i))γ(k)γ(g1(n))
Ryan

@Raphael vous pouvez également considérer le cas où au lieu de , puis la conversion en devrait être plus simple vers l'avant. Facile à prouver, je pense si vous montrez simplement l’équivalence dans la somme. Ici, vous rencontrerez probablement des problèmes amusants avec la notation Landau, mais si vous laissez Landau en dehors de cela et restez bloqués avec une égalité précise, je pense que cela devrait aller. S(k)=γ(k)ΘT(n)=γ(g1(n))
Ryan

@Raphael Je l'ai édité pour n'utiliser que l'égalité, donc la notation landau ne devrait pas gâcher cela. Aussi généralisé un peu plus. Ce que vous pourriez même généraliser un peu plus pour utiliser une fonction au lieu de la constante . Ensuite, au lieu de dans la somme, utilisez simplement une application de . β(n)aakiβ(g(i))
Ryan

5

Une autre approche fonctionne pour les relations de récurrence simples: demandez à Wolfram Alpha de résoudre le problème pour vous.

Par exemple, essayez de taper f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2)dans Wolfram Alpha. Vous obtiendrez une solution, avec un lien vers les numéros de Fibonacci. Ou essayez f(1)=1, f(n)=f(n-1)+nou f(1)=1, f(n)=2*f(n-1)+3*nou f(n)=f(n-1) + 2 f(n-2), f(1)=1, f(2)=3pour d'autres exemples. Cependant, soyez averti: Wolfram Alpha peut résoudre des récurrences très simples, mais il s'effondre pour des plus complexes.

Cette approche permet d’éviter toute réflexion, qui peut être considérée comme un bug ou une fonctionnalité.


3
Je ne pense que le but de ce site serait d'expliquer comment l' algèbre informatique fait des choses comme ça, de ne pas plaider en faveur de son utilisation aveugle. Mais les outils sont utiles, si utiles en fait qu'il faut probablement toujours les essayer avant de "perdre" du temps (dans la "pratique").
Raphaël

De ma propre expérience, en essayant d'utiliser l' algèbre informatique sans aucune idée de ce qui est « dur » ou « facile » ne vous donne pas très loin. En particulier dans l'analyse algorithmique, un massage peut être nécessaire. Je ne sais pas comment vous faites cela sans savoir comment résoudre vous-même les récidives. (En ce qui concerne l'objectif de ce site, les points de vue sont multiples. Fait: jusqu'ici, "cela est utile pour quelqu'un " n'était pas suffisant pour justifier un message.)
Raphael

5

Le cas 2 du théorème maître, comme indiqué habituellement, ne traite que les récurrences de la forme dans laquelle pour . Le théorème suivant, tiré d'un document de Jeffrey Leon, donne la réponse pour négatif :T(n)=aT(n/b)+f(n)f(n)=Θ(nlogablogkn)k0k

Considérons la récurrence avec un cas de base approprié.T(n)=aT(n/b)+f(n)

  1. Si pour alors .f(n)=O(nlogbalogc1n)c<0T(n)=Θ(nlogba)

  2. Si pour alors .f(n)=Θ(nlogbalogc1n)c=0T(n)=Θ(nlogbaloglogn)

  3. Si pour alors ).f(n)=Θ(nlogbalogc1n)c>0T(n)=Θ(nlogbalogcn

La preuve utilise la méthode de la substitution répétée, comme nous le dessinons maintenant. Supposons que et . Alors pour une puissance de , Examinons maintenant les cas un par un. Lorsque , la série converge et ainsi . Lorsque , la somme est la somme des harmoniques , et ainsi de suite.f(n)=nlogbalogbc1nT(1)=0nb

T(n)=i=0logbn1ai(nbi)logbalogbc1(nbi)=i=0logbn1nlogba(logbni)c1=nlogbaj=1logbnjc1.
c<0j=0jc1T(n)=Θ(nlogba)c=0Hlogbn=log(logbn)+O(1)T(n)=Θ(nlogbaloglogn) . Quand , on peut approximer la somme en utilisant une intégrale: et ainsi .c>0
j=1logbn0logbnxc1dx=xcc|0logbn=logbcnc,
T(n)=Θ(nlogbalogcn)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.