Cours Info Algorithmes de recherche. D.Malka MPSI D.Malka Cours Info - 11 MPSI / 31

Documents pareils
1 Recherche en table par balayage

Recherche dans un tableau

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

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)

Algorithmique, Structures de données et langage C

Initiation à la programmation en Python

Découverte de Python

Quelques Algorithmes simples

Programmes des classes préparatoires aux Grandes Ecoles

Licence Sciences et Technologies Examen janvier 2010

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

Continuité et dérivabilité d une fonction

Qualité du logiciel: Méthodes de test

Programmation avec Xcas ou Python

MIS 102 Initiation à l Informatique

Initiation à l algorithmique

STAGE IREM 0- Premiers pas en Python


Introduction à MATLAB R

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

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

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

PROJET ALGORITHMIQUE ET PROGRAMMATION II

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

Organigramme / Algorigramme Dossier élève 1 SI

Programme Compte bancaire (code)

Perl Orienté Objet BioPerl There is more than one way to do it

Limites finies en un point

Algorithmique et structures de données I

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

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

Programmer en JAVA. par Tama

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

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

Ordonnancement temps réel

Programmation linéaire

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

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

MÉTHODES NUMERIQUES. Cours. Licence de Physique Année Universitaire : Licence Chimie, parcours Physique. Semestre S3

Java Licence Professionnelle CISII,

Projet de programmation (IK3) : TP n 1 Correction

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

Cours de Systèmes d Exploitation

ARBRES BINAIRES DE RECHERCHE

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

Présentation du langage et premières fonctions

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

4. Groupement d objets

Cours 7 : Utilisation de modules sous python

Les arbres binaires de recherche

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

Chap III : Les tableaux

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Représentation d un entier en base b

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

TRIGONOMETRIE Algorithme : mesure principale

L exclusion mutuelle distribuée

Solutions du chapitre 4

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

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

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Les structures de données. Rajae El Ouazzani

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

Utilisation d objets : String et ArrayList

Algorithmes récursifs

Présentation du PL/SQL

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

Algorithmique et Programmation, IMA

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Rappels sur les suites - Algorithme

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

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

Package Java.util Classe générique

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

Conventions d écriture et outils de mise au point

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

TP 1. Prise en main du langage Python

Algorithmique I. Algorithmique I p.1/??

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

TP, première séquence d exercices.

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Les deux points les plus proches

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Introduction au langage C

Introduction à NetCDF

Algorithmes sur les mots (séquences)

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

Raisonnement par récurrence Suites numériques

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

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Corrigé des TD 1 à 5

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

Programmation Par Objets

Création d objet imbriqué sous PowerShell.

Transcription:

Cours Info - 11 Algorithmes de recherche D.Malka MPSI 2016-2017 D.Malka Cours Info - 11 MPSI 2016-2017 1 / 31

Sommaire Sommaire 1 Les tableaux 2 Recherche d un nombre dans une liste Liste quelconque : recherche séquentielle 3 Recherche d un mot dans une chaîne de caractères 4 Recherche du zéro d une fonction continue monotone D.Malka Cours Info - 11 MPSI 2016-2017 2 / 31

Les tableaux Sommaire 1 Les tableaux 2 Recherche d un nombre dans une liste Liste quelconque : recherche séquentielle 3 Recherche d un mot dans une chaîne de caractères 4 Recherche du zéro d une fonction continue monotone D.Malka Cours Info - 11 MPSI 2016-2017 3 / 31

Les tableaux Exemple La structure de Tableau Définition Tableau Un tableau est une suite de valeurs stockées dans des cases mémoires contigües. En Python, la structure de données correspondant aux tableaux est le type list. Python autorise les listes stockant des variables de types différents. Nous nous restreindrons à des tableaux dont les éléments sont tous de même type. D.Malka Cours Info - 11 MPSI 2016-2017 4 / 31

Les tableaux Exemples La structure de Tableau Exemples Tableau d entiers indice 0 1 2 3 4 5 6 elt 4 75 6 93 101 3 12 Tableau de caractères indice 0 1 2 3 4 5 elt a e i o u y D.Malka Cours Info - 11 MPSI 2016-2017 5 / 31

