Modification des variables dans les relations de récurrence

20

Actuellement, j'étudie moi-même l'introduction aux algorithmes (CLRS) et il y a une méthode particulière qu'ils décrivent dans le livre pour résoudre les relations de récurrence.

La méthode suivante peut être illustrée par cet exemple. Supposons que nous ayons la récurrence

T(n)=2T(n)+logn

Initialement, ils effectuent la substitution m = lg (n), puis la rebranchent dans la récurrence et obtiennent:

T(2m)=2T(2m2)+m

Jusqu'à ce point, je comprends parfaitement. Cette prochaine étape est celle qui me déroute.

Ils "renomment" maintenant la récurrence et laissent , ce qui produit apparemmentS ( m ) = T ( 2 m )S(m)S(m)=T(2m)

S(m)=2S(m/2)+m

Pour une raison quelconque, je ne comprends pas pourquoi ce changement de nom fonctionne, et cela semble être de la triche. Quelqu'un peut-il mieux expliquer cela?

goooser
la source

Réponses:

15

Ce n'est certainement pas de la triche. Pensez en calcul à la façon dont la substitution peut être utilisée pour résoudre une intégrale délicate. La substitution rend l'équation plus gérable pour la manipulation. De plus, la substitution peut transformer des récurrences quelque peu complexes en récurrences familières.

C'est exactement ce qui s'est produit dans votre exemple. Nous définissons une nouvelle récurrence . Rappelez-vous que . Notez que, . Si ce point particulier n'est toujours pas clair, notons et notons que tout ce que nous faisons est ce . Maintenant, nous pouvons exprimer en l'étendant à: En résolvant pour nous voyons qu'il se résout en notre ami familier . Maintenant que nous avons résolu nous voulons l'exprimer en termes de . Pour ce faire, il suffit de rebrancher notre valeur d'origine pourT ( 2 m ) = 2 T ( 2 mS(m)=T(2m)S(m/2)=T(2mT(2m)=2T(2m2)+mk=m/2S(k)=T(2k)S(m)S(m)=2S(m/2S(m/2)=T(2m2)k=m/2S(k)=T(2k)S(m)S O ( m log m ) S T ( n ) m T O ( log n log log n )

S(m)=2S(m/2)+m.
SO(mlogm)ST(n)met nous avons .TO(lognloglogn)
Nicholas Mancuso
la source
À droite, je comprends parfaitement comment la substitution facilite les problèmes et comment rebrancher les valeurs pour obtenir la complexité en termes de n. Je suppose que ma question est, après avoir laissé S (m) = T (2 ^ m), comment dérivez-vous S (m / 2)? Ce n'est tout simplement pas évident pour moi pour une raison quelconque. Pour être plus précis, comment concluez-vous que T (2 ^ (m / 2)) = S (m / 2). Il semble que dans la récurrence T, la taille du sous-problème soit à racine carrée, tandis que dans la récurrence S, la taille du sous-problème est divisée par deux
La seule partie que je ne comprends pas, c'est quand vous dites "Remarquez que, S (m / 2) = T (2 ^ (m / 2))" C'est la seule partie qui n'est pas évidente pour moi. Je suis habitué à l'idée de faire des substitutions variables, mais je ne suis pas vraiment habitué à l'idée de substituer une récurrence entière.
Ah ok, ce dernier montage l'a fait pour moi. C'est clair maintenant, merci!
1
J'ai un petit doute. Si j'écris la fonction S () en termes de kje suis en dessous de l'équation S (k) = 2S (k / 2) + m Comment puis-je obtenir un substitut mpourk
Atinesh
4

Ce que signifie que et sont deux fonctions différentes qui produisent le même résultat tout en prenant respectivement les entrées et .S T m 2 mS(m)=T(2m)STm2m

La fonction peut être considérée comme un opérateur avec deux étapes internes (sinon, composition des fonctions):S

  1. m 2 mSOpérateur : entrée: , sortie:m2m

  2. TOpérateur (fonction d'origine): Entrée: sortie de la première partie, Sortie: Comme défini à l'origine.

Les transitions sont donc:

m

m2mT(2m)=S(m)
m22m/2T(2m/2)=S(m2).
Vivek Anand Sampath
la source