You are on page 1of 9
* Centre de CPGE ~Safi ~ Intormatique LA COMPLEXITE 1. DEFINITION DE LA COMPLEXITE D'UN ALGORITHME * La complexité d'un probléme mathématique P est une mesure de la quantité de ressources nécessaires & la résolution du probléme P, * Cette mesure est basée sur une estimation du nombre d'opérations de base effectuées par I'algorithme en fonction de la taille des données en entrée de l'algorithme. * Généralement, pour le méme probléme P, on peut trouver plusieurs algorithmes (Aligss AlgaisiAlGe). *_Uobjectif de la complexité est d'évaluer le cotit d'exécution de chaque algorithme afin de choisir le meilleur. Problem. Comment évaluer le coi d'exécution d'un algorithme donné? 2. TYPES DE COMPLEXITE En fonction des ressources utilisées pour évaluer la complexité d'un algorithme, on sera amené distinguer deux types de complexité: complexité temporelle et complexité spatiale. Complexité temporelle (en temps) La complexité temporelle d'un algorithme est le nombre d'opérations élémentaires (affectations, comparalsons, opérations arithmétiques) effectuées par un algorithme. Complexité spatiale (enespace) La complexité en mémoire donne le nombre d'emplacements mémoires occupés lors de l'exécution d'un programme. Remarque : Dans ce cours, nous nous intéressons uniquement & la complexité temporelle. 3. LANOTATION O :(Complexité asymptotique) Dé Soit T(n) une fonction qui désigne le temps de calcul d'un algorithme A. On dit que T(n) est en grand O de f(n): T{n}= Off (n)) si et seulement si: In N*, Jc € RB, Vin >= no :T(n) <= *F (n). cxf(n) T(n) = O(f(n)) 3 notation Off (n)) est aussi appelée Notation de Landau : (Complexité asymptotique) (I.e.quand n -> 0) 1/4 Prouvons que la fonction T(n)=3n +6 est en O(n) (on écrit aussi 3n +6<0(n)) But: trouver une constantec Ret ‘un seuil no N*, & partir du quel T(n) 2 a216<912 3°346.<9"3 345.94 (On déduit done que c=9 fonctionne & partie d'un seull n=? 3°5+6.9°5, Remarque: ane demande pas doptimsation (le plus petit cou naqulfonctionne, juste de donner des valeurs qui fonctionnent; ‘€=10 et np=5 est donc aussi acceptable; 39546 <10°2 3°616<10°3 3°746 <10°4 Exemple2; Prouvons que la fonction : T(n}= 17? +3n est en O(n?) But: trouver une constante ¢ €Ret un seuil gé N*, & partir duquel Tn) 3 (On déduit donc que c=2 fonctionne & partir d'un seuil ng=3 4, CLASSES DE COMPLEXITE LES PLUS USUELLES On voit souvent apparaitre les complexités suivante: sex rarel Ou) cae ‘Le temps d'exécution ne dépend pas des données traltées, ce a Ofioginy) | Logarithmique | augmentation tres faible du temps d'exécution quand le paramétre colt. ‘augmentation linéaire du temps dexécution quand le parameétre croit(si le paramétre O%n) Hocaiee | double, te temps double). Quasi-ingaire | augmentation un peu supérieure & O(n) Ofniogta)) a quand fe paramdtre double temps dexdeton est muti part Example rrr) __| Quedrataue | gorithms avec deux boulesimbigues, me, ici, n* est le terme de plus haut degré d'un polyndme en n ; il n'est pas rare de voir des. a) Fe complexités en Ofn’) ou O(n4). a es Ve cécution est élevé a la puissance k avec k> 1. unde poraméte double letemps dexdeuton ext Ove) Exponentielle Gin) ractonens | sretoavemenEavatere di 2/4 Informatique Centre de CPGE -Safi- x Ontatineemerae, On appelle opération de base, ou opération élémentaire, toute: + Affectation; ‘* Test de comparaison: '* Opération arithmétique: Lecoditd'uneopération tenes égal a1. Exemple1; Que vaut le colt de I'algorithme A n+ #instri somme * n #instr2 somme/2 #instr3 On appelle opération composée, toute instruction contenant: ¢ _L’exécution d'une instruction conditionnelle : est) alors Qn Sinon 92 Finsi Le nombre d'opérations est: Codt(P) = Colt (test}+ max (Codit(Q1),Coat(az)) ion de nombre de répétitions par la somme du coGt © exécution d'une boucle : est égal 3 la multipl de chaque instruction xi du corps de la boucle; e; Coat (bouclefor)= F Coat(xi) Cofit(boucle while)= 5(Cotit(comparaison) + Coat(xi)) Lappel d'une fonction : Lorsqu'une fonction ou une procédure est appelée, le cot de cette procédure est le nombre total d'opérations élémentaires engendrées par l'appel de cette fonction, Exemple2: Que vaut le coat de l'algorithme B if i$2==0: n=i//2 else: asid1 n=i//2 Coiit (B}=Coat(i%62==0)+max(Coat(n = i//2),Coat{i=i+1, n=i//2)) =2+max(2,4)=6 Exempte3: Que vaut le coat de I'algorithme C i=l | while i <=n: somme=somme+i [_aesea oa E 3/4 ~ Centre de CPGE-Safi - Informatique Cout{C=l + SCout <=n) + Coat(somme = somme + 1) ¥ Coat = t +1) =14n42n42n =145n . Lanotation 0 :motivat + Les calculs a effectuer pour évaluer le temps d'exécution d'un algorithme peuvent parfols étre longs et pénibles; De plus, ledegré de précision qu'ils requiérent est souvent int ‘Onauradoncrecours a une approximation decetempsdecalcul présenté parla notation O(.); d. Régles de calcul : simplifications avant, mais on effectue les simplifications suivantes: * Oncalcule le temps d'exécution com © Onoublie les constantes mul © Onannule les constantes additives; ‘© Onne retient que les termes dominants; icatives (elles valent 1); ‘© _Exemple (simplifications) Soit un algorithme effectuant T(n) = 4n?- Sn? +2n +3 opérations; ‘© Onremplace les constantes multiplicatives par 1 pin? - In? +1n +3 © Onannule les constantes additives in? -n?+n40 in +0 © Ongarde le terme de plus haut degré Etona donc: T(n)= O(n?). 4/4 Centre de CPGE ~Safi - Informatique Complexité et récursivité Exemple : calcul récursif de la factor! def factorielle(n) : if return 1 else : return n*factorielle(n-1) Paramétre de complexite la valeur den n'y a qu'un seul cas d’exécution (pas de cas au pire ou au mieux) Sin #1, le calcul de la factorielle de n coGte une comparaison d’entiers, le calcul de la factorielle de n-1 et une tion d'entiers Sin =1, le calcul de la factor cofte une comparaison d'entiers On pose une équation de récurrence : appelons {n) la complexité c(n) = c{n-1) + cte sin # 1 c(1)=cte Equation : e{n) = c{n-1) +b Exemples : ation de fa moitié des éléments en ‘temps constant avant l'appel récursif, recherche Solution : e(n) = ¢(0) + b*n = O(n) dichotomique récursive 7 herche séquenti Exemples : factorielle, recherche séquentiel cqudn aa ST aE récursive dans un tableau Solution : e(n) = nlog2(a) *(c{1) — b/(1-a)) + b/(1-a) = Ofnlog2(a)), Equation : c{n) = a*ce(n-1) +b, a#1 Solution : e(n) = an*(c(0) — b/(1-a)) + b/(1-a) = Ofan) Exemples : répétition a fois d'un traitement sur le récursif dichotomic Exemples : répétition a fois d'un traitement sur le resultatidellappelfec Is mcienotmnigis résultat de l'appel récur Equation : c(n) = c{n/2) + a*n +b Equation : ¢{n) = c{n-1) +a*n +b Solution : ¢(n) = O(n) Solution : e(n) = ¢(0) + a*n*(n+1)/2 + n*b = O(n2). Exemples : traitement linéaire avant l'appel récursif dichotomique Exemples : traitement en coat linéaire avant l'appel récursif, tria bulle Equation : e{n) = 2*c(n/2) + a%n+b :e(n) =c(n/2)+b | Solution : ¢(n) = ¢(1) + b*log2 (n) = O(Jog(n)) Exemples : traitement linéaire avant double appel récursif dichotomique, tri fusion ai def RECH_DICHG.L): inf=0; sup=len(L)+1 while(inf<=sup ): (inf + sup)//2 2. Donner la complexité temporelle de cette fonction dans le meilleur cas, que l’on précisera. 3. Montrer que la complexité temporelle dans le pire cas est en O(log n) . Exercice N° 2: 1. Eerire une fonction récursive puissance! (x,n) de paramétres x et n qui retourne x". 2. Calculer sa complexité Exercice N° 3: 1. Eerire une fonction récursive puissance2(x.n) retourne x" en utilisant 'algorithme d'exponentiation rapide qui est basé sur la remarque suivante : on a a?¥=aP-aP et a??*!= aP-aP «a, Ainsi, pour calculer a??, il suffit de savoir calculer a? et de faire une multiplication, et pour calculer a??*!, i] suffit de savoir calculer a? et de faire deux multiplications. 2. Calculer sa complexité. def triSelection (Is): for j in range(0,len(Is)-1) : min=ls[j] posmin=j for i in range(j+1,len(Is)) : if Is[i] <= min : min= l|s[i] posmin=i Is[j],1s[posmin]= Is[posmin],|s[j] return Is def triBulles(Is): x=Ime 1 while x==True : x=False for i in range(0,len(Is)-1) : if(Is[i]>Is[i+1]): Is[i], 1s[i+1]=Is[i+1], er x=True return ls def tri_Insertion(T) : def tri_comptage(s): n=len(T) p= max(Is) for i in range(1,n): T=[0]*(p+1) x=T[i] fork in Is : ial T[KI=T[k}+1 while j>0 and T[j-1]>x : j=0 TUJ-TU-1) for i in range(len(T)): Jol for k in range(T[i]): TU}-x Is(j]=i return T jal return Is Exercice N°6 : \e Tri fusion le Tri fusion est construit suivant la stratégie « diviser pour régner ». Le principe de base de la stratégie est que pour résoudre un gros probleme, il est souvent plus facile de la diviser en petits problémes élémentaires. Une fois chaque petit probléme résolu, il n’y a plus qu’a combiner les différentes solutions pour résoudre le probléme global. CPGE MY ABDELLAU 27si2 veal ion. is l'ensemble de valeurs en deux parties » Tri de chacun des deux ensembles > Fusion des deux ensembles triés en une seule. L'implémentation de cet algorithme repose essentiellement en 2 fonctions : > Fusion :Permet de fusionner deux listes liste résultante la soit aus: > triFusion ; Une fonction récursive qui assure le découpage de la liste et l'appel de la fonction de fusion, es de telle sorte que la Schématiquement, le principe est le suivant : | Seer a Séparation| Se ¥ TH récursit z cern pa ee J Fusion eae (voit ine implementation ae cee atgortmey” def fusion(L1, L2): | | res=[] i,j=0,0 while i

You might also like