Algorithmie PC 1 : Complexité

Documents pareils
ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

4. Les structures de données statiques

Chapitre 2. Eléments pour comprendre un énoncé

Rappels sur les suites - Algorithme

Feuille TD n 1 Exercices d algorithmique éléments de correction

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

Suites numériques 3. 1 Convergence et limite d une suite

Algorithmes récursifs

Initiation à l algorithmique

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

Suites numériques 4. 1 Autres recettes pour calculer les limites

Algorithmique et structures de données I

OLYMPIADES ACADEMIQUES DE MATHEMATIQUES. 15 mars 2006 CLASSE DE PREMIERE ES, GMF

Définitions. Numéro à préciser. (Durée : )

Limites finies en un point

Sur certaines séries entières particulières

Université Paris-Dauphine DUMI2E 1ère année, Applications

STAGE IREM 0- Premiers pas en Python

Carl-Louis-Ferdinand von Lindemann ( )

Pour l épreuve d algèbre, les calculatrices sont interdites.

Continuité d une fonction de plusieurs variables

Leçon 01 Exercices d'entraînement

I. Polynômes de Tchebychev

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Corrigé des TD 1 à 5

Bases de programmation. Cours 5. Structurer les données

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Une forme générale de la conjecture abc

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

L exclusion mutuelle distribuée

1 Recherche en table par balayage

Image d un intervalle par une fonction continue

Filtrage stochastique non linéaire par la théorie de représentation des martingales

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

INTRODUCTION. 1 k 2. k=1

Triangle de Pascal dans Z/pZ avec p premier

Etude de fonctions: procédure et exemple

Cours de Probabilités et de Statistique

MIS 102 Initiation à l Informatique

Chapitre 5 : Flot maximal dans un graphe

Quelques tests de primalité

Licence 2 Mathématiques- Semestre 3 Introduction aux mathématiques

La fonction exponentielle

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

LES GENERATEURS DE NOMBRES ALEATOIRES

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Notes du cours MTH1101 Calcul I Partie II: fonctions de plusieurs variables

Chapitre 2 Le problème de l unicité des solutions

Distribution Uniforme Probabilité de Laplace Dénombrements Les Paris. Chapitre 2 Le calcul des probabilités

Fonctions de plusieurs variables, intégrales multiples, et intégrales dépendant d un paramètre

Cours d analyse numérique SMI-S4

Le produit semi-direct

Continuité en un point

Maple: premiers calculs et premières applications

Quelques algorithmes simples dont l analyse n est pas si simple

Modèles à Événements Discrets. Réseaux de Petri Stochastiques

Programmation Linéaire - Cours 1

Cours d Analyse. Fonctions de plusieurs variables

Algorithmique et Programmation, IMA

Théorème du point fixe - Théorème de l inversion locale

CCP PSI Mathématiques 1 : un corrigé

Comparaison de fonctions Développements limités. Chapitre 10

CONCOURS D ENTREE A L ECOLE DE 2007 CONCOURS EXTERNE. Cinquième épreuve d admissibilité STATISTIQUE. (durée : cinq heures)

Polynômes à plusieurs variables. Résultant

Séminaire TEST. 1 Présentation du sujet. October 18th, 2013

Algorithmique et Programmation

La programmation linéaire : une introduction. Qu est-ce qu un programme linéaire? Terminologie. Écriture mathématique

Initiation à la programmation en Python

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Calcul fonctionnel holomorphe dans les algèbres de Banach

Cours Informatique Master STEP

Cours Optimisation Partie Optimisation Combinatoire. Année scolaire Gérard Verfaillie ONERA/DCSD/CD, Toulouse

III- Raisonnement par récurrence

Le théorème de Perron-Frobenius, les chaines de Markov et un célèbre moteur de recherche

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Les arbres binaires de recherche

Algorithmes et mathématiques. 1. Premiers pas avec Python. Exo Hello world!

Logique. Plan du chapitre

Introduction à la théorie des graphes. Solutions des exercices

Programmation C. Apprendre à développer des programmes simples dans le langage C

Optimisation, traitement d image et éclipse de Soleil

La persistance des nombres

