Algorithmique I. Augustin.Lux@imag.fr Roger.Mohr@imag.fr Maud.Marchal@imag.fr. Algorithmique I 20-09-06 p.1/??



Documents pareils
Les arbres binaires de recherche

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

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

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

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

Quelques Algorithmes simples

Projet de programmation (IK3) : TP n 1 Correction

Conventions d écriture et outils de mise au point

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

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

Cours 1 : La compilation

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

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


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

Chapitre 7. Récurrences

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

ARBRES BINAIRES DE RECHERCHE

Recherche dans un tableau

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

Architecture des Systèmes d Information Architecture des Systèmes d Information

Plan du cours. Historique du langage Nouveautés de Java 7

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Introduction à MATLAB R

Introduction au langage C

1 Recherche en table par balayage

Programmes des classes préparatoires aux Grandes Ecoles

Java Licence Professionnelle CISII,

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

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)

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

Algorithmique et Programmation, IMA

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Correction de l examen de la première session

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

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

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

MIS 102 Initiation à l Informatique

Algorithmique, Structures de données et langage C

Programmer en JAVA. par Tama

Arbres binaires de recherche

Cours 1 : Qu est-ce que la programmation?

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

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Corrigé des TD 1 à 5

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

Calcul Formel et Numérique, Partie I

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Compression de Données - Algorithme de Huffman Document de Conception

Notes du cours 4M056 Programmation en C et C++ Vincent Lemaire et Damien Simon

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

STAGE IREM 0- Premiers pas en Python

Les algorithmes de base du graphisme

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

Fonctions homographiques

Initiation à l algorithmique

CHAPITRE V. Recherche et tri

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

Loi binomiale Lois normales

Master CCI. Compétences Complémentaires en Informatique. Livret de l étudiant

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Cours 1: Java et les objets

Rappels sur les suites - Algorithme

Environnements et Outils de Développement Cours 1 Introduction

Programmation Web. Madalina Croitoru IUT Montpellier

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

MRTG & RRD Tool. Multi Router Traffic Grapher

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

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

Modules du DUT Informatique proposés pour des DCCE en 2014/2015

CERTIFICAT INFORMATIQUE ET INTERNET NIVEAU 1

Les formations de remise à niveau(!) l'entrée des licences scientifiques. Patrick Frétigné CIIU

Management des Systèmes d Information

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

S LICENCE INFORMATIQUE Non Alt Alt SS1 S2 S3 S4 S5 S6 Parcours : IL (Ingénierie Logicielle) SRI (Systèmes et Réseaux Informatiques)

Archivage électronique

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Apllication au calcul financier

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

Programmation en Java IUT GEII (MC-II1) 1

Outils pour la pratique

Algorithmique et Programmation

PIC EVAL Dev Board PIC18F97J60

ACTIVITÉ DE PROGRAMMATION

Fonction inverse Fonctions homographiques

as Architecture des Systèmes d Information

Corrigés des premiers exercices sur les classes

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Corrigé des exercices sur les références

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

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Entraînement au concours ACM-ICPC

Chapitre 5. Équilibre concurrentiel et bien-être

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

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

Transcription:

Algorithmique I Augustin.Lux@imag.fr Roger.Mohr@imag.fr Maud.Marchal@imag.fr Télécom 2006/07 Algorithmique I 20-09-06 p.1/??

Organisation en Algorithmique 2 séances par semaine pendant 8 semaines. Enseignement cours + TD + un peu de tp 6 semaines normales : 2 séances CTD 2 semaines TD + TP (encadré - coeff 2) Examen: 3h (coeff 18) Documents: polycopié - version papier kiosque: documents divers, poly en html livres intéressants Tronc commun avec l Ensimag. Algorithmique I 20-09-06 p.2/??

Lien avec d autres matières En télécom 2a, l algorithmique est partout présente, notamment projets compilation système Pour cette raison, il n y a pas de tp conséquent spécifique à l algorithmique. Algorithmique I 20-09-06 p.3/??

Style de travail En algorithmique, il y a 3 aspects: connaissance encyclopédique des problèmes et des méthodes - c est très vaste L introduction à l algorithmique (Cormen et al.) fait... 1008 pages. analyse de complexité - souvent très mathématique savoir implanter - connaissance des langages, et des techniques de bon codage. Algorithmique I 20-09-06 p.4/??

