TRIS. Tri par insertion Tri par fusion

Documents pareils
Les arbres binaires de recherche

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

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


# 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>

Algorithmique I. Algorithmique I p.1/??

Initiation à l algorithmique

Logiciel Libre Cours 3 Fondements: Génie Logiciel

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

Algorithmes récursifs

Conventions d écriture et outils de mise au point

STAGE IREM 0- Premiers pas en Python

Organigramme / Algorigramme Dossier élève 1 SI

Chapitre 7. Récurrences

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

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

Le prototype de la fonction main()

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

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

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

Application 1- VBA : Test de comportements d'investissements

Cours d Algorithmique et de Langage C v 3.0

Cours 1 : La compilation

Java Licence Professionnelle CISII,

Utilisation d objets : String et ArrayList

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

Solutions du chapitre 4

Cours Informatique Master STEP

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

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

Algorithmique et Programmation, IMA

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

Quelques algorithmes simples dont l analyse n est pas si simple

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

4. Les structures de données statiques

TRIGONOMETRIE Algorithme : mesure principale

MIS 102 Initiation à l Informatique

Une dérivation du paradigme de réécriture de multiensembles pour l'architecture de processeur graphique GPU

Outils pour la pratique

Introduction à l algorithmique et à la programmation M1102 CM n 3

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Le langage C. Séance n 4

CORRECTION EXERCICES ALGORITHME 1

T. A. D. pile. Chapitre 7 (suite) Listes particulières. T. A. D. file. représentation chaînée de la file algorithmique. Files

TP Bases de données réparties

Représentation d un entier en base b

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

LISP UNE INTRODUCTION A LA PROGRAMMATION

Corrigé des TD 1 à 5

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Algorithmique et Programmation

Gestion mémoire et Représentation intermédiaire

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

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

Dérivation : Résumé de cours et méthodes

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

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Programmation Objet - Cours II

Architecture Orientée Service, JSON et API REST

1. Structure d'un programme FORTRAN 95

1 Lecture de fichiers

Compilation (INF 564)

TP3 : Manipulation et implantation de systèmes de fichiers 1

ACTIVITÉ DE PROGRAMMATION

Projet de programmation (IK3) : TP n 1 Correction

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Travaux Dirigés n 1 : chaînes de caractères

Algorithmique et programmation : les bases (VBA) Corrigé

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Initiation à Excel. Frédéric Gava (MCF)

Évaluation et implémentation des langages

Logiciel Libre Cours 2 Fondements: Programmation

PROJET 1 : BASE DE DONNÉES REPARTIES

Cours 1 : Qu est-ce que la programmation?

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Arbres binaires de recherche

Problèmes liés à la concurrence

OCL - Object Constraint Language

Modèle de demande d'habilitation d'un Mastère LMD

TP : Gestion d une image au format PGM

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

TP1 : Initiation à l algorithmique (1 séance)

Environnements et Outils de Développement Cours 1 Introduction

Simulation d un système de paiement par carte bancaire

Fonctions homographiques

DUT Informatique Module Système S4 C Département Informatique 2009 / Travaux Pratiques n o 5 : Sockets Stream

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

Console IAP Manuel d utilisation

Algorithmique & programmation

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

IMPORTANT Bienvenue

Rappels sur les suites - Algorithme

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Université Bordeaux 1, Licence Semestre 3 - Algorithmes et struct...

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

Transcription:

TRIS Tri par insertion Tri par fusion

QUEL EST LE PROBLÈME À RÉSOUDRE? Soit une liste de nombres : '(5 2 14 1 6) On souhaite la trier : '(1 2 5 6 14) 2

ALGORITHMES DE TRI Tris par sélection du minimum tri-minimum (TP) tri-bulles (TD) Tri par insertion Tri par fusion Tri rapide Tri par tas 3

PRINCIPES DES TRIS PAR SÉLECTION On cherche le minimum de la liste, puis on recommence avec le reste de la liste Tri du minimum fonction minimum fonction enlève Tri bulles fonction bulle, qui sélectionne le minimum et l enlève de la liste en un seul passage 4

TRI PAR INSERTION : LA MÉTHODE Principe : on trie récursivement le cdr de la liste, puis on y insère le car Exemple : '(5 2 14 1 6) cdr '(2 14 1 6) tri-insertion '(1 2 5 6 14) insérer 5 '(1 2 6 14) tri-insertion 5

