Files
anagram-generator/docs/USAGE.md
Rawleenc 02cf48088a perf: Add MEMORY_TRADEOFFS and PERFORMANCE documentation
- Introduced MEMORY_TRADEOFFS.md to explain memory vs deduplication trade-offs in anagram generation.
- Added PERFORMANCE.md detailing optimizations for handling large volumes of anagram generation efficiently.
- Created USAGE.md for comprehensive usage instructions, including installation, basic commands, and advanced generation modes.
- Enhanced generator with streaming and batch processing capabilities for improved memory management.
- Implemented quick hashing for deduplication to reduce memory footprint.
- Updated main.rs to support new command-line arguments for streaming and batch modes.
- Added tests to ensure letter removal maintains minimum word length and to verify anagram sorting functionality.
2025-11-06 23:38:05 +01:00

7.0 KiB

Guide d'utilisation

Installation et compilation

# Compiler en mode release (optimisé)
cargo build --release

# L'exécutable se trouve dans
target/release/anagram-generator

Utilisation basique

Générer des anagrammes d'un mot

# 10 anagrammes par défaut
cargo run --release -- --word "programming"

# Spécifier le nombre d'anagrammes
cargo run --release -- --word "programming" --count 100

# Avec un score minimum de prononçabilité
cargo run --release -- --word "programming" --count 50 --min-score 60

Générer des mots aléatoires prononçables

# 10 mots de 6 lettres par défaut
cargo run --release

# Spécifier la longueur et le nombre
cargo run --release -- --count 20 --length 8

# Avec un préfixe
cargo run --release -- --count 10 --prefix "sup"

# Avec un score minimum
cargo run --release -- --count 50 --min-score 70

Modes de génération avancés

Mode Streaming (recommandé pour > 10k anagrammes)

Le mode streaming génère les anagrammes à la demande avec une mémoire plafonnée.

# Générer 1 million d'anagrammes en streaming
cargo run --release -- --word "programming" --count 1000000 --streaming

# Avec indicateur de progression
cargo run --release -- --word "programming" --count 1000000 --streaming --progress

# Rediriger vers un fichier
cargo run --release -- --word "programming" --count 10000000 --streaming > anagrams.txt

Avantages :

  • Mémoire plafonnée (~8MB maximum)
  • Premiers résultats immédiats
  • Idéal pour pipeline avec autres outils

⚠️ Important - Déduplication limitée :

  • Les 100 000 premiers anagrammes sont garantis uniques
  • Au-delà, des duplicatas peuvent apparaître (la mémoire reste constante à ~8MB)
  • Pour une déduplication 100% complète, utilisez le mode batch à la place

Mode Batch (recommandé pour > 1M anagrammes)

Le mode batch traite les anagrammes par groupes pour optimiser la mémoire.

# Générer 10 millions d'anagrammes par batches de 100k
cargo run --release -- --word "programming" --count 10000000 --batch-size 100000

# Avec progression
cargo run --release -- --word "programming" --count 10000000 --batch-size 100000 --progress

# Batch size optimal selon RAM disponible
# RAM 4GB : batch-size 50000-100000
# RAM 8GB : batch-size 100000-500000
# RAM 16GB+ : batch-size 500000-1000000

Avantages :

  • Mémoire contrôlée (proportionnelle au batch size)
  • Déduplication globale
  • Idéal pour très grandes générations

Mode Standard (recommandé pour < 10k anagrammes)

Mode par défaut, tous les anagrammes en mémoire.

# Simple et rapide pour petites quantités
cargo run --release -- --word "programming" --count 1000

Options de transformation

Suppression de lettres

Permet de retirer des lettres pour améliorer la prononçabilité.

# Autoriser la suppression de jusqu'à 2 lettres
cargo run --release -- --word "programming" --count 50 --remove-letters 2

# Utile pour mots difficiles
cargo run --release -- --word "strengths" --count 20 --remove-letters 3 --min-score 70

Ajout de voyelles

