web-dev-qa-db-fra.com

Quelles sont les principales différences entre les algorithmes de recherche Knuth-Morris-Pratt et Boyer-Moore?

Quelles sont les principales différences entre l'algorithme Knuth-Morris-Pratt search et l'algorithme Boyer-Moore ?

Je sais que kmp _ recherche Y dans X, tente de définir un modèle dans Y et enregistre le modèle dans un vecteur. Je sais aussi queBMfonctionne mieux pour les petits mots, comme ADN (ACTG).

Quelles sont les principales différences dans leur fonctionnement? Lequel est le plus rapide? Lequel est le moins gourmand en informatique? Dans quels cas?

37
ghaschel

_ { La page Web UTexas de Moore } _ parcourt les deux algorithmes étape par étape (il fournit également diverses sources techniques):

Selon l'homme lui-même,

L'algorithme classique de Boyer-Moore souffre du phénomène qu'il a tendance à ne pas travailler aussi efficacement sur de petits alphabets comme l’ADN. Le saut la distance a tendance à cesser de croître avec la longueur du motif parce que les sous-chaînes se reproduisent fréquemment. En se souvenant plus de ce qui a déjà apparié, on peut obtenir de plus grands sauts dans le texte. Un peut même organiser la "mémoire parfaite" et ainsi regarder chaque caractère à la plupart du temps, alors que l’algorithme de Boyer-Moore, bien que linéaire, peut inspecter un caractère du texte plusieurs fois. Cette idée de se souvenir de plus a été exploré dans la littérature par d'autres. Il souffre du besoin de très grandes tables ou de machines à états.

Cependant, certaines { modifications de BM } ont rendu la recherche alphabétique viable.

28
David Titarenco

Dans une explication approximative

L'approche de Boyer-Moore consiste à essayer de faire correspondre le dernier caractère du modèle au lieu du premier en partant de l'hypothèse que s'il n'y a pas de correspondance à la fin, il n'est pas nécessaire d'essayer de faire correspondre au début. Cela permet de "grands sauts" donc BM fonctionne mieux lorsque le motif et le texte que vous recherchez ressemblent à du "texte naturel" (c'est-à-dire anglais)

Knuth-Morris-Pratt recherche l'occurrence d'un "mot" W dans une "chaîne de texte" principale en utilisant l'observation suivante: en cas d'incompatibilité, le mot lui-même contient suffisamment d'informations pour déterminer où la correspondance suivante pourrait commencer. , évitant ainsi le réexamen de caractères précédemment appariés. (Source: Wiki )

Cela signifie que KMP convient mieux aux petits ensembles tels que DNA (ACTG)

32
gtgaxiola

La technique de Boyer-Moore associe les caractères de droite à gauche et fonctionne bien sur de longs motifs. knuth moris pratt associe les caractères de gauche à droite, fonctionne rapidement sur des motifs brefs. 

1
Sadaf Khursheed