from jyquickhelper import add_notebook_menu
add_notebook_menu()

"""
Explanation: 1A.algo - La distance d'édition
La distance d'édition ou de Levenshtein calcule une distance entre deux séquences. L'algorithme utilise la programmation dynamique.
End of explanation
"""


def dist_hamming(m1,m2):
    d = 0
    for a,b in zip(m1,m2):
        if a != b : 
            d += 1
    return d

dist_hamming("close", "cloue")

"""
Explanation: Introduction
On veut mesurer la proximité entre deux mots et un moyen simple est de construire une distance : $d(m_1,m_2) = d(m_2, m_1) = ?$.
Premier essai de distance : Hamming
La distance de Hamming consiste à comparer les caractères les unes à la suite des autres.
$\begin{array}{c|ccccc} A & c & l & o & s & e \ \hline B & c & l & o & u & e \ \hline d(A,B) & 0 & 0 & 0 & 1 & 0 \end{array}$
La distance est alors la somme des petites distances :
End of explanation
"""


dist_hamming("longmot", "liongmot")

dist_hamming("longmot", "longmoit")

"""
Explanation: Exercice 1 : comment prendre en compte différentes tailles de mots ?
Les petits défauts de Hamming
Que pensez-vous de ces deux distances (on suppose que la fonction dist_hamming est celle provenant de l'exercice 1).
End of explanation
"""