Cours d initiation à la programmation en C++ Johann Cuenin

Chapitre VI - Méthodes de factorisation

Bureau N301 (Nautile)

= constante et cette constante est a.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Commun à tous les candidats

Licence Sciences et Technologies Examen janvier 2010

Exercices du Cours de la programmation linéaire donné par le Dr. Ali DERBALA

Seconde Généralités sur les fonctions Exercices. Notion de fonction.

Calculateur quantique: factorisation des entiers

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

Transcription:

Algorithmie PC 1 : Complexité corrigé 1 Élements de complexité 1.1 Définitions Le nombre d opérations effectués ou la place mémoire prise par un programme est souvent notée en O(). Une définition mathématique de cette fonction peut être : Une fonction g(n) est en O(f(N)) (de l ordre de f(n)) s il existe deux constantes c 0 et N 0 tels que g(n) < c 0 f(n), pour tout N > N 0. 1.2 Jeux des différences 1.2.1 Quelle est la différence entre O(1) et O(2)? en notant f(n)=1 et g(n)=2 on a que pour tout N, f(n) < g(n) et g(n) < 3f(N). Ces deux fonctions sont donc équivalentes. On peut donner les règles suivantes : 1.2.2 O(f(N) + g(n)) = O(f(N)) + O(g(N)) O(A f(n)) = A O(f(N)) = O(f(N)) f(n) O(g(N)) = O(f(N) g(n)) Quelle est la différence entre O(N 2 + N 3 ) et O(N 3 )? De même que précédemment ces deux fonctions sont équivalentes. On a O(N 2 + N 3 ) = O(N 2 ) + O(N 3 ). Comme N 2 est en O(N 3 ), O(N 2 ) + O(N 3 ) = O(N 3 ) + O(N 3 ) = 2O(N 3 ) = O(N 3 ) 1

1.3 Calcul de complexité pour des algorithmes fictifs 1.3.1 Donnez une complexité de l algorithme suivant (et dites ce qu il fait) En dehors des boucles, il n y a qu une unique affectation. Il y a deux boucles im- Algorithme 1 Algorithme ne servant pas à grand chose n total=0 de i=1 a n-1 faire de j=i+1 a n faire total=total+1 Rendre k briqués, et à l intérieur des deux boucles une affectation, donc en O(1). Chaque boucle étant en O(n), la complexité de cet algorithme est en O(n 2 ). On peut bien sur regarder toutes les opérations une à une et on trouverait un nombre d opération égal à 1 + n(n-1)/2. L algorithme fait de nombreuses choses : il compte les boucles, calcule le nombre de sous-ensembles à 2 éléments d un ensemble à n éléments, etc... 1.3.2 Quel est la complexité d un algorithme qui, à partir de n données initiales, examine toutes les données, en supprime une et recommence (examen des données et suppression) jusqu à ce qu il n y ai plus de données. On peut utiliser la formule de récurrence C(N) = N + C(N 1), où C(N) est la complexité de l algorithme à N données. On a alors C(N) = N + N 1 + N 2 +... + 1 = N(N + 1)/2 2 Récursion 2.1 Définition La récursion est un principe fondamental en mathématique (la preuve par récurrence par exemple) et en informatique. Une définition simple de ce principe en informatique est qu un programme récursif s appelle lui-même. Pour éviter que le programme ne s appelle indéfiniment, il est nécessaire d avoir une condition d arrêt, qui, lorsqu elle est satisfaite empêche le programme de s appeler lui-même. 2

