makeCela génère 4 exécutables :
genere-textegenere-motsac-matriceac-hachage
Pour nettoyer :
make cleanGénère un texte pseudo-aléatoire.
Syntaxe :
./genere-texte <longueur> <taille_alphabet>Exemple :
./genere-texte 1000000 20 > texte_test.txtGénère un texte de 1 million de caractères sur un alphabet de taille 20.
Génère un ensemble de mots pseudo-aléatoires (un par ligne).
Syntaxe :
./genere-mots <nb_mots> <long_min> <long_max> <taille_alphabet>Exemple :
./genere-mots 100 5 15 20 > mots_test.txtGénère 100 mots de longueur entre 5 et 15 caractères sur un alphabet de taille 20.
Recherche des mots dans un texte avec l'algorithme d'Aho-Corasick (représentation par matrice de transitions).
Syntaxe :
./ac-matrice <fichier_mots> <fichier_texte>Exemple :
./ac-matrice mots.txt texte.txtAffiche le nombre total d'occurrences des mots de mots.txt dans texte.txt.
Même fonctionnalité que ac-matrice mais avec une représentation par table de hachage.
Syntaxe :
./ac-hachage <fichier_mots> <fichier_texte>Exemple :
./ac-hachage mots.txt texte.txt./ac-matrice mots.txt texte.txt # affiche : 80
./ac-hachage mots.txt texte.txt # affiche : 80bash test_validation.shCe script (fourni par le prof) :
- Génère un texte et des mots de test
- Exécute les deux implémentations
- Vérifie automatiquement que les résultats sont identiques
Pour effectuer les benchmarks du TP (étapes 4-6) :
bash script.shCe script génère :
- 4 textes de 5 millions de caractères (alphabets : 2, 4, 20, 70)
- 12 ensembles de 100 mots (3 longueurs × 4 alphabets)
- Lance les 24 recherches et mesure les temps d'exécution
- Produit un fichier
resultats/resultats.csvavec tous les résultats
Attention : Ce script peut prendre plusieurs minutes à s'exécuter.
L'algorithme d'Aho-Corasick permet de rechercher simultanément k mots dans un texte en une seule passe.
Complexité :
- Construction du Trie : O(Σ longueurs des mots)
- Calcul des suppléants : O(nombre de nœuds)
- Recherche : O(longueur du texte + nombre d'occurrences)
Deux implémentations :
- Matrice : accès O(1), mémoire O(nœuds × taille_alphabet)
- Hachage : accès O(1) amorti, mémoire O(transitions réelles)