Erreur dans l'utilisation de la notation asymptotique


10

J'essaie de comprendre ce qui ne va pas avec la preuve suivante de la récurrence suivante

T(n)2(cn

T(n)=2T(n2)+n
T(n)2(cn2)+ncn+n=n(c+1)=O(n)

La documentation dit que c'est faux à cause de l'hypothèse inductive que Qu'est-ce que je manque?

T(n)cn

2
Les récurrences de cette forme peuvent également être résolues en utilisant le théorème maître .
Juho

2
@Ran: Je ne pense pas que le théorème maître soit une balise appropriée pour cette question. La question n'est pas de savoir comment le résoudre, mais de souligner l'erreur d'un argument particulier. De plus, le théorème maître est probablement trop spécifique et ne mérite probablement pas d'avoir sa propre étiquette. En général, nous devrions étiqueter en fonction de la question et non des réponses possibles. Par exemple, voudriez-vous étiqueter cet akra-bazzi?
Aryabhata

"ce qui ne va pas avec la preuve suivante" - je ne vois pas de preuve. Il est souvent utile d'écrire une preuve complète (c'est-à-dire de rendre l'induction explicite) afin de repérer les erreurs.
Raphael

Réponses:


12

Disons que le but final est de prouver . Vous commencez avec l'hypothèse d'induction:T(n)=O(n)

pour tout i < n .T(i)cii<n

Et pour compléter la preuve, vous devez également montrer que .T(n)cn

Cependant, ce que vous pouvez déduire est , ce qui n'est pas utile pour compléter la preuve; vous avez besoin d' une constante c pour (presque) tout n . Par conséquent, nous ne pouvons rien conclure et T ( n ) = O ( n ) n'est pas prouvé.T(n)(c+1)ncnT(n)=O(n)

Notez que vous êtes confus entre le résultat et le processus de preuve. Et encore un point, est en fait Θ ( n log n ) dans ce cas, vous pouvez donc considérer une hypothèse d'induction appropriée pour pouvoir le prouver.T(n)Θ(nlogn)


si nous remplaçons c '= c + 1, cela changera-t-il?
Erb

@erb: Non, ce ne sera pas le cas. Vous devez prouver pour une constante choisie. Si vous remplacez , vous avez finalement T ( n ) ( c + 1 ) n (ou T ( n ) ( c + 2 ) n ) alors le résultat est le même. c=c+1T(n)(c+1)nT(n)(c+2)n
pad

8

Vous avez omis quelques étapes. Il semble que vous tentiez de prouver par induction que , et votre preuve va:T(n)=O(n)

Supposons que pour k < n . Cela signifie que T ( k ) cT(k)=O(k)k<n pour certains c . Alors T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckc , donc T ( n ) = O ( n ) .T(n)=2T(n/2)+n2cn/2+n(c+1)nT(n)=O(n)

Cette preuve va mal dès le départ: « pour k < n » n'a pas de sens. Big oh est une notion asymptotique: T ( k ) = O ( k ) signifie qu'il existe une constante c et un seuil N tels que k N , T ( k ) cT(k)=O(k)k<nT(k)=O(k)c . Et encore une fois à la fin, vous ne pouvez pas conclure que " T ( n ) = O ( n ) ", car cela dit quelque chose sur la fonction T dans son ensemble et vous avez seulement prouvé quelque chose sur la valeur particulière T ( n ) .kN,T(k)ckT(n)=O(n)TT(n)

Vous devez être explicite sur ce que signifie Alors peut-être que votre preuve va:O

Supposons que pour tout k < n . Alors T ( n ) = 2 T ( n / 2 ) + n 2 c n / 2 + n ( c + 1 )T(k)ckk<n .T(n)=2T(n/2)+n2cn/2+n(c+1)n

Cela ne prouve pas une étape inductive: vous êtes parti de , et vous avez prouvé que pour k = n , T ( k ) ( c + 1 )T(k)ckk=n . C'est une limite plus faible. Regardez ce que cela signifie: T ( k ) cT(k)(c+1)k signifie que c est une borne pour le taux de croissance de T . Mais vous avez un taux c qui augmente lorsque k augmente. Ce n'est pas une croissance linéaire!T(k)ckcTck

Si vous regardez attentivement, vous remarquerez que le taux augmente de 1 chaque fois que k double. Donc, de manière informelle, si m = 2 p k alors c m = c k + p ; en d'autres termes, c k = c 0 log 2 k .c1km=2pkcm=ck+pck=c0log2k

Cela peut être précisé. Démontrer par induction que pour , T ( k ) c log 2 ( k ) .k1T(k)clog2(k)

La relation de récurrence est typique des algorithmes de division et de conquête qui divisent les données en deux parties égales en temps linéaire. De tels algorithmes opèrent dans temps (pas O ( n ) ).Θ(nlog(n))O(n)

Pour voir quel est le résultat attendu, vous pouvez vérifier la relation de récurrence par rapport au théorème maître . La division est et le travail supplémentaire effectué est n ; log 2 ( 2 ) = 1 c'est donc le deuxième cas pour lequel la croissance est Θ ( n2T(n/2)nlog2(2)=1 .Θ(nlog(n))


7

J'étends la réponse déjà donnée, peut-être seulement en expliquant mon commentaire plus en détail.

Comme deviner peut clairement être difficile et fastidieux, il existe parfois de meilleures méthodes. L'une de ces méthodes est le théorème maître . Notre récurrence est maintenant de la forme , où a 1 et b > 1 sont des constantes et f ( n ) une fonction. Notez que dans notre cas, n / 2 peut être interprété comme signifiant n / 2T(n)=aT(n/b)+f(n)a1b>1f(n)n/2n/2. Pour être techniquement exact, notre récurrence peut ne pas être bien définie car peut ne pas être un entier. Cependant, cela est autorisé car cela n'affectera pas le comportement asymptotique de la récidive. Par conséquent, nous trouvons souvent pratique de laisser tomber les planchers et les plafonds. La preuve formelle de cela est un peu fastidieuse, mais le lecteur intéressé peut la trouver par exemple dans Cormen et al. livre .n/2

Dans notre cas, nous avons , b = 2 , f ( n ) = Θ ( n ) . Cela signifie que nous avons n log b a = n log 2 2 = n . Le deuxième cas du théorème maître s'applique puisque f ( n ) = Θ ( n ) , et nous avons la solution T ( n ) = Θ ( n loga=2b=2f(n)=Θ(n)nlogba=nlog22=nf(n)=Θ(n) .T(n)=Θ(nlogn)


Merci! On peut noter que «la chute des planchers et des plafonds» correspond à l'hypothèse que ce qui est communément fait. L'observation de base est que pour les fonctions non décroissantes, la croissance asymptotique des sous-séquences est égale à la croissance asymptotique de la séquence entière. n=2k
Raphael
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.