• Aucun résultat trouvé

Cours IFT2121 – Introduction à l'algorythmique

N/A
N/A
Protected

Academic year: 2022

Partager "Cours IFT2121 – Introduction à l'algorythmique"

Copied!
1
0
0

Texte intégral

(1)

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.

(2)

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:NR≥0

order O(f) = {g: NR≥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: NR≥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.

(3)

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 à

k

i

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.

(4)

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:NR≥0 |  c Є R≥0 ,  n0 Є N ( n≥n0 et P(n) )  t(n) ≤ c.f(n) }

ex.: { t:NR≥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:NR, 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

ab

logba

b

logba.

On a également, pour tout k Є N, f(bkn) ≤ cbkf(n).

Donc

f ( an )  f ( b

logba

n )  f ( b

logba

n )  c

blogba

f ( 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.

(5)

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) ≤ cf(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) ≤ af(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 nb  a f b   b b   a c f b   a c f n

Si on prend acb comme la constante, on a que t(n) ≤ acbf(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) = an2 + bn + 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 = 4g(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):

(6)

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 2n2n/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 nn 2n (ils sont en ordre maintenant)

lg lg 1

lg lg

lim

n

lim

n

0

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(nn)

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 < 0

(7)

Ex.: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

  

                 

, cqfd

Ex.:Ordonner par O: O(1/n)  O(lgn)  O(n)  O(n2)  O(lgnlgn)  O((n)lgn  O(2lgn^2)  O(2n!)  O(2n!)

(8)

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) ≤ ncn  cnk

Soit t(h) ≤ p(n) où p(n) est un polynôme

0

k i

i i

a n

, ak > 0

Alors t(n)  nO(1) car p(n) ≤ cnk+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 cg(n) ≤ f(n) ≤ dg(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

n

n 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 i

0

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:

(9)

0

( )

k i k i

i

p x a x

 

. Notons que

0

( )

k

n 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

 

ssi

0

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 cfn + dgn en est une pour tout c, d  .

Soit fn, gn t.q.

0 k

0

i n i i

a f

 

et

0 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 c12n + c23n

Mais, c120 + c230 = 0 et c121 + c231 = 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)

= -32n-1 – 2n + 23n-1 + 32n-2 - 23n-1

= … (ok, bien sûr) Recette:

1. Récurrence obtenue de l'analyse

2.

On en fait

0

:

k i n i

i

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, alors

0

( )

k i in

i

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…

(10)

Cours 6, jeudi 26 janvier 2006 Sur les récurrences…

0

:

k n n i

0

i

R a t

 

1 2

0

( )

k i k i

0 , ,...,

k

i

p x a x

r r r

   

1

k n

n i i

i

t c r

 

, pourvu que ri  rj si ij

Que 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)mq(x) où

1

( ) ( )

i

k i ir r

q x x r

 On a que: p(r)=0

En plus: p'(x) = m(x-r)m-1q(x) + (x-r)mq'(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 i

i i

i

u x a x

 

1 0

'( )

k n i

i i

i

u x a x

 

 

1

0

( ) '( )

k n i

i i

i

v x x u x a x

   

On sait que u1(r)=0, car u1(x)=xn-kp(x)

et u1'(r)=0, car u1'(x)=(u-k)xn-k-1p(x)+xn-kp'(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 i

j 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 i

0

i

R a t

 

et p(x) son polynôme caractéristique. Soit r une racine de multiplicité m. On a donc rn, nrn, n2rn, …, nm-1rn comme solution de R et donc on a que

1

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

 

(11)

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

(12)

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 nn  n  n n f(n)  O(lgn)

lgn

 

  ≤ lg(n) lgn

 

 +1 ≤ lg(n) + 1 ≤ 2lg(n) n ≥ 2.

f(n) ≤ 2nlg(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)

(13)

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) ≤ c5n f(n) ≥ c4(n-1) + c5n = (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) ≤ c1n

f(n)/2 ≤ c1n/2 ≤ c1n/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) ≥ c2n f(n)/2 ≥ c2n/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

(14)

fn = -1 + 3n - n1/33n 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 31+2

22 3(31+2) + 22

23 3(32 + 32 + 22) + 23 = 33 + 322 + 322 + 23

