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] += 1Faire 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
- Fonction préfixe KMP
- Hachage polynomial de chaînes
- Fonction Z pour rechercher un motif
- Tries pour les recherches par préfixe