Algorithme de Boyer-Moore : fonction de calcul du décalage du motif.

Les arguments de la fonction sont :

  • l’index du caractère du motif qui est comparé à celui du texte ;
  • le caractère du texte qui est comparé à celui du motif ;
  • la table de décalage

La fonction n’est appelée qui si un caractère du texte diffère du caractère du motif qui lui fait face (d’index ‘id’).

On cherche alors à savoir si ce caractère du texte figure parmi les caractères du motif qui précèdent celui qui lui fait face.

Deux cas se présentent :

1 – le caractère du texte ne figure pas parmi les caractères du motif qui précèdent celui qui lui fait face : la fonction renvoie alors ‘id’ + 1

2 – le caractère du texte figure parmi les caractères du motif qui précèdent celui qui lui fait face : on lit la valeur ‘vid’ de l’index de ce caractère dans la table de décalage et la fonction renvoie ‘id’ – ‘vid’

def val_decal(tdd : list, idc : int ,car : str) -> int :
    """ Détermine la valeur du décalage du motif dans l'algorithme
    de Boyer-Moore, lorsque le caractère du texte 'car' est différent
    de celui du motif d'index 'idc'.
    
    Pré-conditions
    >>> 'tdd' : table de décalage, liste de dictionnaires
    >>> 'idc ' : index du caractère dans le motif, entier positif,
        supérieur ou égal à zéro, strictement inférieur au nombre de 
        caractères du motif
    >>> 'car' : caractère du texte en face du caractère du motif, str : une
        seule lettre

    Post-conditions
    >>> renvoie un entier positif compris entre 1 et la longueur du motif,
        inclus.
    """

    # On consulte le dictionnaire situé à l'index 'idc' dans la table 
    # de décalage
    
    # Cas 1 - le caractère du texte est une des clés du dictionnaire
    if car in tdd[idc]:

        # on renvoie une valeur de décalage calculée à partir
        # de la valeur de index et de la valeur associée à la clé 'car'
        return idc - tdd[idc][car]
    
    # Cas 2 - le caractère du texte n'est pas une des clés du dictionnaire
    return idc + 1

Téléchargement d’un fichier : fonction écrite en langage Python

Auto-évaluation

Évaluez votre degré de réussite. Comparez votre réponse avec la proposition ci-dessus.

1 – Indiquez la durée mise pour réaliser le travail demandé :
Moins de 15 minutes
Entre 15 minutes et 30 minutes
Plus de 30 minutes

2 – Indiquez les conditions de réalisation :
Sans aide (documentation, tutoriel, forum…)
Avec aide :
>>> documentation
>>> tutoriel
>>> forum

3 – indiquez votre degré de réussite du travail demandé :
entre 75 et 100 %
entre 50 et 75 %
entre 25 et 50%
moins de 25 %