Chapitre 1: Introduction à la complexité d algorithmes Algorithmique I 20-09-06 p.5/??

Premier exercice facile Algorithmique I 20-09-06 p.6/??

Un calcul de maximum La fonction suivante, écrite en C, calcule l élément maximal d un vecteur T. L appel initial est valmax(k) où k est l indice du dernier élément de T : i n t valmax ( i n t i ) { i f ( i ==0) return T [ 0 ] ; else { i f ( T [ i > valmax ( i 1)) return T [ i ] ; else return valmax ( i 1); Algorithmique I 20-09-06 p.7/??

Questions Un utilisateur, qui teste cette fonction sur des vecteurs de tailles croissantes, vous dit : je ne comprends pas, la fonction marche jusqu à 27 éléments, mais semble boucler pour 28". Comment interprétez-vous ce comportement? Que faut-il faire pour y remédier? Algorithmique I 20-09-06 p.8/??

Questions Développer l arbre d appels de fonctions de valmax pour quelques exemples Mettre en equation la complexité de valmax dans le cas favorable - cas défavorable. Algorithmique I 20-09-06 p.9/??

Deuxième exercice facile Algorithmique I 20-09-06 p.10/??

Calcul des 2 éléments maximaux d un vecteur On désire trouver les deux éléments les plus grands d un tableau T. On supposera que les données sont équidistribuées. Comparer la complexité des deux versions algo1 et algo2 ci-dessous réalisant ce calcul. Que peut-on en conclure? Algorithmique I 20-09-06 p.11/??

Algo1 void algo1 ( i n t n, long x, long& m1, long& m2) { long max1 = x [ n 1] ; long max2 = x [ n 2] ; i f (max1 < max2) { long aux = max1 ; max1 = max2 ; max2 = aux ; for ( i n t i =n 3; i >=0; i ) { i f ( x [ i ] >= max1 ) { max2 = max1 ; max1 = x [ i ] ; else i f ( x [ i ] > max2 ) { max2 = x [ i ] ; Algorithmique I 20-09-06 p.12/??

Algo2 La seconde version algo2 consiste à remplacer la partie intérieure à la boucle par : i f ( x [ i ] > max2 ) { i f ( x [ i ] >= max1 ) { max2 = max1 ; max1 = x [ i ] ; else { max2 = x [ i ] ; Algorithmique I 20-09-06 p.13/??

La complexité dans le cas le pire est la même pour les deux versions de l algorithme, et correspond au cas où le tableau est trié en ordre décroissant. On a alors 2(n 2) + 1 = 2n 3 comparaisons. Complexité en moyenne : Version 1 : Le second test de la boucle est fait dans les cas où x(i) < max 1, soit avec une probabilité i 1 a en effet i 1 chances sur i pour que le plus grand de i éléments ne soit pas placé en dernier). En tenant compte des n 2 occurences du premier test de la boucle, on a : i (il y C moy (n) = 1 + n 2 + n i=3 i 1 i où H n = n i=1 1 i log(n) = 2n 2 H n + 1 2 13-1

Version 2 : Evaluons la probabilité pour que le second test de la boucle soit effectué : C est le cas soit si x(i) est le premier maximum parmi les i premiers éléments du tableau, soit s il est le second. Or, ces évènements ont chacun une probabilité de 1/i, d où : n C moy (n) = 1 + n 2 + = n 4 + 2H n i=3 2 i Pour des grandes valeurs de n, la version 2 de l algorithme tend donc à faire deux fois moins de comparaisons que la première. Si la fonction de comparaison est coûteuse, la version 2 sera donc environ deux fois plus efficace. Cela illustre le fait que, même pour de petits programmes très simples, il est judicieux de bien choisir l ordre des instructions! D un point de vue pratique, les programmes effectuant non seulement des comparaisons mais aussi des affectations, tout dépend du coût de la comparaison et de l architecture (et du compilateur) utilisée. Le tableau?? compare les performances pratiques des deux programmes sur la plateforme suivante : Machine hardware: sun4m OS version: SOLARIS 5.5 Processor type: sparc 13-2

Hardware: sun4m Compilateur: gcc version 2.8.0 Le temps du programme 1 est alors environ 1.3 celui du programme 2, (à comparer au facteur 2 en nombre de comparaisons). Taille tableau temps cpu Algo1 temps cpu Algo2 Ratio Algo 10 0.00022 0.00021 1.11 50 0.00076 0.00066 1.22 100 0.0013 0.00098 1.35 1000 0.012 0.0088 1.37 10000 0.13 0.097 1.35 100000 1.46 1.12 1.30 1000000 19.2 15.6 1.23 Figure 1: Résultats en moyenne sur 10 exécutions de chaque algorithme. Chaque exécution est faite sur un nouveau tableau dont les éléments sont générés par rand. Pour chaque tableau le temps est mesuré sur 100 exécutions. 13-3

Les algorithmes de tri Algorithmique I 20-09-06 p.14/??

Tri par insertion Principe : Insérer le i ème élément dans la suite des i 1 éléments déjà triés void T r i I n s e r t i o n ( i n t A [ ], i n t i n f, i n t sup ) { i n t i, j, v a l ; for ( j = i n f +1; j <sup ; j ++){ v a l = A [ j ] ; i = j 1; while ( i >= 0 && A [ i ] > v a l ) { A [ i +1] = A [ i ] ; i ; A [ i +1] = v a l ; Algorithmique I 20-09-06 p.15/??

Tri par sélection Principe : Chercher le plus grand élément et le mettre à la fin void T r i S e l e c t i o n ( i n t A [ ], i n t i n f, i n t sup ) { i n t i, j, val, max ; for ( i =sup ; i > i n f ; i ){ max = i ; for ( j = i 1 ; j >= i n f ; j ){ v a l = A [ max ] ; A [ max ] = A [ i ] ; A [ i ] = v a l ; i f ( A [ j ] > A [ max ] ) max = j ; Algorithmique I 20-09-06 p.16/??

Tri par segmentation Principe : Trouver un pivot et ordonner chacun des sous-tableaux autour du pivot void TriSegmentation ( i n t A [ ], i n t i n f, i n t sup ) { i n t i ; i f ( sup > i n f ) { i = Segmentation (A, i n f, sup ) ; TriSegmentation (A, i n f, i 1); TriSegmentation (A, i +1,sup ) ; Algorithmique I 20-09-06 p.17/??

Tri par segmentation(2) i n t Segmentation ( i n t A [ ], i n t i n f, i n t sup ) { i n t i, j, val, u ; v a l = A[ sup ] ; i = i n f 1; j = sup ; for ( ; ; ) { while ( i <sup && A[++ i ] < v a l ) ; while ( j > i n f && A[ j ] > v a l ) ; i f ( i >= j ) break ; u = A [ i ] ; A [ i ] = A[ j ] ; A[ j ] = u ; u = A [ i ] ; A [ i ] = A[ sup ] ; A[ sup ] = u ; return i ; Algorithmique I 20-09-06 p.18/??

Tri par fusion Principe : Diviser en deux chaque sous-élément du tableau, trier les sous-éléments puis les fusionner void TriFusion ( i n t A [ ], i n t i n f, i n t sup ) { i n t i ; i f ( i n f < sup ) { i = ( i n f + sup ) / 2 ; TriFusion (A, i n f, i ) ; TriFusion (A, i +1,sup ) ; Fusionner (A, i n f, i, sup ) ; Algorithmique I 20-09-06 p.19/??

Tri par fusion(2) void Fusionner ( i n t A [ ], i n t i n f, i n t m, i n t sup ) { i n t aux [ sup i n f + 1 ] ; i n t i, j, k ; for ( i =m+1; i > i n f ; i ) aux [ i 1 i n f ] = A[ i 1]; for ( j =m; j <sup ; j ++) aux [ sup+m j i n f ] = A [ j + 1 ] ; i = i n f ; j = sup ; for ( k= i n f ; k<= sup ; k ++){ i f ( aux [ i i n f ] < aux [ j i n f ] ) A [ k ] = aux [ i i n f ] ; i ++; else A [ k ] = aux [ j i n f ] ; j ; Algorithmique I 20-09-06 p.20/??