Les tableaux Quelques rappels La structure de Tableau Création, manipulation Quelques rappels en Python Création T=[1,2,3,...] Lecture de l élément d indice i : T[i] Modification de l élément d indice i : T[i]=3 Insertion en queue : T.append(elt) Insertion : T.insert(indice,elt) Suppression : del(t[indice]) ou T.remove(elt) D.Malka Cours Info - 11 MPSI 2016-2017 6 / 31

Les tableaux Quelques rappels La structure de Tableau Création, manipulation Quelques rappels en Python Slicing : T[i:j] renvoie un sous-tableau contenant les éléments d indice i(inclus) à j(exclu) de T Concaténation : [1,2,3]+[3,2,1] [1,2,3,3,2,1] Revoir le chapitre 5... et la documentation Python D.Malka Cours Info - 11 MPSI 2016-2017 7 / 31

Les tableaux Quelques rappels La structure de Tableau Parcours des éléments d un tableau On considère le tableau (ou la liste) T. Comment le parcourir en Python? Méthode 1 : 1 for i in range(len(t)): 2 T[i] Méthode 2 : 1 for elt in T: 2 elt Méthode 3 : 1 for indice, elt in enumerate(t): 2 elt,indice D.Malka Cours Info - 11 MPSI 2016-2017 8 / 31

Sommaire 1 Les tableaux 2 Recherche d un nombre dans une liste Liste quelconque : recherche séquentielle 3 Recherche d un mot dans une chaîne de caractères 4 Recherche du zéro d une fonction continue monotone D.Malka Cours Info - 11 MPSI 2016-2017 9 / 31

Liste quelconque : recherche séquentielle Recherche séquentielle d un nombre dans une liste Principe Recherche séquentielle : principe Parcourir le tableau Comparer chaque élément parcouru à l élément recherché Si l élément est trouvé, quitter la boucle et renvoyer l indice de l élément (plus précisément de la 1 ère occurrence) Arrivé au dernier élément du tableau, quitter la boucle et renvoyer NULL D.Malka Cours Info - 11 MPSI 2016-2017 10 / 31

Liste quelconque : recherche séquentielle Recherche séquentielle d un nombre dans une liste Algorithme Algorithme 1 : Recherche séquentielle d une valeur 1 fonction Recherche_sequentielle(T,x) 2 pour i de 0 à longueur(t)-1 faire 3 si T[i]==x alors 4 retourner i 5 retourner NULL Complexité : O(n) où n est la longueur du tableau T. D.Malka Cours Info - 11 MPSI 2016-2017 11 / 31

Liste quelconque : recherche séquentielle Recherche séquentielle d un nombre dans une liste Algorithme Implémentation en Python : 1 def recherche_seq(t,x): 2 n=len(t) 3 for i in range(n) 4 if T[i]==x: 5 return i 6 return None D.Malka Cours Info - 11 MPSI 2016-2017 12 / 31

Recherche dichotomique Principe Existe-t-il un algorithme plus efficace que la recherche naïve? OUI si la liste est triée. C est la recherche dichotomique. D.Malka Cours Info - 11 MPSI 2016-2017 13 / 31

Recherche dichotomique Principe Paradigme : «diviser pour régner» Recherchons 15 dans le tableau d entier croissant suivant : 0 1 1 2 2 8 3 15 4 25 5 32 6 48 7 71 8 81 9 99 32 > 15 0 1 1 2 2 8 3 15 4 25 8 < 15 3 15 4 25 15=15 ALGORITHME TERMINE D.Malka Cours Info - 11 MPSI 2015-2016 14 / 31

Recherche dichotomique d un nombre dans une liste triée Algorithme Algorithme 2 : Recherche dichotomique d une valeur Entrées : Entier x, tableau trié par ordre croissant T Sorties : Indice de x dans T 1 fonction Recherche_dichotomique(T,x) 2 g=0 3 d=longueur(t)-1 4 tant que g<=d faire 5 m=(g+d)/2 6 si T[m]<x alors 7 g=m+1 8 sinon si T[m]>x alors 9 d=m-1 0 sinon /*T[m]==x*/ 1 retourner m 2 retourner NULL D.Malka Cours Info - 11 MPSI 2016-2017 15 / 31

Recherche dichotomique d un nombre dans une liste triée Implémentation en Python 1 def rech_dicho(x,t): 2 g=0 3 d=len(t)-1 4 while g<=d: 5 m=(d+g)//2 6 if x>t[m]: 7 g=m+1 8 elif x<t[m]: 9 d=m-1 10 else :#x==t[m]: 11 return m 12 13 return None D.Malka Cours Info - 11 MPSI 2016-2017 16 / 31

Recherche dichotomique d un nombre dans une liste triée Terminaison Terminaison Montrons que l algorithme de recherche dichotomique termine. On considère la suite {u k = d k g k }. Dans la boucle, {u k } est une suite : Entière Positive car g k m k d k Strictement décroissante (u k+1 < u k ) car k, d k+1 < d k ou g k+1 > g k Donc l algorithme termine. D.Malka Cours Info - 11 MPSI 2016-2017 17 / 31

Recherche dichotomique d un nombre dans une liste triée Exactitude Montrons que si x est dans T alors l algorithme renvoie i l indice de x dans le tableau. Pour cela, montrons que P k : x [T [g k ],T [d k ]] ou x = T [m k ] est un invariant de boucle. Initialisation Pour k = 0 : d 0 = n 1, g 0 = 0 Par hypothèse x T donc x [T [g 0 ],T [d 0 ]] P 0 est vraie D.Malka Cours Info - 11 MPSI 2016-2017 18 / 31

Recherche dichotomique d un nombre dans une liste triée Exactitude Montrons que P k P k+1 Hérédité Cas 1 : x = T [m k+1 ] Cas trivial : P k+1 est vraie. D.Malka Cours Info - 11 MPSI 2016-2017 19 / 31

Recherche dichotomique d un nombre dans une liste triée Exactitude Montrons que P k P k+1. Hérédité Cas 2 : x < T [m k+1 ] Si x < T [m k+1 ] alors : m k+1 = d k + g k 2 g k+1 = g k or par hypothèse P k est vrai donc x T [g k ] donc x T [g k+1 ] d k+1 = m k+1 1 or x < T [m k+1 ] donc x T [m k+1 1] soit x T [d k+1 ] Les deux dernières assertions sont équivalentes à x [T [g k+1 ],T [d k+1 ]] soit à P k+1 Donc P k P k+1 D.Malka Cours Info - 11 MPSI 2016-2017 20 / 31

Recherche dichotomique d un nombre dans une liste triée Exactitude Montrons que P k P k+1. Hérédité Cas 3 : x > T [m k+1 ] Si x > T [m k+1 ] alors : m k+1 = d k + g k 2 d k+1 = d k or par hypothèse P k est vrai donc x T [d k ] donc x T [d k+1 ] g k+1 = m k+1 + 1 or x > T [m k+1 ] donc x T [m k+1 + 1] soit x T [g k+1 ] Les deux dernières assertions sont équivalentes à x [T [g k+1 ],T [d k+1 ]] soit à P k+1 Donc P k P k+1 D.Malka Cours Info - 11 MPSI 2016-2017 21 / 31

Recherche dichotomique d un nombre dans une liste triée Exactitude Finalement : Soit x a été trouvé avant la dernière itération. Soit à la dernière itération d = g = m et donc d après l invariant de boucle x = T [m] donc x est trouvé. La démonstration est complète si l algorithme retourne NULL si x n est pas dans le tableau ce qui assuré par la négation de la condition x == T [m] et par la terminaison de l algorithme. D.Malka Cours Info - 11 MPSI 2016-2017 22 / 31

Recherche dichotomique d un nombre dans une liste triée Complexité La complexité de la recherche dichotomique est O(log 2 (n)) où n est la taille du tableau. Démonstration par récurrence sur la diapo suivante. D.Malka Cours Info - 11 MPSI 2016-2017 23 / 31

