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

Algorithme Shift-Or Travail Pratique – Conception et analyse dalgorithmes.

Présentations similaires


Présentation au sujet: "Algorithme Shift-Or Travail Pratique – Conception et analyse dalgorithmes."— Transcription de la présentation:

1 Algorithme Shift-Or Travail Pratique – Conception et analyse dalgorithmes

2 Plan de la rencontre Problème algorithmique Grands principes utilisés Exemple de fonctionnement Exemple dapplication 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 linterface 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 dapplication. 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. Il faut ensuite vérifier la présence de 0 sur la dernière ligne dans le tableau de comparaison. Étant donné que cest une comparaison qui est fait, la grandeur et le type dalphabet na 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énationComparaisonDivision La recherche devenait nécessaire

7 Histoire de lalgorithme Inventé il y a plus de 40 ans Autres noms : BitapBaeza-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 – Lalgorithme est repris pour la recherche de chaînes brouillées par M. Udi Manber (VP Google) 1996 – Amélioration de lalgorithme M. Navarro 1998 – Adaptation de lalgorithme pour les chaînes de caractères très longues par M. Gene myers (Chercheur algorithmie et bio-informatique)

8 Létat de lart 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 lalgorithme sous la fonction agrep de Unix Plusieurs implémentation disponibles État actuel de lalgorithme Shift-Or Rechercher des chaînes de caractères, courtes ou longues, à lintérieur dune grande chaîne de caractères. La version connue aujourdhui permet également la recherche dune chaîne presque identique à celle recherchée. Ce nest pas fini -> Linformatique ne cesse dévoluer Études pour améliorer la performance de cet algorithme. Utilisation dans Unix (agrep) = bonne garantie de survie et damélioration

9 Grands Principes Utilisés Utilise quelques grands principes algorithmique Le plus grand principe est le compromis espace- temps Création dun 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 sil y a la présence dun « 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 dun « 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! BONJOURLEMONDE! M O N D E Tableau 1 – Exemple de fonctionnement

12 Exemple dapplication Lutilisation de lalgorithme Shift-Or peut être appliqué à plusieurs situations où la recherche dune chaîne de caractère est requise: Recherche dun terme dans un texte (comme dans Word); Recherche dune 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 lalgorithme Aucune récursivité Théorème du maximum Appels à diverses fonctions (par exemple : strlen) Une boucle pour initialiser le tableau (sexécute en O(m)) B0ucles imbriquées pour effectuer la recherche Sexécute en O(mn) en pire cas pour un mot de longueur n et un nombre de m vérifications Sexécute en O(m) en meilleur cas (mot dune lettre ou vide)

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

15 Comparaison des algorithmes Shift-OrBoyer–MooreString.h


Télécharger ppt "Algorithme Shift-Or Travail Pratique – Conception et analyse dalgorithmes."

Présentations similaires


Annonces Google