Ajoute des voyelles pour améliorer la prononçabilité.

# Ajouter jusqu'à 2 voyelles
cargo run --release -- --word "rhythm" --count 30 --add-vowels 2

# Combiné avec score minimum
cargo run --release -- --word "crypt" --count 20 --add-vowels 2 --min-score 65

Ajout de lettres communes

Ajoute des voyelles et consonnes communes (r, s, t, n, l).

# Ajouter jusqu'à 3 lettres communes
cargo run --release -- --word "xyz" --count 50 --add-letters 3 --min-score 60

Configuration avancée

Nombre de tentatives

Contrôle le nombre d'essais pour générer chaque anagramme.

# Augmenter pour mots difficiles ou scores élevés
cargo run --release -- --word "xyz" --count 10 --max-attempts 5000 --min-score 70

# Réduire pour génération plus rapide (au risque de générer moins d'anagrammes)
cargo run --release -- --word "hello" --count 100 --max-attempts 500

Exemples d'utilisation avancée

Pipeline avec tri et filtrage

# Générer, filtrer et trier
cargo run --release -- --word "programming" --count 10000 --streaming \
  | grep -v "^[0-9]*\. .*x" \
  | sort -t':' -k2 -nr

Génération massive vers fichier

# 100 millions d'anagrammes en streaming
cargo run --release -- \
  --word "algorithm" \
  --count 100000000 \
  --streaming \
  --progress \
  --min-score 55 \
  > anagrams_100M.txt 2> progress.log

Génération par batches avec traitement

# Traiter chaque batch séparément
cargo run --release -- \
  --word "computer" \
  --count 50000000 \
  --batch-size 1000000 \
  --progress \
  | split -l 1000000 - batch_

Comparaison de performance

# Mode standard (petite quantité)
time cargo run --release -- --word "test" --count 1000

# Mode streaming (grande quantité)
time cargo run --release -- --word "test" --count 100000 --streaming > /dev/null

# Mode batch (très grande quantité)
time cargo run --release -- --word "test" --count 1000000 --batch-size 100000 > /dev/null

Benchmarks

Exécuter les benchmarks de performance

cargo bench

Les benchmarks comparent :

  • Génération standard vs streaming
  • Différentes tailles de batches
  • Impact mémoire

Résultats typiques (indicatifs)

Mode Quantité Temps Mémoire
Standard 1,000 ~0.5s ~5MB
Standard 10,000 ~5s ~50MB
Streaming 100,000 ~50s ~10MB
Streaming 1,000,000 ~8min ~10MB
Batch (100k) 10,000,000 ~80min ~50MB

Recommandations

Pour développement et tests

cargo run --release -- --word "test" --count 100 --min-score 60

Pour génération quotidienne

cargo run --release -- --word "myword" --count 10000 --streaming --progress

Pour génération massive

cargo run --release -- \
  --word "myword" \
  --count 100000000 \
  --batch-size 1000000 \
  --progress \
  --min-score 50 \
  > output.txt 2> progress.log

Pour mots difficiles

cargo run --release -- \
  --word "difficultword" \
  --count 1000 \
  --remove-letters 2 \
  --add-vowels 1 \
  --max-attempts 5000 \
  --min-score 65

Aide complète

# Afficher toutes les options
cargo run --release -- --help

Dépannage

Peu d'anagrammes générés

# Solutions :
# 1. Réduire le score minimum
--min-score 40

# 2. Augmenter les tentatives
--max-attempts 5000

# 3. Activer les transformations
--remove-letters 2 --add-vowels 1

Performance lente

# Solutions :
# 1. Compiler en mode release
cargo build --release

# 2. Utiliser le mode streaming pour grandes quantités
--streaming

# 3. Utiliser des batches plus petits
--batch-size 50000

Mémoire insuffisante

# Solutions :
# 1. Utiliser le mode streaming
--streaming

# 2. Réduire la taille des batches
--batch-size 10000

# 3. Rediriger vers fichier au lieu de garder en mémoire
> output.txt