Recherche dichotomique d un nombre dans une liste triée Complexité Preuve Montrons par récurrence qu à l itération k, l k = d k g k n 2k où n est la longueur du tableau. Initialisation : pour k = 0, l0 = n 1 0 + 1 = n cqfd Hérédité : P k : l k < n 2 k vraie montrons P k+1 : l k+1 < n 2 k+1 à la (k + 1) ieme itération : m k+1 = d k +g k 2 et : soit d k+1 = m k+1 1 et g k+1 = g k, soit ou g k+1 = m k+1 + 1 et d k+1 = d k. cas où g k+1 = m k+1 + 1 et d k+1 = d k : l k+1 = d k+1 (m k+1 + 1) + 1 = d k ( dk +g k 2 donc l k+1 = l k n 2 2k+1 : cqfd. cas où d k+1 = m k+1 1 et g k = g k+1 : même raisonnement. donc k, lk < n 2 k. ) + 1 = d k g k or l k 2 2 = (d k g k )+1 2 A la sortie de la boucle k = N, et au pire, l = 1 tableau à un élément. Donc 1 n 2 N N log 2 (n). La complexité au pire de l algorithme est donc O(log 2 (n)). D.Malka Cours Info - 11 MPSI 2016-2017 24 / 31

Recherche d un mot dans une chaîne de caractères Sommaire 1 Les tableaux 2 Recherche d un nombre dans une liste Liste quelconque : recherche séquentielle 3 Recherche d un mot dans une chaîne de caractères 4 Recherche du zéro d une fonction continue monotone D.Malka Cours Info - 11 MPSI 2016-2017 25 / 31

Recherche d un mot dans une chaîne de caractères Le problème Recherche d un mot dans une chaîne de caractères Le problème Recherche d un motif dans un texte On souhaite rechercher toutes les occurrences d une chaine de caractère motif de longueur m dans une chaine de caractères texte de longueur n. On supposera m n. D.Malka Cours Info - 11 MPSI 2016-2017 26 / 31

Recherche d un mot dans une chaîne de caractères Algorithme naïf Recherche d un mot dans une chaîne de caractères Algorithme naïf Algorithme 3 : Recherche d une chaîne de caractère Entrées : String motif, string texte Sorties : Liste des positions du motif (premier caractère) 1 fonction Recherche_motif(motif,texte) 2 position_motif=[] 3 n=longueur(texte) 4 m=longueur(motif) 5 pour i allant de 0 à n-m-1 faire 6 j=0 7 tant que j<m et texte[i+j]==motif[j] faire 8 j=j+1 9 si j==m alors /*Alors texte[i+j]==motif[j] a toujours été vraie*/ 0 Ajouter i à position_motif 1 retourner position_motif D.Malka Cours Info - 11 MPSI 2016-2017 27 / 31

Recherche d un mot dans une chaîne de caractères Implémentation en Python Recherche d un mot dans une chaîne de caractères Algorithme naïf Implémentation en Python 1 def rech_motif(mot,t): 2 3 liste_pos=[] 4 n=len(t) 5 m=len(mot) 6 for i in range(n-m): 7 j=0 8 while(j<m and t[i+j]==mot[j]): 9 j+=1 10 if j==m: 11 liste_pos.append(i) 12 return liste_pos D.Malka Cours Info - 11 MPSI 2016-2017 28 / 31

Recherche d un mot dans une chaîne de caractères Complexité Recherche d un mot dans une chaîne de caractères Algorithme naïf Complexité Complexité Unité de mesure : les comparaisons Boucle for : une boucle while n m fois et n m comparaisons (embranchement) Boucle while : au pire on trouve à chaque fois le motif 2m comparaisons Boucle while : au mieux on ne trouve jamais le motif 2 comparaisons Complexité au pire : O(m(n m)). Complexité au mieux : O(n m). D.Malka Cours Info - 11 MPSI 2016-2017 29 / 31

Recherche du zéro d une fonction continue monotone Sommaire 1 Les tableaux 2 Recherche d un nombre dans une liste Liste quelconque : recherche séquentielle 3 Recherche d un mot dans une chaîne de caractères 4 Recherche du zéro d une fonction continue monotone D.Malka Cours Info - 11 MPSI 2016-2017 30 / 31

Recherche du zéro d une fonction continue monotone Recherche du zéro d une fonction continue monotone VOIR PARTIE CALCULS NUMERIQUES D.Malka Cours Info - 11 MPSI 2016-2017 31 / 31