0Pricing
Competitive Programming Academy · Leçon

Fonction Z pour rechercher un motif

Faire correspondre les préfixes dans toute la chaîne

Fonction Z pour rechercher un motif est une leçon Competitive Programming Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.

Un autre outil de recherche

La fonction Z est une solution élégante qui constitue une alternative à KMP pour rechercher un motif. Beaucoup la trouvent plus facile à comprendre. ✨

La signification de z[i]

Pour chaque indice, z[i] est la longueur de la plus longue sous-chaîne commençant à l’indice i qui correspond également à un préfixe de la chaîne entière.

Un petit exemple

Pour aabaab, z vaut 0,1,0,3,1,0. À l’indice 3, la séquence aab correspond au préfixe, ce qui donne une longueur de 3.

La boîte Z

Nous suivons une fenêtre [l, r], qui contient la correspondance la plus à droite trouvée jusqu’à présent. Elle nous permet de réutiliser les comparaisons précédentes.

l, r = 0, 0

À l’intérieur de la boîte

Lorsque i se trouve dans la boîte, vous copiez une valeur de z connue comme point de départ, en la limitant par le bord de la boîte.

if i < r:
    z[i] = min(r - i, z[i - l])

Dépasser la boîte

Après ce point de départ, vous continuez à comparer les caractères un par un tant qu’ils correspondent au préfixe.

while i + z[i] < n and s[z[i]] == s[i + z[i]]:
    z[i] += 1

Faire avancer la boîte

Si votre correspondance va plus loin vers la droite, vous mettez à jour l et r afin que les indices suivants puissent la réutiliser.

if i + z[i] > r:
    l, r = i, i + z[i]

Garantie de temps linéaire

La boîte se déplace uniquement vers la droite, donc le travail total est de O(n). Chaque caractère contribue dans une quantité limitée.

Rechercher avec Z

Concaténez pattern + sep + text, puis appliquez Z. Toute valeur de z égale à la longueur du motif indique une correspondance.

combined = pattern + chr(0) + text
z = z_function(combined)

Lire les correspondances

Parcourez le tableau Z ; partout où z[i] == len(pattern), la correspondance commence à la position correspondante dans le texte.

if z[i] == len(pattern):
    matches.append(i - len(pattern) - 1)

Z ou KMP

Z et KMP s’exécutent tous deux en temps linéaire. Z est souvent plus simple à coder, ce qui en fait une excellente solution de secours dans votre boîte à outils.

Vérification rapide

Assurez-vous d’avoir bien compris la signification du tableau Z.

Récapitulatif : la fonction Z l’emporte

Vous avez construit le tableau Z avec une boîte coulissante, effectué une recherche en temps linéaire et disposez maintenant d’une alternative élégante à KMP. 🎯

Questions Fréquemment Posées

La leçon « Fonction Z pour rechercher un motif » est-elle gratuite ?

Oui — le texte complet de « Fonction Z pour rechercher un motif » 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 « Fonction Z pour rechercher un motif » ?

Faire correspondre les préfixes dans toute la chaîne 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 3 sur 4.

Combien de temps prend la leçon « Fonction Z pour rechercher un motif » ?

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