Skip to content
Snippets Groups Projects
Commit 3f7a6377 authored by Florian Burgener's avatar Florian Burgener
Browse files

Update README

parent 2126fb22
No related branches found
No related tags found
No related merge requests found
# 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 :
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment