0Pricing
Competitive Programming Academy · Leçon

Hachage polynomial de chaînes

Comparer des sous-chaînes en temps constant

Hachage polynomial de chaînes est une leçon Competitive Programming Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Competitive Programming Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Competitive Programming Academy comprend 4 leçons au total.

Comparer rapidement des sous-chaînes

Vous devez souvent déterminer si deux sous-chaînes sont égales. Les comparaisons caractère par caractère sont lentes, alors transformons chaque chaîne en un nombre. 🔢

L’idée du hachage

Un hachage associe une chaîne à un entier unique. Si deux chaînes diffèrent, leurs hachages sont eux aussi presque toujours différents.

Traiter les chaînes comme des polynômes

Nous lisons chaque caractère comme un chiffre en base p. Cette vision polynomiale transforme la chaîne en une grande somme pondérée.

h = ord(s[0]) + ord(s[1]) * p + ord(s[2]) * p * p

Choisir une base et un modulo

Choisissez une base première comme 31 et un grand modulo premier. Le modulo maintient les nombres à une taille raisonnable et évite les débordements.

BASE = 31
MOD = 10**9 + 9

Calculer un hachage

Parcourez la chaîne et incorporez chaque caractère avec la règle de Horner, en appliquant le modulo à chaque étape.

h = 0
for c in s:
    h = (h * BASE + ord(c)) % MOD

Hachages de préfixes

Stockez un hachage de préfixe pour chaque position. Le hachage de n’importe quelle sous-chaîne se calcule alors par une soustraction rapide.

pre[i + 1] = (pre[i] * BASE + ord(s[i])) % MOD

Puissances de la base

Précalculez également les puissances de la base. Elles alignent les deux préfixes lors de la soustraction.

pw[i] = (pw[i - 1] * BASE) % MOD

Hachage d’une sous-chaîne en O(1)

Le hachage de s[l..r] est une soustraction de deux hachages de préfixes, mise à l’échelle par une puissance. Temps constant par requête.

def sub(l, r):
    return (pre[r] - pre[l] * pw[r - l]) % MOD

Attention aux collisions

Deux chaînes différentes peuvent avoir le même hachage : c’est une collision. C’est rare, mais les concours construisent parfois des entrées pour la provoquer.

Le double hachage pour plus de sécurité

Utilisez deux modules indépendants et comparez les deux hachages. Une collision simultanée dans les deux est pratiquement impossible.

Les points forts du hachage

Le hachage permet de comparer des sous-chaînes, de trouver des répétitions et d’effectuer des recherches de motifs. C’est un outil polyvalent.

Vérification rapide

Choisissez le bon outil pour comparer de nombreuses sous-chaînes en toute sécurité.

Récapitulatif : le hachage l’emporte

Vous savez maintenant transformer des chaînes en hachages polynomiaux, interroger n’importe quelle sous-chaîne en O(1) et vous protéger contre les collisions. 🚀

Questions Fréquemment Posées

La leçon « Hachage polynomial de chaînes » est-elle gratuite ?

Oui — le texte complet de « Hachage polynomial de chaînes » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Competitive Programming Academy, passe à CoddyKit PRO. Le cours Competitive Programming Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Hachage polynomial de chaînes » ?

Comparer des sous-chaînes en temps constant Tu pratiques Competitive Programming Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Competitive Programming Academy ?

Aucune expérience préalable n'est requise. Competitive Programming Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Hachage polynomial de chaînes » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Competitive Programming Academy ?

Oui. Chaque leçon Competitive Programming Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Fonction préfixe KMP
  2. Hachage polynomial de chaînes
  3. Fonction Z pour rechercher un motif
  4. Tries pour les recherches par préfixe
← Retour à Competitive Programming Academy