Travail Pratique – Conception et analyse d’algorithmes

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
GEF 243B Programmation informatique appliquée
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
FLSI602 Génie Informatique et Réseaux
Plus rapide chemin bicritère : un problème d’aménagement du territoire
Cours de programmation
L'algorithme Blowfish.
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Analyse lexicale Généralités Expressions rationnelles Automates finis
Initiation à la conception de systèmes d'information
Les algorithmes: complexité et notation asymptotique
RECURSIVITE ARBRES BINAIRES
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
TRANSMISSION DES DONNEES.
TRAITEMENT DE STRUCTURES
IFT-2000: Structures de Données Introduction à lanalyse dalgorithmes Dominic Genest, 2009.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Programmation Initiation Aux Langages C et C++ Bruno Permanne 2006.
IFT-2000: Structures de données
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Modélisation du robot Azimut-3
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)
Principes de programmation
IFT3295 Démonstration 28 septembre 2011 Shift-And (avec erreurs)
IFT 6800 Atelier en Technologies d’information
Efficacité des algorithmes
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
Méthode et Outils pour la Programmation
Programmation logique Le Langage PROLOG
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Pour le chemin le plus court pour tous les couples
Analyse des Algorithmes
L’essentiel du langage C
Le langage C Structures de données
Efficacité des algorithmes
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
JavaScript.
8PRO107 Éléments de programmation Les chaînes de caractères.
Un survol du language C.
Méthodes de tri.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Arbres binaires et tables de hachage
Tutorat en bio-informatique Le 14 novembre Au programme… Les objets –Propriétés (attributs) –Constructeurs –Méthodes.
Programmation Système et Réseau
ETNA – 1ème année Guillaume Belmas –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
2008/ Plan du cours 1.Introduction –Contenu du cours 2.Logique mathématique –Calcul propositionnel –Calcul des prédicats –Logique floue et aide à.
8PRO100 Éléments de programmation Les pointeurs de caractères.
Tutorat en bio-informatique Le 12 octobre Exercices 3 et 4 (MAT1400) - solutions La série du binôme (chap. 8.8) –Trouver la série entière et le.
1 Les caractères En informatique, les caractères sont très importants puisqu’ils sont utilisés pour la communication personne-machine. Puisque les ordinateurs.
Recherche de motifs par projections aléatoires
6ième Classe (Mercredi, 17 novembre) CSI2572
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
Algorithmes de tri.
La pile de crêpes.
Algorithmique Tableaux de données
Structures de données IFT-2000
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Vous présente en quelques réalisations un réel savoir-faire, le fruit de longues années d’expériences, aujourd’hui à votre service. Toutes les fonctionnalités.
Transcription de la présentation:

Travail Pratique – Conception et analyse d’algorithmes Algorithme Shift-Or Travail Pratique – Conception et analyse d’algorithmes

Plan de la rencontre Problème algorithmique Grands principes utilisés Exemple de fonctionnement Exemple d’application Implémentation

Problème algorithmique Il y a un problème qui revient souvent, réussir à trouver une expression dans un texte. En effet, on a les recherches sur internet qui doivent être précise pour relever les expressions les logiciels proposent des façons de retrouver instantanément un mot dans l’interface en cours Il faut également que les logiciels suggèrent des recherches et pour ça, il faut aussi trouver le plus rapidement possible une expression dans un texte. Il est donc primordial de pouvoir trouver rapidement des chaines de caractère pour un grand nombre d’application. Plusieurs façons de régler ce problème sont avancées, mais nous nous attarderons sur la méthode Shift-Or dans ce texte.

Description générale Rechercher un expression E[1…m] dans un texte T[1…n]. On fait une comparaison entre tous les éléments et on place le résultat dans un tableau m x n. Il faut ensuite vérifier la présence de 0 sur la dernière ligne dans le tableau de comparaison. Étant donné que c’est une comparaison qui est fait, la grandeur et le type d’alphabet n’a aucune importance.

const char *Shift_Or(const char *text, const char *pattern) { const char *result = NULL; int m = strlen(pattern); BIT *R; int i, k; if (pattern[0] == '\0') return text; R = malloc((m+1) * sizeof *R); R[0] = 1; for (k=1; k <= m; ++k) R[k] = 0; for (i=0; text[i] != '\0'; ++i) { for (k=m; k >= 1; --k) R[k] = R[k-1] && (text[i] == pattern[k-1]); if (R[m]) { result = (text+i - m) + 1; break; } free(R); return result;

Histoire du problème Arrivée des chaînes de caractères Propose différentes avenues et possibilités Comment bien exploiter ces possiblités ? Plusieurs algorithmes Concaténation Comparaison Division La recherche devenait nécessaire

Histoire de l’algorithme Inventé il y a plus de 40 ans Autres noms : Bitap Baeza-Yates-Gonnet Dates importantes : 1964 – Invention de Shift-Or pour la recherche de chaînes exactes inventé par M. Balint Dömölski (Expert informatique) 1977 – Algorithme Shift-Or pour la recherche de chaînes exactes complété par M. R.K. Shyamasundar 1991 – L’algorithme est repris pour la recherche de chaînes brouillées par M. Udi Manber (VP Google) 1996 – Amélioration de l’algorithme M. Navarro 1998 – Adaptation de l’algorithme pour les chaînes de caractères très longues par M. Gene myers (Chercheur algorithmie et bio-informatique)

L’état de l’art Le problème est encore analysé par les universités, les chercheurs et les informaticiens Plusieurs livres existent : An algorithm for syntactical analysis, Balint Dömölski Fast text searching with allowing errors, Udi Manber ... Implémentation gratuite disponible : Libbitap Connu comme étant l’algorithme sous la fonction “agrep” de Unix Plusieurs implémentation disponibles État actuel de l’algorithme Shift-Or Rechercher des chaînes de caractères, courtes ou longues, à l’intérieur d’une grande chaîne de caractères. La version connue aujourd’hui permet également la recherche d’une chaîne presque identique à celle recherchée. Ce n’est pas fini -> L’informatique ne cesse d’évoluer Études pour améliorer la performance de cet algorithme. Utilisation dans Unix (agrep) = bonne garantie de survie et d’amélioration

Grands Principes Utilisés Utilise quelques grands principes algorithmique Le plus grand principe est le compromis espace- temps Création d’un tableau de comparaisons; Il apparaît un « 1 » si : Le caractère actuel ne concorde pas ; Le caractère actuel concorde, mais le précédent ne concordait pas. Il apparaît un « 0 » si le caractère actuel concorde et que le précédent concorde aussi Analyse du dit tableau de comparaisons. Nous vérifions s’il y a la présence d’un « 0 » dans la dernière rangée.

Grands Principes Utilisés Il y a aussi la comparaison qui est grandement utilisée à plusieurs étapes : Comparaisons des caractères lors de la création du tableau de comparaisons; Vérification de la présence d’un « 0 » dans la dernière rangée du tableau.

Exemple de fonctionnement Chaîne de départ : « BONJOUR LE MONDE ! » Chaîne à trouver : « MONDE » Puisque nous avons une valeur à « 0 » dans la dernière ligne, nous pouvons affirmer que la chaîne a effectivement été trouvée, et ce, très rapidement! B O N J U R L E M D ! 1 Tableau 1 – Exemple de fonctionnement

Exemple d’application L’utilisation de l’algorithme Shift-Or peut être appliqué à plusieurs situations où la recherche d’une chaîne de caractère est requise: Recherche d’un terme dans un texte (comme dans Word); Recherche d’une série de caractères dans un navigateur web (entre autres avec la coloration de recherche). Image 1 – Exemple de recherche dans un navigateur web.

Analyse de l’algorithme Aucune récursivité Théorème du maximum Appels à diverses fonctions (par exemple : strlen) Une boucle pour initialiser le tableau (s’exécute en O(m)) B0ucles imbriquées pour effectuer la recherche S’exécute en O(mn) en pire cas pour un mot de longueur “n” et un nombre de “m” vérifications S’exécute en O(m) en meilleur cas (mot d’une lettre ou vide)

Implémentation Implémentation en C Comparaison des temps empiriques Démonstration

Comparaison des algorithmes Shift-Or Boyer–Moore String.h