La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Travail Pratique – Conception et analyse d’algorithmes

Présentations similaires


Présentation au sujet: "Travail Pratique – Conception et analyse d’algorithmes"— Transcription de la présentation:

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

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

3 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.

4 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.

5 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;

6 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

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

8 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

9 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.

10 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.

11 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

12 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.

13 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)

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

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


Télécharger ppt "Travail Pratique – Conception et analyse d’algorithmes"

Présentations similaires


Annonces Google