T(2k) = 3k20 +3k-121+ 3k-222+ … + 302k =

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 = 3lgn3-22lgn = 3nlog3 - 2n 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 = 2lg3nlgn  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)

(15)

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:

 

1

0 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 - 32n-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 - 3c12n-1 – c23n = 2n1 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)2n

On 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 = n2n-2

On veut: (n+2)2n + c(n+1)2n-1 + dn2n-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

(16)

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 – c232n-1 – c33(n-1)2n-1 = n2n + 2n+1 c22n + c3n2n – c232n-1 – c3n2n-1 + c332n-1 – n2n – 2n+1 = 0

c2 = -10, c3 = -2  tn = c13n + 102n -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) + 3i = 5T(i-1) + 32i T(i) – 5T(i-1) = 32i

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 de

0

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 = ^p

T(i) = c15i + c22i Donc tn = c15lgn + c2n Testons si ça fonctionne:

3n + 5tn/2 = c15lgn + c2n

3n + 5(c15lg(n/2) + c2(n/2) = c15lgn + c2n 3n + c155lgn-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 + c3i1i = 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/2i

t(i) = 3u(i) = 3c13^I – ¾ -1/2I = 3c13^I  3-3/4  3-i/2

T(n) = 3c1n  33/4  3-log3(n)/2 = 3c1n  1/33/4n t0 > 0

(17)

Cours 8, jeudi 2 février 2006

Récurrences particulières du type:

( ) n

k

T 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 = n0bi  i=logb(n/n0)

1

0 0 0 0

( ) (

i

)

i k ck

( 1)

k

( )

k i

t iT n b   l T n b

cn b   l t i   cn b

( ) ( 1) 0k( )k i

t ilt i cn b (x l x b )(  k) 0

1 2

( ) i ( )k i t ic lc 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)

logbrlogba = logbalogbr

Donc:

log

0

bd

d n n

 

  

 

Prenons: 3 1 log

0

1

bl

c c

n

, 4

0

2 1

k

c c

n

log

3 4

( ) bl k

T nc nc 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

k

c 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 logblc 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 + c6bkiI rappel: (n/n0k) = bik

= c5(n/n0)k + c6(n/n0)ki

= c7nk + c8nklogb(n/n0) = lT(n/b) + cnk

c7nk + c8nklog(n/n0) = bk[c7(n/b)k + c8(n/b)klogb(n/bn0) + cnk] c8logb(n/n0) = c8log(n/bn0) + c = c8logb(n/n0) – c8 + c c8 = c > 0

T(n)  (nk  logb(n/n0))  (nklogn)

(18)

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

= 2kT(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) + 2n2 – 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 + c3n2n t0 = 1 t1 = 2 t2 = 3t1 – 2t0 + 3 = 7 etc. c1 = 3 c2 = -2 c3 = 3/2

tn = 3 - 22n + (3/2)n2n = 3n2n-1 – 2n+1 3 tn  (n2n)

Références

Documents relatifs

DESCRIPTION DU DÉPARTEMENT DES TRANSPORTS DES ÉTATS-UNIS (DOT) (Voie terrestre) Ce produit n’est pas considéré comme dangereux par le DOT pour le transport par voie

[r]

On commencera par le démontrer lorsque p et q sont dans un même ouvert de carte homéomorphe à une boule, puis on raisonnera par connexité. Mais par continuité uniforme, les

Le cas général est à 5 variables, donc trop lourd pour être traité comme ci-dessus.. Ce 2 ème cas toutefois ne comporte que des facteurs premiers à la

La diagonale AC traverse des carrés de côté unité et délimite à l'intérieur de certains d'entre eux des petits triangles rectangles (voir un exemple supra) dont la somme

Si ABCD est un rectangle alors AC=BD est une implication vraie (tous les rectangles ont des diagonales de même longueur). D'une façon générale, le fait qu'une proposition soit

Traduire en ´ecriture symbolique (`a l’aide de quantificateurs. .) la proposition sui- vante et d´eterminer sa valeur de v´erit´e :. � tout nombre r´eel est inf´erieur ou ´egal

Cette conjecture est démontrée dans [1] et [2] pour une grande famille d'extensions N de K ; les méthodes utilisées consistent à définir un ordre % de Z dans Q[G] contenant Z[G],