Sur la Complexité d une Fonction Récursive
3 pages
Français

Sur la Complexité d'une Fonction Récursive

Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
3 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

Calculer la complexité d’une fonction consiste à trouver combien coûte un appel à cette fonction,en choisissant au préalable une unité de mesure (nombre d’opérations, espace mémoire consommé, temps de calcul).

Sujets

Informations

Publié par
Nombre de lectures 178
Langue Français

Extrait

Sur la Complexité dune Fonction Récursive(cours n°7)jpr, L1 Info & Math Calculer lacomplexitédune fonction consiste à trouver combiencoûteun appel à cette fonction, en choisissant au préalable une unité de mesure (nombre dopérations, espace mémoire consommé, temps de calcul). Quelques exemples : • La factorielle : (define (fac n); calcule n! pour n0  (if (= n 0)  1  (*n (fac (- n 1))))) Si lon sintéresse au nombre de multiplications, lappel à(fac n)demande n-1 multiplications. Or, on sintéresse à ce qui se passe lorsque n est grand, donc on assimile n-1 à n et on dit quon a unecomplexité dordre n(linéaire, du premier degré en n) en le nombre de multiplications. N.B. Notez que lacomplexité en temps estbien plus élevée [le calcul exact pour n=20000 demande beaucoup plus que deux fois le temps de calcul pour n=10000], comme quoi il est essentiel de préciser ce que lon mesure. La phrase la complexité est en O(n)» na en soi aucun sens. Voir lexercice 6.8.12 du livre PCPS... • Lʼappartenance à une liste L [cours 7] : (define (member x L); xL ?  (cond ((empty? L) false)  ((equal?x (first L)) true)  (else(member x (rest L))))) Il sagit duneanalysede liste, on sintéresse souvent aunombre dappels à la primitiver e s t, ici durant lexécution de(member x L) surune liste L de n éléments. Il se peut que lon trouve lélément tout de suite en tête [lemeilleur cas] ou que lon soit obligé daller jusquau bout de la liste [lepire des cas, en n coups]. On donne souvent lerésultat de la complexité dans le pire des cas. On notera O(n) pour exprimer : linéaire dans le pire des cas. Notez que si lon fait 2n étapes de calcul, on dira encore O(n) : on omet les constantes multiplicatives, sauf bien entendu si lon veut procéder à une analyse plus fine, par exemple pour comparer deux algorithmes !
RESUME : Lorsquon dit quun algorithme est en O(n), cela signifie quedans le pire des cas, il aura un coût [nombre dopérations, temps de calcul, etc] proportionnel à n. Vous verrez en 1 Maths, ou plus tard en cours dAlgorithmique, des définitions plus précises. 1 Si vous êtes impatient, tapez dans Google “notations de Landau” et lisez larticle de la Wikipédia.
• Le tri par insertion
(define (tri-ins L)  (local [(define (insertion x LT)  (cond((empty? LT) (list x))  ((<=x (first LT)) (cons x LT))  (else(cons (first LT) (insertion x (rest LT))))))]  (if(empty? L)  L  (insertion(first L) (tri-ins (rest L))))))
Lanalyse est ici un peu plus fine, et dans ce cas, les maths – domaine ultime de la rigueur – vont nous sauver. Notonscncomplexité du tri dune liste de longueur n. Comme il sagit dun la problème deconstructionliste, on mesure en général dele nombre de fois que la primitive c o n sa été appelée durant lexécution de lalgorithme. La technique consiste à lire la définition de la fonction, et à la traduire en un système déquations sur(cn).
-Le coût de linsertion dun élément à sa place dans une liste triée LT de longueur n est clairement en O(n) puisque dans le pire des cas, linsertion se fera en queue de liste. -La première ligne du corps de la fonctiontri-insexprime que le tri dune liste vide L est égal à L, sans utilisercons. Donc coût = 0 : c=0 0 -Dans le cas général on doit faire lasommede plusieurs coûts : (insertion (first L) (tri-ins (rest L)))c=c+O(n) n n"1 O(n)c0 n"1Reste à résoudre les équations. Dans ce cas il est facile [cf cours 6 page 17] de trouver la valeur n(n+1) exacte du terme généralcn=. En ne conservant que le terme de plus haut degré et en 2 2 oubliant les constantes multiplicatives, il vient unecomplexité en O(n)lalgorithme est : quadratique [du second degré]. Ce nest pas un bon algorithme de tri puisque les meilleurs ont une complexité enO(n log n), juste au-dessus de la complexité linéaire. En général, les équations à résoudre sont souvent plus difficiles et seule une bonne habileté mathématique permet de trouver un équivalent à linfini du terme général de la suite [cf exo 6.9b].On peut aussi utiliser des logiciels de calcul formel commeMaple,Mathematica ou Maximaqui sont souvent capables de tels exploits dd+1 c c+O nc=O nrez en cours N.B. Plus généralement, la solution den=n"1( ) estn( ). Vous ver dAlgorithmique de L2 les solutions des principales équations de récurrence de ce type.
Quatre remarques 1.Dans le cas général du tri par insertion, nous avions dit que le coût de(first L)était nul. En réalité, il ne lest pas, mais ce coût ne dépend pas de L, il est constant. Lecoût constant senote O(1). Donc par exemple O(1) + O(n) = O(n), daccord ? Ces notations sont un peu dangeureuses mais les matheux font sans cesse des abus de langage et décriture sans lesquels tout texte mathématique deviendrait pédant et illisible Il est clair quon ne peut faire mieux quun algorithme en O(1) ; hélas il y en a peu de ce type. Lesmeilleurssont plutôt les algorithmeslogarithmiques, de coût O(log n). Vous n en connaissez au moins un exemple : le nombre de multiplications dans le calcul dex2 par dichotomie. Mais la plupart des algorithmes courants ont un coût entre O(n) et O(n ). 2.Dans le cas duneconstructionde liste, il se peut quil soit aussi nécessaire de procéder à uneanalysesimultanée dune autre liste. Tiens, le tri par exemple ! On parcourt une liste et on produit une autre liste : algorithme de tranformation. Dans ce cas, il peut être intéressant de calculer à la fois le nombre dappels àrest etle nombre dappels àcons, puis de prendre le plus grand des deux. Imaginez la fonction qui analyse une liste L et qui construit une liste(mini maxi)formée du plus grand et du plus petit élément de L, quelle serait sa complexité ? O(n) bien entendu, pas 2 3.Nous ne ferons pas de choses plus compliquées que cela en complexité, en 1ère année ! 4.Si vous passez outre à la remarque 3, sachez quun très bon livre dAlgorithmique est Introduction à lAlgorithmiquechez Dunod), qui est à(par Cormen, Leiserson & Rivest, la B.U. Il contient aussi les analyses de complexité. Il est un peu difficile mais accompagnera la totalité de vos études. Les cours (pdf et vidéos) de ce livre sont disponibles au MIT : http://freevideolectures.com/Course/1941/Introduction-to-Algorithms Vouspouvez même les télécharger à partir deiTunes (gratuit)pour les consulter en podcast sur un baladeur numérique.Of course, you understand English, dont you ? And you are very motivated by computer science
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents