22
33[ ![ npm version] ( https://img.shields.io/npm/v/algorith )] ( https://www.npmjs.com/package/algorith )
44[ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-yellow.svg )] ( https://opensource.org/licenses/MIT )
5- [ ![ Tests] ( https://img.shields.io/badge/tests-114 %20passing-brightgreen )] ( ./test/ )
5+ [ ![ Tests] ( https://img.shields.io/badge/tests-115 %20passing-brightgreen )] ( ./test/ )
66
77> Collection complète d'algorithmes de similarité textuelle et moteur de génération aléatoire avancé
88
9+ ## ✨ Fonctionnalités
10+
11+ ### 🔍 Algorithmes de Similarité Textuelle
12+ - ** Levenshtein** - Distance d'édition avec insertions, suppressions et substitutions
13+ - ** Jaro-Winkler** - Optimisé pour les préfixes communs (noms propres)
14+ - ** Jaro** - Version de base sans bonus de préfixe
15+ - ** Hamming** - Comparaison caractère par caractère (même longueur)
16+ - ** Jaccard** - Similarité basée sur les ensembles de caractères
17+ - ** Cosine** - Similarité cosinus des vecteurs de fréquence
18+ - ** Dice Coefficient** - Basé sur les bigrammes communs
19+ - ** Trigram Score** - Score de similarité par trigrammes
20+ - ** Soundex** - Encodage phonétique (support multilingue: EN, FR)
21+
22+ ### 🎲 Génération Aléatoire (RandomEngine)
23+ #### Fonctions de Base
24+ - ` uniform() ` - Nombres aléatoires uniformes
25+ - ` int() ` - Entiers aléatoires dans un intervalle
26+ - ` bool() ` - Booléens aléatoires avec probabilité configurable
27+ - ` pick() ` - Sélection aléatoire d'un élément dans un tableau
28+ - ` shuffle() ` - Mélange Fisher-Yates d'un tableau
29+
30+ #### Distributions Probabilistes
31+ - ` normal() ` - Distribution normale (Gaussienne)
32+ - ` exponential() ` - Distribution exponentielle
33+ - ` poisson() ` - Distribution de Poisson
34+ - ` binomial() ` - Distribution binomiale
35+ - ` geometric() ` - Distribution géométrique
36+ - ` weighted() ` - Sélection pondérée
37+
38+ #### Génération de Texte
39+ - ` randomChar() ` - Caractères aléatoires (avec jeux de caractères personnalisés)
40+ - ` randomString() ` - Chaînes aléatoires de longueur donnée
41+ - ` randomWord() ` - Mots aléatoires basés sur des syllabes
42+ - ` uuid() ` - Génération d'UUID v4
43+
44+ #### Fonctions de Bruit
45+ - ` perlin1D() ` , ` perlin2D() ` , ` perlin3D() ` - Bruit de Perlin (1D, 2D, 3D)
46+ - ` valueNoise() ` - Bruit de valeur
47+ - ` whiteNoise() ` - Bruit blanc
48+ - ` pinkNoise() ` - Bruit rose (1/f)
49+
50+ #### Crypto Sécurisé
51+ - ` cryptoInt() ` - Entiers cryptographiquement sécurisés
52+
53+ ### 🔤 Autocomplétion Intelligente
54+ - ** Recherche rapide** - Structure Trie pour recherches O(m)
55+ - ** Support multilingue** - Dictionnaires français et anglais intégrés
56+ - ** Extensible** - Ajout facile de dictionnaires personnalisés
57+ - ** API simple** - ` autocomplete() ` , ` addWord() ` , ` addWords() `
58+
59+ ### 🔧 Utilitaires
60+ - ** fisherYatesShuffle** - Mélange aléatoire déterministe de tableaux
61+ - ** compareAll** - Compare deux chaînes avec tous les algorithmes simultanément
62+
63+ ## ⚡ Performance des Algorithmes
64+
65+ Benchmarks effectués sur Node.js v24.5.0 (Linux x64)
66+
67+ ### Algorithmes de Similarité
68+
69+ | Algorithme | Petites chaînes<br >(3-5 car.) | Chaînes moyennes<br >(20-30 car.) | Grandes chaînes<br >(100-200 car.) |
70+ | ---------------- | ----------------------------- | -------------------------------- | --------------------------------- |
71+ | ** Hamming** | ** 720,599 ops/s** | ** 535,742 ops/s** | ** 1,230,436 ops/s** |
72+ | ** Jaro-Winkler** | ** 334,056 ops/s** | ** 492,129 ops/s** | ** 126,682 ops/s** |
73+ | ** Jaro** | 159,534 ops/s | 300,080 ops/s | 119,637 ops/s |
74+ | ** Trigram** | 171,536 ops/s | 337,487 ops/s | 170,423 ops/s |
75+ | ** Dice** | 157,987 ops/s | 163,419 ops/s | 36,190 ops/s |
76+ | ** Jaccard** | 119,827 ops/s | 121,730 ops/s | 73,290 ops/s |
77+ | ** Cosine** | 95,908 ops/s | 120,913 ops/s | 59,148 ops/s |
78+ | ** Levenshtein** | 33,657 ops/s | 42,996 ops/s | 12,548 ops/s |
79+
80+ ** compareAll()** : 13,316 ops/s (compare avec tous les algorithmes simultanément)
81+
82+ ### RandomEngine
83+
84+ | Fonction | Performance |
85+ | ------------------ | ---------------- |
86+ | ` uniform() ` | 12,330,231 ops/s |
87+ | ` perlin1D() ` | 22,104,201 ops/s |
88+ | ` bool() ` | 16,819,989 ops/s |
89+ | ` whiteNoise() ` | 16,051,877 ops/s |
90+ | ` int(1, 100) ` | 14,266,552 ops/s |
91+ | ` exponential(1) ` | 6,782,895 ops/s |
92+ | ` normal(0, 1) ` | 4,002,269 ops/s |
93+ | ` randomWord(5) ` | 559,416 ops/s |
94+ | ` randomString(10) ` | 287,464 ops/s |
95+
96+ > ** Note** : Les performances peuvent varier selon votre environnement d'exécution.
97+
998## 📦 Installation
1099
11100``` bash
@@ -21,7 +110,8 @@ const {
21110 hamming ,
22111 compareAll ,
23112 RandomEngine ,
24- AutocompleteEngine
113+ AutocompleteEngine ,
114+ fisherYatesShuffle
25115} = require (' algorith' );
26116
27117// Comparaison de similarité
@@ -53,6 +143,11 @@ console.log(rng.randomWord()); // "bakaru"
53143const autocomplete = new AutocompleteEngine ({ language: ' fr' });
54144autocomplete .addWords ([' javascript' , ' java' , ' python' ]);
55145console .log (autocomplete .autocomplete (' java' )); // ['java', 'javascript']
146+
147+ // Mélange Fisher-Yates
148+ const numbers = [1 , 2 , 3 , 4 , 5 ];
149+ const shuffled = fisherYatesShuffle (numbers);
150+ console .log (shuffled); // [3, 1, 5, 2, 4]
56151```
57152
58153## 📚 API Documentation
@@ -170,20 +265,48 @@ trigramScore('abc', 'xyz'); // 0.0
170265
171266** Cas d'usage :** Analyse de séquences, comparaison de texte long.
172267
173- #### ` soundex(string) `
268+ #### ` soundex(string, language = 'en', customMap = null ) `
174269
175- Génère le code Soundex d'une chaîne (algorithme phonétique).
270+ Génère le code Soundex d'une chaîne (algorithme phonétique) avec support multilingue.
271+
272+ ** Paramètres :**
273+ - ` string ` : La chaîne à encoder
274+ - ` language ` : Langue pour les règles spécifiques ('en' ou 'fr', défaut: 'en')
275+ - ` customMap ` : Carte de correspondance personnalisée (optionnel)
176276
177277``` javascript
178278const { soundex } = require (' algorith' );
179279
280+ // Usage basique (anglais par défaut)
180281soundex (' Robert' ); // 'R163'
181282soundex (' Rupert' ); // 'R163' (même son)
182283soundex (' Smith' ); // 'S530'
183284soundex (' Smyth' ); // 'S530' (même son)
285+
286+ // Support français avec normalisation des accents
287+ soundex (' François' , ' fr' ); // 'F652'
288+ soundex (' Pierre' , ' fr' ); // 'P600'
289+ soundex (' Céline' , ' fr' ); // 'C450'
290+
291+ // Les accents sont automatiquement normalisés en français
292+ soundex (' François' , ' fr' ) === soundex (' Francois' , ' fr' ); // true
293+
294+ // Carte personnalisée
295+ const customMap = {
296+ a: ' ' , e: ' ' , i: ' ' , o: ' ' , u: ' ' ,
297+ b: 9 , p: 9 , f: 9 , v: 9 , // Groupement personnalisé
298+ c: 8 , k: 8 , g: 8
299+ };
300+ soundex (' Boat' , ' en' , customMap); // 'B900'
184301```
185302
186- ** Cas d'usage :** Recherche phonétique, matching de noms.
303+ ** Fonctionnalités :**
304+ - ** Support multilingue** : Règles spécifiques pour l'anglais et le français
305+ - ** Normalisation française** : Gestion automatique des accents (é→e, ç→s, œ→e)
306+ - ** Cartes personnalisées** : Définition de vos propres règles de correspondance
307+ - ** Compatibilité** : Fonctionne avec l'algorithme Soundex standard
308+
309+ ** Cas d'usage :** Recherche phonétique, matching de noms, détection de doublons phonétiques, indexation par similarité sonore.
187310
188311#### ` compareAll(stringA, stringB) `
189312
@@ -486,6 +609,20 @@ rng.fade(0.5); // Fonction de lissage
486609rng .lerp (0 , 10 , 0.5 ); // Interpolation linéaire → 5
487610```
488611
612+ ### 🔀 Mélange Fisher-Yates
613+
614+ Mélange un tableau en utilisant l'algorithme de Fisher-Yates.
615+
616+ ``` javascript
617+ const { fisherYatesShuffle } = require (' algorith' );
618+
619+ const items = [' a' , ' b' , ' c' , ' d' ];
620+ const shuffled = fisherYatesShuffle (items);
621+
622+ console .log (items); // ['a', 'b', 'c', 'd'] (non modifié)
623+ console .log (shuffled); // Mélange aléatoire
624+ ```
625+
489626## 🎯 Exemples d'Usage
490627
491628### Détection de Doublons
@@ -579,7 +716,7 @@ const map = generateTerrain(100, 100);
579716
580717## 🧪 Tests
581718
582- Le module inclut 114 tests complets :
719+ Le module inclut 115 tests complets :
583720
584721``` bash
585722# Exécuter tous les tests
0 commit comments