2.2 Factorielle La définition mathématique de la fonction factorielle est pour tout entier N : { N! = N (N 1)! pour N 1 0! = 1 Voici une version algorithmique de l équation : Algorithme 2 Algorithme Factorielle(N) N Si N = 0 Alors Rendre 1 Sinon Rendre N*Factorielle(N-1) 2.2.1 L algorithme 2 calcule-t-il bien une factorielle? Ben oui, il calcule bien ce qu il faut. On le prouve par récurrence. Pour n = 0 on a bien que Factorielle(0) = 1 = 1!. On suppose donc que pour n 0, Factorielle(n) = n!. Pour n + 1. L algorithme retourne (n + 1) F actorielle(n). Par hypothèse de récurrence Factorielle(n) = n!, donc Factorielle(n+1) =(n+1)*factorielle(n) = (n+1)*n! = (n+1)!. 2.2.2 Quel est le domaine de définition l entier N de l algorithme 2? Que se passe-t-il si N est en dehors de son domaine? Le domaine de définition est l ensemble des entiers naturels. Si N est un réel ou un entier négatif, l algorithme ne s arrête pas. Pour pallier ce problème on peut changer le test si N=0 alors rendre 1 par si N 0 alors rendre 1 2.2.3 Quelle est la complexité de l algorithme 2? Encore une fois, on va calculer sa complexité par récurrence. Soit C(N) le nombre d opération effectué par l algorithme 2. On a C(0) = 1, puisqu il y a une affectation (on ne compte pas le test comme une opération ici). De plus, C(N) = 1 + C(N-1) pour N > 0 puisque l on multiplie le résultat de Factorielle(N-1) à N. 3

Ainsi, C(N) = 1 + C(N-1) = 1 + 1 + C(N-2) =... = N + C(0) = N+1. Le calcul de Factorielle avec l algorithme 2 est donc en O(n). 2.3 Fibonacci La définition mathématique de la suite de Fibonacci (destinée initialement à compter le nombre de lapin génération après génération. Le problème initial, proposé en 1202 était en effet : Partant d un couple, combien de couples de lapins obtiendrons-nous après un nombre donné de mois sachant que chaque couple produit chaque mois un nouveau couple, lequel ne devient productif qu après deux mois.) est pour tout entier N : { F (N) = F (N 1) + F (N 2) pour N 2 2.3.1 F (0) = F (1) = 1 S inspirer de l algorithme 2 pour écrire un programme récursif calculant la suite de Fibonacci. Algorithme 3 Algorithme Fibonacci(N) N Si N 1 Alors Rendre 1 Sinon Rendre Fibonacci(N-1) + Fibonacci(N-2) 2.3.2 Calculer le nombre d appels au programme Fibonacci lors de l exécution de Fibonacci(n). Lorsque N vaut 0 ou 1, le nombre d appel est égal à 1. Pour N 2, le nombre d appel à Fibonacci est égal au nombre d appels de Fibonacci(N-1) plus le nombre d appels de Fibonacci(N-2) plus 1. Le nombre d appel à Fibonacci pour l algorithme 3 est donc égal à 2*Fibonacci(N)-1, et est donc en O(Fibonacci(N)). Pour calculer le nombre d appels précisément, on va trouver un équivalent à Fibonacci(N). La suite Fibonacci(N)/Fibonacci(N-1), si elle converge, converge vers Φ = 1+ 5 2 qui est la solution positive de l équation x = 1 + 1/x. En effet, on a Fibonacci(N)/Fibonacci(N-1) = 1 + Fibonacci(N-2)/Fibonacci(N-1) et donc si 4

la limite L existe elle satisfait L = 1 +1/L. Cette équation nous montre de plus que pour tout N, Fibonacci(N)/Fibonacci(N-1) >1. Il nous reste à montrer que Fibonacci(N)/Fibonacci(N-1) converge. En posant f(x) = 1+1/x, on a que Fibonacci(N)/Fibonacci(N-1) -Φ = f(fibonacci(n- 1)/Fibonacci(N-2)) -f(φ). La formule des accroissements fini nous indique donc qu il existe c dans [min{fibonacci(n-1)/fibonacci(n-2), Φ}, max{fibonacci(n- 1)/Fibonacci(N-2), Φ}] tel que : f(fibonacci(n-1)/fibonacci(n-2)) -f(φ) = f (c)((fibonacci(n-1)/fibonacci(n- 2)-Φ). Comme f (x) = 1/x 2 et que c > 1, on a que 0 < f (c) < 1. Ainsi : Fibonacci(N)/Fibonacci(N-1) Φ A (Fibonacci(N-1)/Fibonacci(N-2) Φ), avec A < 1. De là, Fibonacci(N)/Fibonacci(N-1) Φ A N 2 1 Φ et donc Fibonacci(N)/Fibonacci(N-1) converge bien vers Φ. Cette convergence nous permet ensuite de conclure que Fibonacci(N) est équivalent à Φ N. Le nombre d appel à Fibonacci est donc en O(Φ n ). 2.4 Conclusion? Un nombre d appel exponentiel, c est trop! L algorithme proposé n est pas un bon algorithme pour calculer la suite de Fibonacci. La raison en est que beaucoup beaucoup de choses sont calculées plusieurs fois. Par exemple Fibonacci(N-2) est calculée pour Fibonacci(N) et pour Fibonacci(N-1). Il faut trouver un moyen de ne calculer les choses qu une et une seule fois. 2.5 Proposez un algorithme itératif calculant la suite de Fibonacci, et donner en sa complexité. La complexité est en O(N). Ce qui n a rien à voire avec O(Φ n ). 3 Trop Poly pour être honnête On représente un polynôme P (x) = a 0 + 1 i n a ix i de degré n par un tableau tab de taille n + 1 tel que tab[i]=a i (0 i n). 3.1 Proposez un algorithme permettant de calculer la somme de deux polynômes P (x) et Q(x) de même degré n. Quel est sa complexité? La complexité de cet algorithme est clairement en O(n). 3.2 Proposez un algorithme permettant de calculer le produit de deux polynômes P (x) et Q(x) de même degré n. Quel est sa complexité? 5

Algorithme 4 Algorithme Fibonacci(N) N Si N 1 Alors Rendre 1 fib1 = 1 fib2 = 1 fib=0 de i=2 a i=n faire fib=fib1+fib2 fib2 = fib1 fib1 = fib Rendre fib Algorithme 5 somme de deux polynômes n degré max des polynômes P, Q les deux tableaux correspondant aux polynômes de i=0 a i=n faire R[i] = P[i]+Q[i] Rendre R Algorithme 6 Produit de deux polynômes n degré max des polynômes P, Q les deux tableaux correspondant aux polynômes de i=0 a i=2n faire R[i] = 0 de i=0 a i=n faire de j=0 a i=n faire R[i+j] = R[i+j] + P[i]*Q[j] Rendre R 6

La complexité est en O(n 2 ). La première boucle est en effet en O(n) et la double boucle en O(n 2 ) puisque les opérations effectuées dans chacune des boucles est en O(1). 3.3 Proposez un algorithme permettant de calculer la valeur d un polynôme P (x) de degré n pour une valeur x 0 donnée. On pourra utiliser la fonction puissance(x,p) qui calcule la valeur de x p. Quel est la complexité de cet algorithme? Algorithme 7 Évaluation d un polynôme n degré max du polynôme x valeur P le tableau correspondant au polynôme eval = 0 de i=0 a i=n faire eval = eval + P[i]*puissance(x,i) Rendre eval Òn suppose ici que puissance(x,0) = 1 quelque soit x. La complexité de cette algorithme est lié à la complexité de puissance, qui effectue i multiplications pour évaluer puissance(x,i). L algorithme effectue ainsi de l ordre de 1+2+3+...+n opérations. Comme 1+2+3+... +n = n(n+1)/2, la complexité de l algorithme est O(n 2 ). 3.4 Méthode de Horner La méthode de Horner consiste à écrire un polynôme P (x) = a 0 + 1 i n a ix i de la façon suivante : P (x) = a 0 + x(a 1 +...x(a n 1 + a n x)...). Ainsi, le polynôme P (x) = 1 + 2x 6x 2 + 3x 3 + x 4 s écrira P (x) = 1 + x(2 + x( 6 + x(3 + x))). Cette utilisation finaude du parenthèsage va nous permettre pardon vous permettre de créer un algorithme d évaluation d un polynôme avec une complexité moindre que celui de la partie 3.3. Cet algorithme permet de ne pas recalculer les puissances de x à chaque fois. De là, la complexité de l algorithme devient O(n). 7

Algorithme 8 Évaluation d un polynôme, le retour n degré max du polynôme x valeur P le tableau correspondant au polynôme eval = P[n] de i=n a i=0 faire eval = P[i]+ eval*x Rendre eval 8