INSERTION DANS UNE LISTE TRIÉE : LA MÉTHODE Principe : on compare l élément à insérer avec le car de la liste Exemple : insérer 5 dans '(1 2 6 14) 5 > '(1 2 6 14) '(1 2 5 6 14) cdr 5 > '(2 6 14) '(2 5 6 14) cdr 5 < '(6 14) '(5 6 14) 6

INSERTION DANS UNE LISTE TRIÉE : LA FONCTION (define insere ; liste de nombres triée (lambda (n l) ; n nombre, l liste de nombres triée (if (null? l) (list n) (if (< n (car l)) (cons n l) (cons (car l) (insere n (cdr l))) )))) 7

INSERTION DANS UNE LISTE TRIÉE : ILLUSTRATION DE LA FONCTION (insere 5 '(1 2 6 14)) 5 > 1 (cons 1 (insere 5 '(2 6 14)) '(1 2 5 6 14) 5 > 2 (cons 2 (insere 5 '(6 14)) '(2 5 6 14) 5 < 6 (cons 5 '(6 14)) '(5 6 14) 8

TRI PAR INSERTION : LA FONCTION (define tri-insertion ; liste de nombres triée (lambda (l) ; l liste de nombres non vide (if (null? (cdr l)) l (insere (car l) (tri-insertion (cdr l)))))) 9

TRI PAR INSERTION : ILLUSTRATION DE LA FONCTION (tri-insertion '(5 2 14 1 6)) (insere 5 (tri-insertion '(2 14 1 6))) (insere 2 (tri-insertion '(14 1 6))) '(1 2 5 6 14) '(1 2 6 14) (insere 14 (tri-insertion '(1 6))) '(1 6 14) (insere 1 (tri-insertion '(6))) '(1 6) '(6) 10

TRI PAR FUSION : L APPROCHE «DIVISER POUR RÉGNER» Structure récursive : pour résoudre un problème donné, l algorithme s appelle lui-même récursivement une ou plusieurs fois sur des sous problèmes très similaires Le paradigme «diviser pour régner» donne lieu à trois étapes à chaque niveau de récursivité : diviser, régner, combiner 11

DIVISER POUR RÉGNER : 3 ÉTAPES Diviser le problème en un certain nombre de sous-problèmes Régner sur les sous-problèmes en les résolvant récursivement Si la taille d un sous-problème est assez réduite, on peut le résoudre directement Combiner les solutions des sous-problèmes en une solution complète pour le problème initial 12

TRI PAR FUSION : LE PRINCIPE Diviser : diviser la liste de n éléments à trier en deux sous-listes de n/2 éléments Régner : trier les deux sous-listes récursivement à l aide du tri par fusion Combiner : fusionner les deux sous-listes triées pour produire la réponse triée 13

UN EXEMPLE 3 2 5 1 3 2 5 1 diviser 3 2 5 1 2 3 fusionner 1 5 1 2 3 5 14

TRI PAR FUSION : LA MÉTHODE divise '(3 2 5 1) '( (3 5) (2 1) ) tri-fusion '(1 2 3 5) fusion tri-fusion (3 5) (1 2) tri-fusion 15

DIVISER LA LISTE EN DEUX SOUS-LISTES : LA MÉTHODE '(a b c d e f) cddr '(c d e f) divise divise '((a c e) (b d f)) '((c e) (d f)) 16

DIVISER LA LISTE EN DEUX SOUS-LISTES : LA FONCTION (define divise ; liste de deux listes (lambda (l) ; l liste (cond ((null? l) '(() ())) ((null? (cdr l)) (list l '())) (else (let ((r (divise (cddr l)))) (list (cons (car l) (car r)) (cons (cadr l) (cadr r)))))))) 17

DIVISER LA LISTE EN DEUX SOUS-LISTES : ILLUSTRATION DE LA FONCTION (divise '(3 2 5 1)) r1 à (divise '(5 1)) car à 3 cadr à 2 (list (cons 3 (car r1)) (cons 2 (cadr r1)))) '( (3 5) (2 1) ) r2 à (divise '()) car à 5 cadr à 1 (list (cons 5 (car r2)) (cons 1 (cadr r2)))) r1 à ( (5) (1) ) r2 à '( () () ) 18

