1 int factoriel(int n) { 2 int i, res; 3 res = 1; 4 for (i=2; i<n+1; i++) { 5 res *= i; 6 } 7 return res; 8 } 9 int binom1(int n, int p) {

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

Chapitre 7. Récurrences

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Quelques tests de primalité

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Nombres premiers. Comment reconnaître un nombre premier? Mais...

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Cryptographie et fonctions à sens unique

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

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

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

Cours de Master Recherche

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

Représentation d un entier en base b

Les arbres binaires de recherche

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

Licence Sciences et Technologies Examen janvier 2010

MIS 102 Initiation à l Informatique

Conversion d un entier. Méthode par soustraction

Résolution de systèmes linéaires par des méthodes directes

Chapitre VI - Méthodes de factorisation

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)

Baccalauréat ES/L Amérique du Sud 21 novembre 2013

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

Programmation linéaire

Comparer l intérêt simple et l intérêt composé

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Cryptographie. Cours 3/8 - Chiffrement asymétrique

Sites web éducatifs et ressources en mathématiques

Calculateur quantique: factorisation des entiers

Algorithmique et Programmation, IMA

Corrigé des TD 1 à 5

4. Les structures de données statiques

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Cours d algorithmique pour la classe de 2nde

Algorithmique I. Algorithmique I p.1/??

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

Cours 1 : La compilation

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

1 Recherche en table par balayage

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Initiation à l algorithmique

Cours 7 : Utilisation de modules sous python

Table des matières. I Mise à niveau 11. Préface

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Algorithmes de recherche

Rappels sur les suites - Algorithme

Rappels Entrées -Sorties

Section «Maturité fédérale» EXAMENS D'ADMISSION Session de février 2014 RÉCAPITULATIFS DES MATIÈRES EXAMINÉES. Formation visée

Systèmes de transmission

Examen Médian - 1 heure 30

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Programmation C++ (débutant)/instructions for, while et do...while

Informatique Générale

Représentation des Nombres

Problèmes arithmétiques issus de la cryptographie reposant sur les réseaux

Cryptologie et physique quantique : Espoirs et menaces. Objectifs 2. distribué sous licence creative common détails sur

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

UE Programmation Impérative Licence 2ème Année

Rapport d activité. Mathieu Souchaud Juin 2007

Algorithmique et Programmation

Introduction à l étude des Corps Finis

Calculer avec Sage. Revision : 417 du 1 er juillet 2010

0x700. Cryptologie Pearson France Techniques de hacking, 2e éd. Jon Erickson

ALGORITHMIQUE ET PROGRAMMATION En C

Programme de la classe de première année MPSI

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

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Quelques Algorithmes simples

Introduction à MATLAB R

COURS EULER: PROGRAMME DE LA PREMIÈRE ANNÉE

TP : Gestion d une image au format PGM

Baccalauréat ES Pondichéry 7 avril 2014 Corrigé

I- Définitions des signaux.

Initiation. àl algorithmique et à la programmation. en C

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Gestion des Clés Publiques (PKI)

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

V- Manipulations de nombres en binaire

Chapitre 3. Quelques fonctions usuelles. 1 Fonctions logarithme et exponentielle. 1.1 La fonction logarithme

Algorithmes de recherche d itinéraires en transport multimodal

UE C avancé cours 1: introduction et révisions

Algorithmique & programmation

Machines virtuelles Cours 1 : Introduction

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

La fonction exponentielle

Technique opératoire de la division (1)

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

Communications collectives et ordonnancement en régime permanent pour plates-formes hétérogènes

Quatrième partie IV. Test. Test 15 février / 71

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

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Programmes des classes préparatoires aux Grandes Ecoles

Quelques algorithmes simples dont l analyse n est pas si simple

Solutions du chapitre 4

Transcription:

Un problème concret IN 101 - Cours 04 30 septembre 2011 Laquelle de ces deux fonctions est la meilleure? 1 int factorielint n { 2 int i, res; 3 res = 1; 4 for i=2; i<n+1; i++ { 5 res *= i; 6 } 7 return res; 8 } 9 int binom1int n, int p { 10 return factorieln/factorielp/factorieln-p; 11 } présenté par Matthieu Finiasz 1 int binom2int n, int p { 2 if p==0 n==p { 3 return 1; 4 } else { 5 return binom2n-1,p-1 + binom2n-1,p; 6 } 7 } Qu est-ce que la complexité? La notion centrale en algorithmique La complexité d un algorithme mesure son efficacité intrinsèque : en fonction de la taille des données àtraiter, asymptotiquement, dans le pire cas, ou en moyenne. La notion de complexité En pratique, pour une entrée de taille n : on compte le nombre d opérations de base nécessaires, on regarde comment ce nombre évolue asymptotiquement. Il s agit en général de complexité temporelle on s intéresse souvent aussi àlacomplexité spatiale.

1 unsigned int sum_of_squaresunsigned int n { 2 unsigned int sum = 0; 3 int i; 4 for i=1; i<n+1; i++ { 5 sum += i*i; 6 } 7 return sum; 8 } Un premier exemple simple Pour une simple boucle for la complexité est facile àcalculer: la taille de l entrée est n la fonction fait n multiplications et n additions la complexité estlinéaire en la taille de l entrée. Un peu de réflexion permet de calculer cela en temps constant : sum of squaresn = nn+12n+1 6 2 additions, 3 multiplications, une division. Définitions : f n =O gn si c > 0, n 0 N, n n 0, f n =Θ gn si c, c > 0, n 0 N, n n 0, Notations de complexité Comparaison asymptotique 0 f n c gn. Exemples : n 2 + n +1=Θ n 2 = Θ 2000n 2 + 1000000 logn =O n n logn = O n c gn f n c gn. logn n n n logn n 2 n 3 2 n expn n! n n 2 2n Définitions : Complexité polynomiale souvent réalisable k > 0, f n =On k. Complexité exponentielle en général irréalisable b > 1, b n = Of n. Complexité doublement exponentielle par exemple : f n =2 2n. Complexité sous-exponentielle par exemple : f n =2 n. Notations de complexité Comparaison asymptotique logn n n n logn n 2 n 3 2 n expn n! n n 2 2n Quelques ordres de grandeur Un PC standard fait de l ordre de 2 30 opérations binaires par seconde 2 40 opérations simples réalisable par tout le monde. Les records actuels sont un peu au-delà de2 60 opérations binaires réalisable par des gens motivés NSA, Folding@home... En cryptographie on considère que 2 80 opérations binaires sont irréalisables aujourd hui Clefs de 128 bits sûres pour quelques dizaines d années.

Le problème La suite de Fibonacci Premiers exemples : Un problème - quatre algorithmes On cherche àcalculerf n,len-ième nombre de la suite de Fibonacci : F 0 =0etF 1 =1 F n = F n 1 + F n 2 pour n > 1 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,... On sait faire le calcul direct : suite récurrente double à coefficients constants on résout x 2 = x +1 r 1 = ϕ = 1 2 1 + 5 et r 2 =1 ϕ = 1 2 1 5 F n = 1 5 ϕ n 1 ϕ n. r 2 0.62 donc pour n > 1, F n est l entier le plus proche de ϕn 5. Fibonacci Algorithme 1 Version récursive bête Fibonacci Algorithme 2 Version avec mémoire 1 unsigned int fibo1unsigned int n { 2 if n < 2 { 3 return n; 4 } 5 return fibo1n-1 + fibo1n-2; 6 } Ici, la complexité est le nombre d appels à fibo1 le résultat se décompose en une somme de F 1 et F 0 : F 4 = F 3 + F 2 = F 2 + F 1 +F 1 + F 0 = F 1 + F 0 +F 1 + F 1 + F 0 F 1 =1etF 0 = 0 donc il y a au moins F n appels récursifs la complexité estθ F n =Θ ϕ n. On ne veut pas recalculer plusieurs fois la même valeur F i on utilise un tableau pour stocker tous les F i. 1 unsigned int fibo2unsigned int n { 2 unsigned int* fib = int* mallocn+1 * sizeofint; 3 int i; 4 fib[0] = 0; 5 fib[1] = 1; 6 for i=2; i<n+1; i++ { 7 fib[i] = fib[i-1] + fib[i-2]; 8 } 9 int res = fib[n]; 10 freefib; 11 return res; 12 } Complexité deθ n mais complexité spatialede Θ n aussi.

Fibonacci Algorithme 3 Version sans mémoire On constate que chaque élément du tableau n est lu que 2 fois : aux étapes i +1eti + 2 de la boucle. 1 unsigned int fibo3unsigned int n { 2 unsigned int fib0 = 0; 3 unsigned int fib1 = 1; 4 int i; 5 for i=2; i<n+1; i++ { 6 fib1 = fib0 + fib1; 7 fib0 = fib1 - fib0; 8 } 9 return fib1; 10 } Complexité deθ n toujours mais complexité spatialedeθ 1 maintenant. Fibonacci Algorithme 4 Version optimale On utilise le calcul direct, mais on évite les nombres flottants. On a : Donc : F n = 1 F n 1 +1 F n 2 F n 1 = 1 F n 1 +0 F n 2 Fn F n 1 = = 1 1 1 0 n 1 1 1 1 0 Fn 1 F n 2 F1 Simple problème d exponentiation matricielle résolu en TD 04 complexité Θ logn complexité spatialeθ 1. Note : les valeurs propres de la matrice sont ϕ et 1 ϕ. F 0 Temps de calcul pour les quatre algorithmes : Comparaison des quatre algorithmes Théorie et pratique sont d accord n 40 2 25 2 28 2 31 fibo1 Θ ϕ n 31s calcul irréalisable fibo2 Θ n 0s 18s Segmentation fault fibo3 Θ n 0s 4s 25s 195s fibo4 Θ logn 0s 0s 0s 0s Méthodes de programmation

Algorithme glouton Programmation dynamique Un algorithme glouton est un algorithme itératif qui à chaque étape essaye de s approcher au maximum de la solution. Par exemple : le rendu de monnaie : quelle somme de billets/pièces permet d atteindre une valeur donnée? Pour rendre 37 euros, on calcule 37 = 20 + 10 + 5 + 2. les valeurs des billets/pièces font que la solution est optimale. le problème du voyageur de commerce : quel est le plus court chemin passant par n villes données? On va toujours à la ville la plus proche non encore visitée. donne une bonne solution, mais rarement optimale. La programmation dynamique consiste à stocker les résultats des instances d un problème que l on résout pour ne jamais avoir à résoudre deux fois une même instance. permet parfois de rendre efficace un algorithme récursif simple. Par exemple : suite doublement récursive : en stockant les valeurs intermédiaires de fibo1 on obtient fibo2. passe de Θ 2 n à Θ n en utilisant un peu de mémoire. coefficients binomiaux avec le triangle de Pascal voir TD 04. Quelques autres méthodes Force brute : nom donné à un algorithme qui trouve la solution en essayant toutes les solutions possibles. recherche de clef en cryptographie. Diviser pour régner : méthode récursive qui consiste à diviser un problème en sous-problèmes, résoudre les sous-problèmes et recombiner les résultats. algorithmes de tri voir cours 05. Théorie de la complexité Algorithmes génétiques : algorithme pour trouver une solution quasi-optimale d un problème d optimisation en partant de solutions approchées, en les faisant évoluer et en les sélectionnant. un des projets d IN104.

