diff --git a/README.md b/README.md index 76c20bf7793e2397477ab44dc893a0899edb78df..50ad1eb5cbf41b4bb8495f8fc415b6800ce7a0fc 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,35 @@ # TP numéro 1 : Polynômes et Reed-Solomon (modulo un nombre premier) -Cours : IT 122 – 2021-2022 +Cours : ISC 122 – 2021-2022 -Groupe : Florian BURGENER, Gawen ACKERMANN, Quentin FASLER, Dario GENGA +Groupe : Gawen ACKERMANN, Florian BURGENER, Quentin FASLER, Dario GENGA ## Structure du projet Afin de réaliser ce travail pratique, nous avons créé une classe `Polynomial`, contenant des méthodes permettant -d'ajouter, multiplier et faire une division modulaire sur des polynômes. Cette classe peut également afficher le -polynôme dans la console et calculer le résultat du polynôme en passant une valeur à x. +d'ajouter, multiplier et d'appliquer un modulo sur un polynôme. Cette classe peut également afficher le +polynôme dans la console et d'obtenir y en passant x par le polynôme (faire P(x) = y). -En plus de cette classe le programme contient les méthodes suivantes : +En plus de cette classe le programme contient les fonctions suivantes : -- `get_bezout_coefficients(a, b)` : Calcule les coefficients de bézout pour les valeurs `a` et `b` -- `modular_inverse(a, n)` : Calcule l'inverse modulaire de `a` par `n` -- `compute_lagrange_polynomial(points, prime_number)` : Calcule le polynôme de lagrange à partir des `points` en -utilisant un inverse modulaire obtenu avec le `prime_number`. -- `reed_solomon(...)` : Décode le message via reed solomon. +- `get_bezout_coefficients(a, b)` : Calcule les coefficients de bézout pour les valeurs `a` et `b` ; +- `modular_inverse(a, n)` : Calcule l'inverse modulaire de `a` dans les modulos `n` ; +- `compute_lagrange_polynomial(points, prime_number)` : Calcule le polynôme de Lagrange dans un modulo `prime_number` passsant par tous les `points` ; +- `reed_solomon(...)` : Corrige le message en appliquant la méthode de Reed-Solomon. -## Démarche de décodage +## Explication de notre démarche pour corriger le message -Afin de décoder le message, nous utilisons la méthode `reed_solomon` qui fonctionne de la manière suivante : -1) On parcourt toutes les combinaisons de points possiblement juste. -2) On crée une liste qui regroupe une combinaison de points avec tous les points justes que l'on connait. -3) On ajoute x points qui sont probablement juste. (Dans notre cas 2 car la longueur du message (25) - le nombre de points juste a partir de l'index fournis (23) = 2) -4) On construit le polynôme de Lagrange avec la méthode `compute_lagrange_polynomial`. -5) On parcourt l'intégralité des points afin de vérifier si le polynôme est correct. - 1) On injecte x dans le polynôme et on regarde que le résultat soit égale à y. +Afin de corriger le message, nous utilisons la méthode `reed_solomon` qui fonctionne de la manière suivante : +1) On parcourt toutes les combinaisons dans la liste 0 à index - 1 (de longueur 2 = 25 - 23 (le nombre de points juste a partir de l'index fournis)) ; +2) On crée une liste qui regroupe la combinaison avec les points de index à longueur de la liste - 1 ; +3) On construit le polynôme de Lagrange avec la méthode `compute_lagrange_polynomial` ; +4) On parcourt l'intégralité des points afin de vérifier si le polynôme est correct ; + 4.A) On injecte x dans le polynôme et on regarde que le résultat soit égale à y ; +5) Si on a suffisamment de points justes (m + n points), alors on a trouvé le seul et unique polynôme qui passe par tous les points du message sans erreur ce qui nous permet de corriger le message. -6) Si on a suffisamment de points justes (m+n points) , alors on a trouvé le bon et unique polynôme qui passe par tous les points du message sans erreur si que nous permet de corriger notre message. - -## Message décodé -"Ce message vaut 18 points" +## Résultat +Message corrigé : Ce message vaut 18 points Polynôme passant par tous les points du message :