Algorithmie ISI 301 PC 4 : Méthodes de recherche 1 Fonction d

Transcription

Algorithmie ISI 301 PC 4 : Méthodes de recherche 1 Fonction d
Algorithmie
ISI 301
PC 4 : Méthodes de recherche
1
Fonction d’adressage
Un fonction d’adressage, ou fonction de hashage est une fonction permettant
d’associer un entier de [0,N] à un ensemble de données (des chaı̂nes de caractères,
par exemple).
De façon générale, comme toute donnée en informatique est dénombrable
(i.e. toute donnée est représentée par une suite de 0 et de 1), une fonction
d’adressage est une fonction de l’ensemble des entiers naturels dans un sousensemble fini d’icelui (qui sera la plupart du temps les entiers de [0, N ], avec N
entier).
1.1
Une fonction d’adressage particulière
Une bonne fonction d’adressage doit avoir un caractère “aléatoire” pour que les
données se répartissent bien entre tous les entiers de [0, N ].
Une fonction très utilisée est la fonction modulo. En prenant deux entiers k
et k’, k modulo k’ est égal au reste de la division entière de k par k’.
1.1.1
Implémentez un algorithme permettant de calculer la fonction modulo. Quelle
est sa complexité ?
1.1.2
On suppose que chaque lettre de l’alphabet est codée de façon binaire sur 5
bits par sa position dans l’alphabet (00001 pour A, 00101 pour E, etc.). Si l’on
veut des entiers entre 0 et 100 (en notation décimale), quelle est l’adresse via la
fonction modulo de la chaı̂ne de caractère CLE ?
1.1.3
Que se serait-il passé si l’on avait voulu des entiers entre 0 et 31 ?
1
1.1.4
En utilisant la méthode de Horner (cf. première petite classe) proposez un
algorithme permettant de calculer l’adresse d’une chaı̂ne de caractère en utilisant
le code précédant (où le code de CLE est égal à 3 ∗ 322 + 12 ∗ 321 + 5 ∗ 320 ) et
la fonction d’adressage égale au modulo.
1.2
Fonction d’adressage et dictionnaire
Les fonctions d’adressages sont utilisées dans les structures de données appelées
dictionnaires.
Un dictionnaire peut être vu comme un tableau auquel on accède non pas
par des indices, mais par des chaı̂nes de caractères.
1.2.1
En supposant qu’il existe une fonction d’adressage rendant une adresse unique
quelque soit la chaı̂ne de caractère, proposez une implémentation d’un dictionnaire. Une telle fonction existe-t-elle ? La méthode est-elle réalisable ?
1.2.2
Comment gérer les chaı̂nes ayant même adresse ?
1.2.3
Quel est l’intérêt d’utiliser ce genre de structure ?
2
Algorithme de Rabin-Karp
L’algorithme de Rabin-Karp pour la recherche d’un motif de longueur m dans
une chaı̂ne de caractères c1 revient à considérer une fonction d’adressage et de
vérifier, pour chaque paquet de m lettres de c1 si l’adresse correspond à celle du
motif.
On considérera ici que nombre associé à chaque caractère est sa position
dans l’alphabet, codé en base d. Dans la partie précédente, d était égal à 32.
De même on considère que la fonction d’adressage est la fonction modulo
appliquée à un grand nombre premier q.
2.1
On considère que l’on a une fonction φ rendant pour chaque caractère sa position
dans l’alphabet. Quelle est le code du mot de longueur m présent à la position
i de la chaı̂ne c1 ?
2
2.2
En connaissant le code du mot de longueur m présent à la position i de la chaı̂ne
c1 , quelle est le code du mot de longueur m présent à la position i+1 de la chaı̂ne
c1 ?
2.3
En connaissant l’adresse du mot de longueur m présent à la position i (c’est à
dire l’adresse du code du mot) de la chaı̂ne c1 , quelle est l’adresse du mot de
longueur m présent à la position i+1 de la chaı̂ne c1 ?
2.4
En déduire un algorithme permettant de trouver dans une chaı̂ne de longueur n
la première position i dont le mot de longueur m commençant à cette position
à la même adresse qu’un motif de longueur m. Quel est sa complexité ?
2.4.1
Que reste-t-il à faire pour trouver un motif dans une chaı̂ne de caractère ?
3

Documents pareils