ALGORITHMES RECURSIFS

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

Les arbres binaires de recherche

Les structures de données. Rajae El Ouazzani

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

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

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

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

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

Algorithmique, Structures de données et langage C

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Algorithmique I. Algorithmique I p.1/??

Conventions d écriture et outils de mise au point

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

Resolution limit in community detection

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

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programme Compte bancaire (code)

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

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

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Définition des Webservices Ordre de paiement par . Version 1.0

Recherche dans un tableau

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

Licence Sciences et Technologies Examen janvier 2010

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

Initiation à la programmation en Python

Chapitre 10. Les interfaces Comparable et Comparator 1

Algorithmes récursifs

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Plateforme PAYZEN. Définition de Web-services

Utilisation d objets : String et ArrayList

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

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

Travaux pratiques. Compression en codage de Huffman Organisation d un projet 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

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

OS Réseaux et Programmation Système - C5

Quelques Algorithmes simples

Représentation d un entier en base b

Package Java.util Classe générique

Algorithmique et Programmation, IMA

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)

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

Corrigé des TD 1 à 5

Introduction à MATLAB R


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

TP2 : tableaux dynamiques et listes chaînées

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

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

chapitre 4 Nombres de Catalan

Programmation système de commandes en C

Cours Informatique Master STEP

Les structures. Chapitre 3

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

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

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

Algorithmique et programmation : les bases (VBA) Corrigé

MIS 102 Initiation à l Informatique

Programmes des classes préparatoires aux Grandes Ecoles

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

Guide d implémentation. Réussir l intégration de Systempay

Poker. A rendre pour le 25 avril

Arguments d un programme

#include <stdio.h> #include <stdlib.h> struct cell { int clef; struct cell *suiv; };

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

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

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Continuité et dérivabilité d une fonction

1.6- Génération de nombres aléatoires

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

I. Introduction aux fonctions : les fonctions standards

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Java Licence Professionnelle CISII,

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

CHAPITRE V. Recherche et tri

Arbres binaires de recherche

Dans le chapitre 1, nous associions aux fichiers ouverts des descripteurs de fichiers par lesquels nous accédions aux fichiers.

Genie Logiciel Avancé Projet :Gestion d une chaîne hotelier low cost

Chapitre 7. Récurrences

Introduction à la programmation concurrente

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

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

Introduction au langage C

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

Cahier des charges. driver WIFI pour chipset Ralink RT2571W. sur hardware ARM7

Découverte de Python

Cours Programmation Système

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Taux d évolution moyen.

1 Recherche en table par balayage

Chap III : Les tableaux

TP 1. Prise en main du langage Python

Optimisation for Cloud Computing and Big Data

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Application 1- VBA : Test de comportements d'investissements

Transcription:

ALGORITHMES RECURSIFS Méthodes de recherches et de tris récursives Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 1 Recherches et tris récursifs Certains traitements récursifs s'appliquent particulièrement bien à la problématique des recherches et des tris. Pour appliquer la récursivité il faut que le problème à résoudre puisse être décomposé en sous-problème de même nature. L'arrêt de l'appel récursif se fait à la résolution du problème élémentaire Il faut donc une modélisation du problème de la recherche ou du tri qui soit récursive. Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 2 1

Recherches et tris récursifs Recherche dichotomique : La recherche dans un tableau de taille N conduit à découper le problème en deux sous problèmes de même nature et à rechercher dans un sous tableau de taille N/2. Tri quicksort : Trier une collection d'objets conduit à : (pré-traitement) identifier un pivot, répartir la collection en deux souscollections les plus petits et les plus grands. (appel récursif) relancer le tri sur les 2 sous-collections. (post-traitement) Le résultat sera la concaténation des deux souscollections revenues triées. Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 3 Recherche dichotomique Attention uniquement si la collection d objet est déjà triée. A chaque étape : Tester si le tableau est vide (en ce cas arrêt des appels récursifs avec échec) Calculer l'indice moyen (indice max + indice min)/2 Comparer la valeur présente à l indice moyen avec l objet recherché, 1. si l'objet recherché est à l'indice moyen (arrêt succès) 2. si l objet est supérieur ou égal à la valeur t[moyen] relancer la recherche avec le tableau supérieur, 3. sinon relancer la recherche avec le tableau inférieur. Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 4 2

Recherche dichotomique - principe objet = 11 min : objet<t[moy] moy = (max + min) / 2 max 7 9 11 12 33 min max moy 7 9 11 12 33 Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 5 Recherche dichotomique tests d'arrêt int RDRec(int min, int max, int objet, int t[]) { int milieu ; if (min >= max) return -1; milieu = (max+min)/2; if (t[milieu] == objet) return milieu;... Tests d'arrêt Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 6 3