FUSIONNER DEUX LISTES TRIÉES : LA MÉTHODE 1<2 '(2 5 7) '(1 3 4 8) '(2 5 7) '(3 4 8) fusion '(1 2 3 4 5 7 8) cons 1 fusion '(2 3 4 5 7 8) 19

FUSIONNER DEUX LISTES TRIÉES : LA FONCTION (define fusion ; liste de nb triée (lambda (l1 l2) ; listes de nb triées (cond ((null? l1) l2) ((null? l2) l1) ((< (car l1) (car l2)) (cons (car l1) (fusion (cdr l1) l2))) (else (cons (car l2) (fusion l1 (cdr l2))))))) 20

FUSIONNER DEUX LISTES TRIÉES : ILLUSTRATION DE LA FONCTION (fusion '(2 5 7) '(1 3 4 8)) (cons 1 (fusion '(2 5 7) '(3 4 8))) (cons 2 (fusion '(5 7) '(3 4 8))) 2 > 1 2 < 3 5 > 3 (cons 3 (fusion '(5 7) '(4 8))) 5 > 4 (cons 4 (fusion '(5 7) '(8))) 5 < 8 (cons 5 (fusion '(7) '(8))) 7 < 8 (cons 7 (fusion '() '(8))) '(8) '(1 2 3 4 5 7 8) '(2 3 4 5 7 8) '(3 4 5 7 8) '(4 5 7 8) '(5 7 8) '(7 8) 21

TRI PAR FUSION : LA FONCTION (define tri-fusion ; liste de nb triée (lambda (l) ; liste de nb non vide (if (null? (cdr l)) l (let ((r (divise l))) (fusion (tri-fusion (car r)) (tri-fusion (cadr r))))))) 22

TRI PAR FUSION : ILLUSTRATION (tri-fusion '(7 4 9 1)) r1 à (divise '(7 4 9 1)) ((7 9) (4 1)) (fusion (tri-fusion '(7 9)) r2 à (divise '(7 9)) '((7) (9)) (fusion (tri-fusion '(7)) '(7) (tri-fusion '(9))) '(9) (tri-fusion '(4 1))) r3 à (divise '(4 1)) '((4) (1)) (fusion (tri-fusion '(4 )) '(4) (tri-fusion '(1))) '(1) '(7 9) '(1 4) '(1 4 7 9) 23

CALCULS EN REMONTANT OU EN DESCENDANT Jusqu à présent, nous avons toujours effectué les calculs en remontant des appels récursifs Exemple : retour sur la fonction factorielle (define factorielle ; entier positif (lambda (n) ; n entier positif (if (= n 0) 1 (* n (factorielle (- n 1)))))) 24

FONCTION FACTORIELLE : ILLUSTRATION (factorielle 3) (* 3 (factorielle 2)) On remonte pour faire les calculs 6 (* 2 (factorielle 1)) 2 (* 1 (factorielle 0)) 1 1 25

INTRODUIRE UN PARAMÈTRE SUPPLÉMENTAIRE POUR EFFECTUER LES CALCULS EN DESCENDANT (define factorielle-compteur; entier positif (lambda (n) ; n entier positif (fact n 1))) ; effectue le calcul de factorielle(n) en utilisant un paramètre supplémentaire res dans lequel on effectue le calcul (define fact ; entier positif (lambda (n res) ; entiers positifs (if (= n 0) res (fact (- n 1) (* res n))))) 26

FONCTION FACTORIELLE-COMPTEUR : ILLUSTRATION (factorielle-compteur 3) (fact 3 1) Les calculs effectués en descendant sont stockés dans res (fact 2 (* 1 3)) (fact 1 (* 3 2)) (fact 0 (* 6 1)) 6 On renvoie directement le résultat contenu dans res 27

REMARQUES La fonction factorielle-compteur est celle qui répond à la spécification. Il est indispensable d écrire une fonction qui répond à la spécification, même si elle ne fait rien d autre que d appeler la fonction fact. L utilisateur n a pas à savoir que nous utilisons un deuxième argument. La fonction fact est celle qui fait effectivement tout le travail. 28

QUEL INTÉRÊT? Dans la fonction fact, on a une récursivité terminale. Avec certains langages de programmation et certains compilateurs, cette récursivité terminale est «dérécursifiée» afin d améliorer l efficacité du programme. On se rapproche en effet d une solution itérative : res 1 TantQue n>0 Faire res res*n n n-1 FinTantQue Afficher res 29