Qu est-ce que la théorie de la complexité? Quelques définitions A pour but de classifier des problèmes en fonction de la complexité du meilleur algorithme pour les résoudre. il s agit du meilleur algorithme, pas du meilleur connu... Pour Fibonnaci, nous avons un algorithme en temps Θ log n. Peut-on faire mieux? difficile à savoir, mais on a déjà une solution polynomiale : c est un problème facile. pour certains problèmes, on peut prouver des choses : un tri par comparaison coûte au moins Θ n log n. Problème : question comportant un ou plusieurs paramètres. Quel est le plus court chemin entre deux sommets donnés d un graphe? Instance : donnée du problème sur une valeur de ses paramètres. G =S, A, x, y G ; quel est le plus court chemin entre x et y dans G? Problème de décision : la solution du problème {oui, non}. Existe-t-il un chemin de longueur k donnée entre deux sommets d un graphe? Problème de calcul : calculer la solution d un problème. Calculer le plus court chemin entre deux sommets donnés d un graphe. Classes de complexité Classes de complexité Les deux classes de problèmes dont on parle le plus sont : Classe P : ensemble des problèmes de décision résolubles en temps polynomial Classe NP : ensemble des problèmes de décision dont la solution peut être vérifiée en temps polynomiale quand la réponse est oui. Clairement, P NP, mais: P? = NP Note : beaucoup d autres classes existent PSPACE, EXPTIME, co-np... Un problème NP-complet est un problème dans NP au moins aussi difficile que tout autre problème de NP. il existe une réduction polynomiale qui permet d écrire n importe quelle instance de n importe quelle problème de NP comme une instance de ce problème, si on sait résoudre toutes les instances de ce problème on sait résoudre toutes les instances de tous les problèmes de NP. Si un problème NP-complet est dans P, alorsp = NP. Exemples de problèmes NP-complets : satisfaisabilité d une formule logique SAT sac àdos voyageur de commerce 3-coloriage...

Un problème NP-complet Le problème du voyageur de commerce Problèmes dans P Tout ce que nous avons vu jusqu à présent ou presque! pgcd algèbre linéaire tri... Existe-t-il un parcours de n villes données de distance totale k? n! parcours possibles, vérifiable en temps polynomial, si on donne le parcours. Test de primalité :étant donné unentiern, est-il premier? Premier test polynomial trouvé en 2002 [Agrawal, Kayal, Saxena] Algorithme AKS, pas utile en pratique : complexité eno logn 12, algorithmes probabilistes beaucoup plus efficaces. Un problème dans NP La factorisation Factorisation : étant donné un entier n, trouver un diviseur de n différent de 1 et n? On peut vérifier la solution en temps polynomial dans NP. Pas d algorithme de factorisation polynomial connu. Au mieux : crible quadratique : O 2 log n1 2log log n 1 2, crible algébrique : O 2 1.923 log n1 3log log n 2 3 Problème important en cryptographie : une solution polynomiale serait embêtante... mais on sait que ce problème n est pas NP-complet., RSA-640 Prize: $20,000 Status: Factored Nov. 2, 2005 Decimal Digits: 193 Challenges de factorisation 31074182404900437213507500358885679300373460228427275457 20161948823206440518081504556346829671723286782437916272 83803341547107310850191954852900733772482278352574238645 4014691736602477652346609 Résoluenl équivalent de 30 ans de calcul sur un Opteron 2.2GHz.

Challenges de factorisation Challenges de factorisation RSA-768 Prize: $50,000 Status: Factored Dec. 12, 2009 Decimal Digits: 232 12301866845301177551304949583849627207728535695953 34792197322452151726400507263657518745202199786469 38995647494277406384592519255732630345373154826850 79170261221429134616704292143116022212404792747377 94080665351419597459856902143413 Résolu en 2 ans de calcul sur plusieurs centaines de machines, cela aurait pris 1500 ans sur un seul Opteron 2.2GHz. RSA-1024 Prize: $75,000 Status: Not Factored Decimal Digits: 309 13506641086599522334960321627880596993888147560566 70275244851438515265106048595338339402871505719094 41798207282164471551373680419703964191743046496589 27425623934102086438320211037295872576235850964311 05640735015081875106765946292055636855294752135008 52879416377328533906109750544334999811150056977236 890927563 Ce qu il faut retenir de ce cours La complexité mesure l efficacité d un algorithme : indépendante de l implémentation, permet de prédire le temps que va mettre un calcul. Il existe beaucoup d approches pour résoudre un même problème : trouver la meilleure approche peut être compliqué. la complexité n est pas le seul critère les contraintes d implémentation comptent aussi. Il existe une théorie de la complexité : certains problèmes sont durs il peut ne pas exister d algorithme efficace pour les résoudre, certains problèmes sont faciles connaît-on le meilleur algorithme?