Recherche dichotomique appel récursif sur un sous problème int RDRec(int min, int max, int objet, int t[]) { int milieu ; if (min >= max) return -1; milieu = (max+min)/2; if (t[milieu] == objet) return milieu; if (objet < t[milieu]) return RDRec(min, milieu -1, objet, t); if (objet > t[milieu]) return RDRec(milieu +1, max, objet, t); return 1; Rappel récursif sur un sous-problème Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 7 Recherche dichotomique arrêts et appels récursif int RDRec(int min, int max, int objet, int t[]) { int milieu ; if (min >= max) return -1; milieu = (max+min)/2; if (t[milieu] == objet) return milieu; if (objet < t[milieu]) return RDRec(min, milieu -1, objet, t); if (objet > t[milieu]) return RDRec(milieu +1, max, objet, t); return 1; Tests d'arrêt Rappel récursif sur un sous-problème Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 8 4

Recherche dichotomique code int RDRec(int min, int max, int objet, int t[]) { int milieu ; if (min >= max) return -1; milieu = (max+min)/2; if (t[milieu] == objet) return milieu; if (objet < t[milieu]) return RDRec(min, milieu -1, objet, t); if (objet > t[milieu]) return RDRec(milieu +1, max, objet, t); return 1; Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 9 Tri quicksort - principe A l étape courante soit : L : liste vide elle est retournée (triée par définition) L : non vide choix d'un pivot P dans la liste (premier élément) Découpage de L en deux sous listes : Li : liste des éléments inférieurs au pivot, Ls : liste des éléments supérieurs au pivot. Tri récursif rappelé sur Li et Ls on obtient : Li-triée et Ls-triée Liste résultat à l étape courante : concaténation de Li-triée et Ls-triée avec la valeur du pivot P entre. Retour à la fonction appelante de L-triée Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 10 5

Pré traitement Post traitement 4/26/2010 Tri quicksort exemple d'appel 5 7 3 4 1 2 9 3 4 1 2 7 9 1 2 4 2 9 1 2 2 4 9 1 2 3 4 7 9 1 2 3 4 5 7 9 Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 11 Tri quicksort : définition de la liste Structure du maillon de la liste : typedef struct maillon { char info[nmax] ; struct maillon* suiv; MAIL ; int QScmp(MAIL * A, MAIL * B) retourne 0, 1 ou -1 suivant si le champ info du maillon A est égal, supérieur ou inférieur au champ info du maillon B Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 12 6

Tri quicksort : fonctions utilisées MAIL* tete(mail* L) retourne la tête d une liste L, c'est à dire le premier élément de la liste. MAIL* reste(mail* L) retourne le reste d'une liste L, c'est à dire le pointeur vers le deuxième élément de la liste. MAIL* ajouter-tete(mail* P, MAIL* L) retourne une liste dont la tête est P et le reste L (ajout en tête). MAIL* concatener(mail* D, MAIL* F) retourne la liste constituée par tous les éléments de la liste D suivis de tous les éléments de la liste F. Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 13 Tri quicksort test d'arrêt Test d'arrêt... Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 14 7

Tri quicksort pré traitement P = tete(l); for(r= reste(l) ; R!= NULL ; R= reste(r)) { T= tete(r); if (QScmp(P,T) < 0) Ls= ajtete(ls, T); else Li= ajtete(li, T); pré-traitement... Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 15 Tri quicksort appel récursif P = tete(l); for(r= reste(l) ; R!= NULL ; R= reste(r)) { T= tete(r); if (QScmp(P,T) < 0) Ls= ajtete(ls, T); Rappel else Li= ajtete(li, T); récursif Li = QS(Li); Ls = QS(Ls); Res = ajtete(p, Ls); Res = concatener(li, Res); return Res ; Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 16 8

Tri quicksort post traitement P = tete(l); for(r= reste(l) ; R!= NULL ; R= reste(r)) { T= tete(r); if (QScmp(P,T) < 0) Ls= ajtete(ls, T); else Li= ajtete(li, T); Li = QS(Li); Ls = QS(Ls); Res = ajtete(p, Ls); Res = concatener(li, Res); return Res ; post-traitement Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 17 Tri quicksort - anatomie Test d'arrêt P = tete(l); for(r= reste(l) ; R!= NULL ; R= reste(r)) { T= tete(r); if (QScmp(P,T) < 0) Ls= ajtete(ls, T); Rappel else Li= ajtete(li, T); récursif pré-traitement Li = QS(Li); Ls = QS(Ls); Res = ajtete(p, Ls); Res = concatener(li, Res); return Res ; post-traitement Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 18 9

Tri quicksort - code P = tete(l); for(r= reste(l) ; R!= NULL ; R= reste(r)) { T= tete(r); if (QScmp(P,T) < 0) Ls= ajtete(ls, T); else Li= ajtete(li, T); Li = QS(Li); Ls = QS(Ls); Res = ajtete(p, Ls); Res = concatener(li, Res); return Res ; Ch. PAUL EMSE ALGORITHMIQUE - RECURSIVITE Recherche et Tris 19 10