Cours IFT2121 – Introduction à l'algorythmique
Cours 1, lundi 9 janvier 2006
Tp hebdomadaire individuels 35% (Reçu le jeudi, remis le vendredi suivant (8jours))
Intra 1: 10%
Intra 2: 15%
Final: 40%
Livre: Brassard et Bratley Fundamentals of Algorythmics.
Bases:
- Définir de quoi on parle - Prouver que ça marche - Évaluer la performance
Apprendre à réfléchir
M'assurer que c'est «bon».
Heuristique:
Méthode pour solutionner un problème sans garantie de résultat.
On veut définir:
Algorythme Problème
Complexité (d'un algorythme ou d'un problème) (!= compliqué) Algorythme:
(essai 1) Suite d'opérations simples. (pour résoudre un problème).
(essai 2) Une suite d'opérations «simples» qui se termine.
Problème:
(essai 1) Données: Ensemble fini
But: Trouver une solution étant donné les données.
nota: Un exemplaire (instance) d'un problème est un cas particulier de l'énoncé général d'un problème.
Devoir: - Lire chapître 1 (pas de remise)
Notamment: Multiplication à la russe et PGCM (Euclide) Nota: Chercher ds liste triée: log(n)
Trier: (moy) n.log(n) | (pire) n2 Parlons Algorythme:
Preuve que ça marche (…)
Efficacité: (en terme de temps et/ou d'espace) [qui sont généralement inv. prop]
À posteriori (expérimentale) À priori Ce qui nous intéresse
Exemple: Trier un fichier de n éléments. Pourquoi peut-on dire n.log(n) ?
Pour représenter les données, la bonne mesure serait le nombre de bit (représentation binaire) Différentes représentations f1(d), f2(d), f3(d) vont prendre le même espace à une cte multiplicatrice près.
Principe d'invariance: Deux représentations des mêmes données ne diffèrent que par une constante multiplicative.
Efficacité: [ En moyenne | Au pire de cas | Au meilleur des cas (peu intéressant) ] Opération élémentaire: Instruction qui prend un temps constant.
Problème Algorythme Analyse en espace et en temps Complexité en espace et en temps
Après avoir analysé différents algorythmes, on peut maintenant parler de la complexité du problème, qu'on peut cerner en déterminant le pire et le meilleur.
Cours 2, jeudi 12 janvier 2006 Ordre des opérations:
1.
Problème (le plus difficile)2.
Modèle (Suffisamment précis pour être programmé) 3. Solution (même une preuve d'impossibilité)4. Algorythme "abstrait"
5. Preuve de validité (autant que possible)
6. "Analyse" (place, temps, …) [versus l'algo oui, mais aussi versus le problème]
7. Algorythme (précis) 8. Preuve, analyse
9. Structures des données 10. Analyse
11. Implémentation 12. Test (etc.)
Optimal: On ne peut pas faire mieux!
N'importe quel autre algo va au moins prnedre ce temps.
Pour déterminer l'optimalité, on doit pouvoir comparer les algorythmes. La taille d'un exemplaire d'un problème est mesurée le plus souvent pas le nombre des données clées. (Pour un graphe, le nombre de sommets, pour un fichier le nombre de lignes, etc.)
n données deront représentées par c∙f(n) bit
Pour calculer c∙f(n), on compte le nombre d'opérations élémentaires
(opérations qui prennent au plus un certain temps constant) Soit une application f:NR≥0
order O(f) = {g: NR≥0 | c Є R≥0 n0 Є N n ≥ n0 g(n)≤c∙f(n)}
(qu'il existe une constante qui multipliée à la fonction f fera (à partir d'un certain point n0) que f sera toujours supérieure à g)
nous donne une borne supérieure
oméga (f) = {g: NR≥0 | d Є R≥0 n0 Є N n ≥ n0 g(n)≥d∙f(n)}
theta (f) = O(f) (f) Tri: n clés en O(n2) par Bablesort
n clés en O(nlgn) par QuickSort (en moyenne)
Prouvons que n'importe quel algorythme qui tri par comparaison prendra au minimum nlgn.
Soit A, un algo qui tri par comparaison (inconnu).
L'algo va prendre une première paire: a1 ?< b1
et selon le résultat, il va suivre une seule branche jusqu'au bout.
Il y a n! façon de trier l'ensemble. Donc on aura n! branches à l'arbre. On cherche alors la hauteur de l'arbre.
Cours 3, lundi 16 janvier 2006
O(f), (f) et (f) sont des ensembles dont f(n) est un élément. f(n) = O(f(n)) est donc une notation peu raisonnable.
Rappel: Les fonctions sont de N dans R≥0 dans le cadre de ce cours.
Propriétés des ordres et quelques outils.
1. O(f(n)) = O(g(n)) ssi f(n) Є O(g(n)) et g(n) Є O(f(n)) Preuve:
Évidemment, si O(f(n)) = O(g(n)) alors f(n) Є O(g(n)) et g(n) Є O(f(n)) Dans l'autre direction, supposons f(n) Є O(g(n)) et g(n) Є O(f(n)).
On prouve que si t(n) Є O(f(n)), alors t(n) Є O(g(n)) et que si t(n) Є O(g(n)) alors t(n) Є O(f(n)) Si t(n) Є O(f(n)), on a alors qu'il existe un C Є R≥0 et n0 Є N tel que n≥n0 , t(n) ≤ c.f(n) On a également d > 0 n, Є N tel que n≥n, f(n)≤d.g(n).
Donc t(n) ≤ c.f(n) ≤ c.d g(n) n ≥ max{n0, n1}.
Avec la constante c.d on a alors que t(n) Є O(g(n)).
De la même façon, mutitis mutandi, t(n) Є O(g(n) t(n) Є O(f(n) 2. Mutatis mutandis, la même observation pour et .
3. La règle du maximum :
Soit f, g deux fonctions. Soit h(n) = f(n) + g(n).
Soit q(n) = max {f(n), g(n)}
On observe facilement que h(n) = q(n) + min {f(n), g(n)}.
q(n) ≤ h(n) ≤ 2.q(n)
On voudrait O(h(n)) = O(q(n)). Ce qui est vrai
On veut prouver que h(n) Є O(q(n)) et q(n) Є O(h(n)), mais on l'a déjà observé plus haut.
Pour que la règle soit utile, on a quand même besoin d'une condiction supplémentaire:
Il faut qu'il existe un nm Є N tel que q(n) = f(n) pour n ≥ nm. 3'. Ceci se généralise à
ki
i
n
f n
h
1
) ( )
(
, k ≥ 2 et q(n)=max{fi(n) | i=1, …, k}4. 0 ( ( )) ( ( ))
) (
)
lim ( c O f n O g n
n g
n f
n
Preuve:
Par définition, on a: >0 n0 ЄN tel que |f(n)/g(n) –c| < Si f(n)/g(n) –c < 0, on a f(n) < c.g(n)
Si f(n)/g(n) –c ≥ 0, on a f(n)/g(n) –c < , donc f(n)<(c+)g(n) Donc dans tous les cas, si n ≥ n0, f(n) < (c+)g(n), i.e.:
f(n) Є O(g(n)).
Puisque lim f/g = c >0 lim g/f = 1/c, on a prouvé mutatis mutandis, que g(n) Є O(f(n))
5. 0
) (
)
lim (
g n n f
n , alors f(n) Є O(g(n)) et g(n) n'est pas dans O(f(n)) Preuve:
Par définition, f/g < >0 et n≥n0
Donc, f(n) < .g(n), i.e.: f(n) Є O(g(n))
Pour la deuxième partie, supposons que g(n) Є O(f(n)), i.e.: c > 0 n0 Є N tel que n ≥ n0 g(n) ≤ f(n).
Ceci implique que f/g ≥ 1/c, donc pour <1/c, on ne peut pas avoir f/g< pour n ≥ max{n0, n1}
6.
( ) ) lim (
n g
n f
n , alors g(n) Є O(f(n)) et f(n) n'est pas dans O(g(n)).
Preuve:
) 0 (
)
lim (
g n n f
n ssi
( ) ) lim (
n f
n g
n , ce qu'on a prouvé au cas précédent.
Ordres conditionnels:
n c t n
t
2 )
( , par exemple, nous cause problème pour trouver l'ordre dans une récurrence …
Soit P, une propriété des naturels. (Qui peu être V ou F, ou on peut dire qu'elle forme un sous-ensemble des N) Notons O(f(n)|P(n)) l'ensemble { t:NR≥0 | c Є R≥0 , n0 Є N ( n≥n0 et P(n) ) t(n) ≤ c.f(n) }
ex.: { t:NR≥0 | c > 0 , n0 , n ≥ n0 , k > 0, n = 3k t(n) ≤ c.n3 } Définitions:
1. Une fonction f est éventuellement non-décroissante si n0 Є N tel que n ≥ n0 f(n) ≤ f(n+1) 2. Soit b ≥ z, b Є N. On appelle une fonction f b-lisse si elle est é.n.d
et si f(bn) ≤ c.f(n) pour une constante c > 0 etn ≥ n0, pour n0. 3. Une fonction est lisse si elle est b-lisse pour tout b ≥ 2, b Є N.
Remarques:
a) Si t est é.n.d. alors m > n ≥ n0, f(n) ≤ f(m) b) f est b-lisse veut dire que f(bn)/f(n) ≤ c.
Théorème:
Soit f:NR, une fonction b-lisse pour 2≤bЄN, alors f est lisse.
Preuve:
Soit b≥2, cb>0, n0 Є N tel que f(bn) ≤cb.f(n) pour n ≥ n0. On veut: aЄN, a≥2, ca et na tel que f(an) ≤ ca.f(n), si n≥na
Soit a Є N, a ≥ 2. On a
a b
logba b
logba.On a également, pour tout k Є N, f(bkn) ≤ cbkf(n).
Donc
f ( an ) f ( b
logban ) f ( b
logban ) c
blogbaf ( n ).
Donc en prenant na = max{n0, n1} et ca = cb[logba], on a ce qu'on cherche.
Si on met n1 égale au seuile de la définition é.n.d. de la définition.
Cours 4, jeudi 19 janvier 2006 Théorème:
Soit f:+ lisse et soit t: + é.n.d. Soit b ≥ 2.
Si t(n) O(f(n)) | k , n=bk) alors t(n) O(f(n)) Preuve:
On a: n1 | f(n) ≤ f(n+1) pour n ≥ n1
On a: d c n2 | f(dn) ≤ cf(n) pour n ≥ n2
En particulier: f1(bn) ≤ cbf(n) pour n ≥ n2
n3 t(n) ≤ t(n+1) pour n ≥ n3
On a: a n4 | t(n) ≤ af(n) pour n ≥ n4 et n = bk Soit n0 = max {n1, n2, n3}
log
log
log
log
( ) t bn bn a f bn b bn b ( )
t n b a f b b b a c f b a c f n
Si on prend acb comme la constante, on a que t(n) ≤ acbf(n) pour tout n ≥ n0
Exemples:
1. f(n) = 2n3 + n2 – lgn g(n) = 106n3 + 3n
3
6 2 6
( ) 2 1/ ln / 2
lim lim... lim 0
( ) 10 3/ 10
n n n
f n n g n
g n n
, donc O(f(n)) = O(g(n))2. f(n) = 2n3 + n2 g(n) = n2 + lgn
2
( ) 2 1 2
lim lim... lim
( ) 1 lg / 1
n n n
f n n n
g n n n
, donc g(n) O(f(n)), mais f(n) O(g(n))4. f(n) = lg n g(n) = lg lg n = lg (lg n)
( ) '( ) 1/
lim lim lim lim lg
1 1
( ) '( )
lg
n n n n
f n f n n
g n g n n
n n
, donc g(n) O(f(n)), mais f(n) O(g(n))* aurait été plus facile avec une substitution de variable, par exemple x = lgn 5. f(n) = an2 + bn + c a, b, c + g(n) = n2
On prétend que f(n) O(n2 | n = 3k) f(n) O(n2) f(n) ≤ f(n+1) ok.
g(n) est lisse
On a que g(2n) 4n2 = 4g(n) ok.
Opérations sur les ordres: (Définitions) O(f) + O(g) = O( f(n) + g(n) )
Soit X et Y deux ensembles de fonctions de vers + Soit ° une opération binaire sur les fonctions.
On défini X ° Y = { t:≥0 | f X, g Y, no tel que pour n≥n0, t(n) = f(n) ° g(n) }
Quand X (ou Y) ne contient qu'une fonction, on abuse de la notation en écrivant: f ° Y si X = { f } Ex.: nO(1)
O(f) O(g):
Démo 2, vendredi 20 janvier 2006
Notons: O est Réflexive, Transitive, Non-symétrique.
Ex.: Montrer que log(n!)=(nlogn) log(n!) O(nlogn)
log(n!) = log(1,2,3…, n) = (1..n) logn = n logn, avec c=1, n=1 donc log(n!) O(nlgn)
log(n!) (nlgn)
log(n!) lgi = lg1 + lg2 + … + lgn
2 n
lg
i n
i
2
lg 2
n
i n
n
( 1) lg
2 2
n n
n
1 1
2 2
n n
n
Cas n pair et n impair (…) (bla)
lg(n!) (nlgn), avec n=4, c=1/4 Devoir 1:
#1: ok
#2: ok
#3: plus simple en faisant la limite de lim f/g=lim 2n2n/2n=lim 2n Utile à noter: lg(n!) ≥ ¼nlgn, n≥4
Ex.:f(n)=(log(n!n) + nn^2) log(n!) ) (n3(logn)2) Prenons n! ≤ nn
On a: n!n ≤ (nn)n = nn^2 n!n + nn^2 ≤ 2 nn^2
log(n!n + nn^2) ≤ lg2 + lg nn^2 = 1 + n2lgn
≤ 2n2lgn n ≥2
etc.
Ex.:Montrer que lgn O(n)
lg 1/ 2
lim lim lim 0
1/ 2
n n n
n n
n n n
, ce qui implique: lg(n) O(n)Ex.:Donner l'ordre des fonctions par O: nlgn nlogn nn 2n (ils sont en ordre maintenant)
lg lg 1
lg lg
lim
nlim
n0
n n
n n n
n n
, ce qui implique: O(nlgn) O(nlgn)lg lg
lim lim 0
n n n
n n n
n n
n
, car lgn - n < 0, ce qui implique: O(nlgn) O(nn)ln( ) ln
ln ln 2 (ln ln 2)
ln 2 ln 2
lim lim lim lim lim 0
2
n
n
n n n n
n n n n n n
n n
n n n n n
n e e
e e
e e
, car lnn - nln2 < 0Ex.:a, b ≥ 0 Montrer que (n+a)b = (nb)
( )
lim lim lim 1 1
b b
n
n b n n
n a n a a
n n n
, cqfdEx.:Ordonner par O: O(1/n) O(lgn) O(n) O(n2) O(lgnlgn) O((n)lgn O(2lgn^2) O(2n!) O(2n!)
Cours 5, lundi 23 janvier 2006
n=O(1) = {t(n): ≤0 | t(n)=ng(n), g(n) O(1) = {t(n) | f {h(n) | g(n) O(1) n0 t.q. t(n) = f(n)g(n) } O(1) = {g(n) | c > 0 n0 n>n0 g(n) ≤ c}
nO(1) = ?
t(n) = ng(n) ≤ nc ≤ n c nk
Soit t(h) ≤ p(n) où p(n) est un polynôme
0
k i
i i
a n
, ak > 0Alors t(n) nO(1) car p(n) ≤ cnk+1 pour n≥n0
nO(1) = {t(n) |
0
k i
i i
a n
, ak > 0 n0 n≥n0 t(n) ≤ p(n) } Rappel: f(n) (g(n)) ssi c,d + n0 t.q. n≥n0 cg(n) ≤ f(n) ≤ dg(n)Exemple trivial pour la suite: (Recherche dichotomique?) [nota: tn == t(n)]
t(1) = 0 (ou 1 si pas là, pas important puisque constant)
2 2
1
( )1
n t n tn
t
Si on suppose que n=2k, ceci devient facile:
t(1) = 0
t(n) = tn/2 + 1 = tn/4 + 2 = … =
2k
t
n k k
On a donc t(n) = lgn t(n) (lgn | n=2k )
Mais lgn est é.n.d. et lg2n = 1+lgn ≤ 2lgn (n≥2), donc lgn est lisse. En plus, t(n) est énd:
tn ≤ 1 1
2 2
1 1
nn t n
t
t
Donc le théorème nous dit que t(n) (lg n)
Récurrence:
t0 = do
t1 = d1
tk = dk
tn = fonciton de t0, …, tn-1 Ex.: tn = 3tn-2 – 2tn-1 0 = -tn + 3tn-2 – 2tn-1 0 = tn – 3tn-2 + 2tn-1
0
:
k i n i0
i
R a t
Cette récurrence est linéaire et homogène.On cherche une fonction tn = t(n) qui vérifie R.
Exemple de tantôt: n = 2k tn = tn"2 + 1
t(n) = lg n Mais comment on y arrive?
Avec un peu d'expérience (une centaine d'essais):
Supposons que t(n) = xn
Alors on obtient
0
0
k n i
i i
a x
, l'équation caractéristique de R. De cette équation on tire son polynome caractéristique:0
( )
k i k ii
p x a x
. Notons que0
( )
kn k n i
i i
x
p x a x
.On voit que soit x=0, soit
0
0
k n i
i i
a x
ssi0
0
n k k k i
i i
x
a x
i.e.: p(x)=0 . Donc pour trouver une solution à R, il suffit d'en trouver une à p(x)=0.On observe que si fn et gn sont des solutions de R, alors cfn + dgn en est une pour tout c, d .
Soit fn, gn t.q.
0 k
0
i n i i
a f
et0 k
0
i n i i
a g
.Soit c, d des constantes. Alors
0 0 0
k k k
0
i n i n i i n i i n i
i i i
a f
g
c a f
d a g
Moral (par induction): Une combinaison linéaire de solutions en est une également.
Soit R une récurrence et soit p(x) son polynôme caractéristique qui est de deré k. Par la théorème fondamental d'algèbre, p(x) possède exactement k racines (dans , pas forcément distincts). Soit r1, …, rk ces racines. Par notre propositions, des solutions à R sont r1n, r2n, …, rkn et donc on a, par l'observation précédente, une solution générale (c1 … des cte):
c1r1n + c2r2n + … + ckrkn =
0
k n
i i i
c r
Si les racines sont distincts (ri != rj si i!=j) alors il ny a pas d'autres solutions.
Exemple:
1 2
0,1
5 6 1
n
n n
n si n
t t
t
si n
pour n ≥ 2 R: tn – 5tn-1 + 6tn-2 = 0 p(x) = x2 – 5x + 6
Posons: p(x)=0. Alors on trouve (x-2)(x-3)=p(x). Mes racines sont donc 2 et 3.
On constate que la solution générale est c12n + c23n
Mais, c120 + c230 = 0 et c121 + c231 = 1, donc c2 = 1 et c1 = -1 Donc tn = -2n + 3n !
Vérifions: -2n + 3n= 5(-2n-1 + 3n-1) – 6(-2n-2 + 3n-2)
= -32n-1 – 2n + 23n-1 + 32n-2 - 23n-1
= … (ok, bien sûr) Recette:
1. Récurrence obtenue de l'analyse
2.
On en fait0
:
k i n ii
R a t
3. On trouve le polynôme caractéristique p(x)
4.
On trouve les racines r1, …, rk de p(x)5.
Si elles sont distinctes, alors0
( )
k i ini
t n c r
6.
On trouve les ci à partir du système d'équation linéaires obtenueà partir des conditions initiales.Exercice lire: Chap3, 4…
Cours 6, jeudi 26 janvier 2006 Sur les récurrences…
0
:
k n n i0
i
R a t
1 2
0
( )
k i k i0 , ,...,
ki
p x a x
r r r
1
k n
n i i
i
t c r
, pourvu que ri rj si ijQue se passe-t-il si on a des racines multiples?
Supposons que p(r)=0 et r est une racine de multiplicité m, i.e. p(x)=(x-r)mq(x) où
1
( ) ( )
i
k i ir r
q x x r
On a que: p(r)=0En plus: p'(x) = m(x-r)m-1q(x) + (x-r)mq'(x) (on dérive m-1 fois) p'(r)=0
p(i)(r)=0, pour i=1, …, m-1 Fixons n: Soit
0
( )
k n ii i
i
u x a x
1 0
'( )
k n ii i
i
u x a x
1
0
( ) '( )
k n ii i
i
v x x u x a x
On sait que u1(r)=0, car u1(x)=xn-kp(x)
et u1'(r)=0, car u1'(x)=(u-k)xn-k-1p(x)+xn-kp'(x) (on obtient donc plusieurs solutions) Je peux créer des vj en dérivant u et multipliant par x …
On obtient:
0
( )
k i( )
j n ij i
v x a n i x
et vj(x)=0 pour j=1, …, m-1.On en conclu que tn = nrn, n2rn, n3rn, …, nm-1rn sont des solutions à R !
Soit
0
:
k n n i0
i
R a t
et p(x) son polynôme caractéristique. Soit r une racine de multiplicité m. On a donc rn, nrn, n2rn, …, nm-1rn comme solution de R et donc on a que1
0
m i n
n i
i
t
c n r
. Supposons que les racines de p(x) sont r1, …, rl, avec les multiplicités respectives m1, …, ml . La solution générale de R est:1
1 0
l m
n
n ij i
i j
t
c nr
Exemple:
1 2 3 4 5
0,1, 2,3, 4
8 25 38 28 8 sin
n
n n n n n
n n
t t
t
t
t
t
on
R: tn – 8tn-1 + 25tn-2 - 38tn-3 + 28tn-m – 8tn-5
p(x) = x5 – 8x4 + 25x3 – 38x2 + 28x – 8 on essaie 0, marche pas… on essaie 1, ok:
p(1)=0 p(x)= (x-1)(x4-7x3+18x2-20x+8
= (x-1)2(x3-6x2+12x-8)
= (x-1)2(x-2)3
Donc on a: l=2, r1=1, r2=2, m1=2, m3=3
tn = c101n + c11n1n + c202n + c21n2n + c22n22n = c10 + c11n + c202n + c21n2n + c22n22n
0 = c10 + c20
1 = c10 + c11 + c202 + c212 + c222 2 = c10 + c112 + c204 + c218 + c2216 3 = c10 + c113 + c208 + c2124 + c2272 4 = c10 + c114 + c2016 + c2164 + c22256
Démo 3, vendredi 27 janvier 2006 1a:
i:=n;
tant que i ≥ 1 faire début
pour j=1 à n faire x:=x+1 i:=i/ 2
fin
exécution 1: i=n 2: i=i/ 2
…
k: i=i/ 2k=1 O:
/ 2k 1
n
1 ≤ n/2k < 2 2k ≤ n < 2k+1 k ≤ lg(n) < k+1 k = lgn
( ) lg 1 ( lg )
f n n n n n f(n) O(lgn)
lgn
≤ lg(n) lgn
+1 ≤ lg(n) + 1 ≤ 2lg(n) n ≥ 2.
f(n) ≤ 2nlg(n) n ≥ 2.
c=2, n0=2.
f(n)O(nlgn)
:
f(n)(nlgn) lgn
+1 ≥ lgn n(lgn+1) ≥ nlgn f(n) (nlgn) 1b:
i:=2
tant que i < n faire début
i:=i2 x:=x+1 fin
exécution 1: i = 2 2: i = 22 = 4 3: i = 16 4: i = (22)3
… k: i = (22)k-1 (22)k-1 < n ≤ (22)k
(2)k-1 < lgn ≤ (2)k k-1 < lglgn ≤ k
f(n) = k = lg lgn (lglgn) lg lgn
≥ lglgn
f(n) (lglgn) lg lgn
≤ lglgn + 1 lg lgn
≤ 2lglgn f(n) O(lglgn) n≥4 donc f(n) (lglgn)
2: Montrer que (n-1) + (n) = (n) f(n) (n-1) + (n)
f(n) = f1(n) + f2(n) tel que f1(n) (n-1) et f2 (n) f1(n) O(n-1) et f2(n) O(n)
c1>0, n1≥0,n≥n1 f1(n) ≤ c1(n-1)
c2>0, n2≥0,n≥n2 f2(n) ≤ c2(n)
f(n) = f1(n) + f2(n) ≤ c1(n-1) + c2(n) = (c1 + c2)n – c1
≤ (c1 + c2)n c3 = c1 + c2
f(n) O(n)
c4>0, n4≥0,n≥n4 f4(n) ≤ c4(n-1)
c5>0, n5≥0,n≥n5 f5(n) ≤ c5n f(n) ≥ c4(n-1) + c5n = (c4 + c5)n – c4
≥ (c4 + c5)n – c4n n≥1 f(n) (n)
ou plus simplement:
f(n) ≥ f1(n)
f(n) (f2(n)) (n) f(n) (n)
donc f(n) (n) f(n) = f(n)/2 + f(n)/2
On montre que: f(n)/2 (n-1) et f(n)/2 (n).
On a f(n) (n) f(n)/2 (n) (par définition) f(n) O(n) on montre que f(n)/2 O(n-1)
c1>0, n1≥0,n≥n1 f(n) ≤ c1n
f(n)/2 ≤ c1n/2 ≤ c1n/2-(-c1n+3c1/2) -(-c1n+3c1/2) ≥ 0 -c1n+3c1/2 ≤ 0 -c1n ≤ -3c1/2 n ≥ 3/2 On a f(n)/2 ≤ 3c1n/2 – 3c1/2 = (3c1/2)(n-1)
c = 3c1/2, nmax(3/2, n1) f(n)/2 O(n-1)
f(n) (n) on montre que f(n)/2 (n-1)
c2>0, n2≥0,n≥n2 f(n) ≥ c2n f(n)/2 ≥ c2n/2 ≥ c2/2 = c2/2(n-1) c=c2/2 , n=n2
f(n)/2 (n-1)
DONC: (n-1) + (n) = (n) On n'a pas:(n) - (n-1) = (n)
Contre-exemple:
f1(n) = n (n) f2(n) n-1 (n-1) f1(n) - f2(n) = 1 (n)
4: Résoudre la récurrence suivante: fn+3 = 7fn+2 – 15fn+1 + 9fn f0=0, f1=1, f2=2 p(x) = x3 – 7x2 + 15x – 9 = 0
p(x) = (x-1)(x2-6x+9) = (x-1)(x-3)2 = 0 x=1, x=3(double)
fn = c1(1)n + c2(3)n + c3n3n = c1 + c23n + c3n3n f0 = c1 + c2 + 0 = 0 c1 = -c2
f1 = c1 + 3c2 + 3c3 = 1 (2) f2 = c1 + 9c2 + 18c3 = 2 (3)
(3) – 4x (2) 6c3 = -2 c3 = -1/3 c2=1 c1=-1
fn = -1 + 3n - n1/33n fn = 3n – n3n-1 – 1
3:
1 si n 1
( ) 3 ( / 2) sin
T n T n n on
, n puissance de 2.n T(n)
1 1
2 31+2
22 3(31+2) + 22
23 3(32 + 32 + 22) + 23 = 33 + 322 + 322 + 23
T(2k) = 3k20 +3k-121+ 3k-222+ … + 302k =
1
1 1
0 0
1 3
3 2
3 2 2 2 3 2
2 1 3/ 2
k
k k i
i k i k k k k
i i
n = 2k k = lgn
T(n) = 3lgn+1-2gn+1 = 3lgn3-22lgn = 3nlog3 - 2n T(n) (nlg3 \ n puissance de 2)
T(n)est non décroissante (par induction) nlg3 lisse
2-lisse f(2n) O(f(n)) car: (2n)lg3 = 2lg3nlgn O(nlg3)
et nlg3 est non décroissante cat lg3>1
donc, d'après le théorème du cours, on peut donc conclure:
T(n) (nlg3) (sans condition)
Cours 7, lundi 30 janvier 2006 Soit
0 0
:
k i n i l nj j( )
i j
R a t
b p n
où pj(n) est un polynôme en n de degré dj. Alors le polynôme caactéristique devient:
10 1
l
k k i d
i j
i j
a x
x b
et (donc), la solution générale est:
1
1 0 1 1
i i
m d
s s l
n j j n
n ij i ij i s
i j i s j
t c r n c n b
(pas utile de s'en souvenir par coeur)(Lecture 4.7, 4.8, 4.9) Exemples:
1- tn = -3tn-1 = 2n
équivalent à: tn-1 – 3tn-2 = 2n-1 on les soustrait: tn – 5tn-1 + 6tn-2 = 0 x2 – 5x + 6 = 0 (x-2)(x-3) tn = c12n + c23n
Testons…: c1 = 1, c2 = 0 tn = 2n
2n - 32n-1 = 2n oups! (on a perdu de l'information) Testons la solution générale: c12n + c23n – 3(c12n-1 + c23n-1) = 2n
c12n + c23n - 3c12n-1 – c23n = 2n1 c12n – (2+1)c12n-1 = 2n
-c12n-1 = 2n c1 = -2 (même sans conditions initiales!) tn = c23n – 2n+1 , donc tn (3n) si c2 > 0
Soit t0 la valeur initiale, on t0 = c2 – 2 c2 = t0 + 2
2-
tn – 3tn-1 = (n+2)2nOn veut encore une fois se débarasser de la droite.
On sait que: tn-1 – 3tn-2 = (n+1)2n-1, pas suffisant pour obtenir une constante multiplicative pour annuler la d Prenons aussi: tn-2 – 3tn-3 = n2n-2
On veut: (n+2)2n + c(n+1)2n-1 + dn2n-2 = 0 4(n+2)2n-2 + 2c(n+1)2n-2 + dn2n-2 = 0 4n + 8 + 2cn + 2c + dn = 0
(4+2c+d)n + 8 + 2c = 0 4+2c+d = 0
8+2c = 0
c = -4 , d = 4 on obtient donc notre récurrence homogène.
tn – 7tn-1 + 16tn-2 – 12tn-3 = 0
p(x) = x3 – 7x2 + 16x – 12 = 0 trouvons les racines…
p(x) = (x-3)(x2 – 4x + 4) = (x-3)(x-2)2 tn = c13n + c22n + c3n2n
Nota: p(x) de tn – 3tn-1 = 0 est de forme (x-b)di+1, avec b=2 et di = 1.
Testons la solution dans la récurrence de départ:
c13n + c22n + c32n – 3(c13n-1 + c22n-1 + c3(n-1)2n-1) = (n+2)2n c13n + c22n + c3n2n – c13n – c232n-1 – c33(n-1)2n-1 = n2n + 2n+1 c22n + c3n2n – c232n-1 – c3n2n-1 + c332n-1 – n2n – 2n+1 = 0
…
c2 = -10, c3 = -2 tn = c13n + 102n -2n2n (avec c1 > 0, n'importe quoi puisqu'il disparaît) tn (3n) 3- tn = 5tn/2 + 3n pour n=2k, et n>1.
On voudrait: T(i) = t2^i = 5t2^(i-1) + 3i = 5T(i-1) + 32i T(i) – 5T(i-1) = 32i
p(x) = (x-5)(x-2) p(x) = p(x)(x-b)l+1
0
:
k i n i n( )
i
R a t
b q n
où q est un polynôme en n de degré d, sp(x) est le polynome caractéristique de0
0
k i n i i
a t
. Alors le polynôme caractéristique de R devient p(x)(x-b)d+1. Nota: p = ^pT(i) = c15i + c22i Donc tn = c15lgn + c2n Testons si ça fonctionne:
3n + 5tn/2 = c15lgn + c2n
3n + 5(c15lg(n/2) + c2(n/2) = c15lgn + c2n 3n + c155lgn-1 + 5c2(n/2) = c15lgn + c2n (3-c2)n + 5c2(n/2) = 0
n(3-c2+(5/2)c2) = 0 3 = c2(1 - 5/2) c2 = - 2
tn = c15lgn – 2n donc c1 > 0 et en fait, on a besoin que c15lgn-2n > 0 c1 > 2n/5lgn c1 > 2 (approx.) 4- T(n) = nT3(n/3) n = 3i
On a: t(i) = i + 3t(i-1) (en prenant le log en base 3) En détail: On met n = 3i
t(3i) = 3t3(3i-1) u(i) = log3t(i) u(i) = i + 3u(i-1)
4(i) – 3u(i-1) = i donc b=1, p(x)=i (x-3)(x-1)2
u2(i) = c13i + c21i + c3i1i = c13i + c2 + c3i i + 3(c13i-1 + c2 + c3(i-1)) = c13i + c2 c3i c3 = -1/2 et c2 = -3/4
u(i) = c13i – ¾ - 1/2i
t(i) = 3u(i) = 3c13^I – ¾ -1/2I = 3c13^I 3-3/4 3-i/2
T(n) = 3c1n 33/4 3-log3(n)/2 = 3c1n 1/33/4n t0 > 0
Cours 8, jeudi 2 février 2006
Récurrences particulières du type:
( ) n
kT n l T c n
b
Dans une récurrence, on a souvent des valeurs initiales, donc on peut prendre n ≥ n0
Supposons que n/n0 = bi , i.e.: n = n0bi i=logb(n/n0)
1
0 0 0 0
( ) (
i)
i k ck( 1)
k( )
k it i T n b l T n b
cn b l t i cn b
( ) ( 1) 0k( )k it i lt i cn b (x l x b )( k) 0
1 2
( ) i ( )k i t i c l c b
log
1 2
0 0
( )
bl k
n n
T n c c
n n
Explication par exemple:
Soit: s=logba
Alors: rs=vlogb(a) = alogb(r)
logbrlogba = logbalogbr
Donc:
log
0
bd
d n n
Prenons: 3 1 log
0
1
bl
c c
n
, 40
2 1
kc c
n
log
3 4
( ) bl k
T n c n c n
log log
3 4 3 4
( ) ( / )
b b
l k
l
k k
n n
cn T n lT n b c n c n l c c
b b
4
1
k k
k
cn c n l
b
4
1
kc c
l b
On considère les possibilités de la relations entre l et bk : 1) 1 > l/bk [i.e.: c4 > 0] bk > l k > logbl
Alors: c n3 logbl c n4 k pour n ≥ n1
Donc: T(n)(nk | n=bk)
et on en tire que T(n)(nk) n, car nk est lisse et T(n) est é.n.d.
2) 1 < l/bk [i.e.: c4 < 0] bk < l k < logbl même raisonnement
Donc: T(n)(nlogb(l) | n=bk)... n
3) l=bk (dans le polynôme caractéristique, on a maintenant des racines multiples: (x-l)(x-bk)=(x-l)2 ) t(i) = c5li + c6lii = c5bki + c6bkiI rappel: (n/n0k) = bik
= c5(n/n0)k + c6(n/n0)ki
= c7nk + c8nklogb(n/n0) = lT(n/b) + cnk
c7nk + c8nklog(n/n0) = bk[c7(n/b)k + c8(n/b)klogb(n/bn0) + cnk] c8logb(n/n0) = c8log(n/bn0) + c = c8logb(n/n0) – c8 + c c8 = c > 0
T(n) (nk logb(n/n0)) (nklogn)
Démo 4, vendredi 3 février 2006
Ex1: Résoudre: T(n) = 2T(n/2) + n2 montrant que T(n) (n2) Posons n = 2k
T(n) = 2(2T(n/4) + n2/22) + n2
= 22T(n/22) + n2/2 + n2
= 22(T(n/23)+n2/24) + n2/2 + n2
= 23T(n/23)+n2/22+n2/2+n2
= 2kT(n/2k) + n2/2k-1 + ... + n2/20
1 1
2 2 2
0 0
1 (1/ 2)
2 (1) / 2 (1) (1/ 2) (1) 1
1 1/ 2
k k k
k i i
i i
T
n nT n
nT n
= nT(1) + n2(2-2/2k)
= nT(1) + 2n2 – 2n
= 2n2 + n(T(1) -2)
Donc: T(n) (n2 | n puissance de 2)
Comme: n2 est énd. f(n)=n2 f(bn)=b2n2 ≤ b2f(n), avec c=b2 Ok!
T(n) énd se montre par induction:
base: T(2) = 2T(1) + 4 ≥ T(1) ok
hypothèse: i < n T(i) ≥ T(i-1) Montrons que: T(n+1) ≥ T(n)
T(n+1) = 2T((n+1)/2) + (n+1)2
= 2T(n/2 + ½) + (n+1)2 On a: T(n) = 2T(n/2) + n2
T(n/2 + ½) ≥ T(n/2) T(n+1) ≥ 2T(n/2) + (n+1)2
≥ 2T(n/2) + n2 = T(n)
cqfd (T(n) est bel et bien énd) Ok!
Donc: T(n) (n2)
Devoir: Ok, #2 à la fin, pas pour tous les cas!, il faut démontrer lisse et énd.
Ex2: 2
1 2
1 si_ 0,1
3 2 3 2 sin
n n
n n
n n
t t
t
on
Polynôme caractéistique: (x2 – 3x + 2)(x-2)1 = 0 p(n)bn (x-1)(x-2)2 = 0
x=1, x=2 (mult 2)
tn = c1 + c22n + c3n2n t0 = 1 t1 = 2 t2 = 3t1 – 2t0 + 3 = 7 etc. c1 = 3 c2 = -2 c3 = 3/2
tn = 3 - 22n + (3/2)n2n = 3n2n-1 – 2n+1 3 tn (n2n)