diff --git a/report/report.qmd b/report/report.qmd index d7df1962ed28f56c42ecacc2b94c143d15f254e3..a7dae08ea56689f942370d23a93c47ad98df1a29 100644 --- a/report/report.qmd +++ b/report/report.qmd @@ -256,7 +256,7 @@ def compute_vitter_params(m: int) -> tuple[int, int]: Étant donné que la longueur de notre alphabet est de 36, la valeur de $e$ est égale à 5 et celle de $r$ est de 4. Sur la base de ses valeurs nous pouvons -donc calculer les codes fixes des divers caractères sur la base des règle +donc calculer les codes fixes des divers caractères sur la base des règles suivantes : - Si $0 \leq k \leq 2r$, alors le symbole $S_{k}$ est encodé par la @@ -335,18 +335,18 @@ def encode(input: str) -> str: ``` Nous allons donc commencer par insérer dans l'arbre le nouveau caractère -rencontré via la fonction `insert_char`. Suite à cela nous ferons une recherche -dans l'arbre pour calculer la partie NYT (_Not Yet Transmitted_) qui servira -de préfixe au code fixe du caractère. Si ce caractère n'a pas encore été -rencontré, il sera aussi inséré dans une structure de données de type `set` qui -permet de stocker des données sans doublons. Ceci est critique du fait que +rencontré via la fonction `insert_char`. Suite à cela, nous ferons une +recherche dans l'arbre pour calculer la partie NYT (_Not Yet Transmitted_) qui +servira de préfixe au code fixe du caractère. Si ce caractère n'a pas encore +été rencontré, il sera aussi inséré dans une structure de données de type `set` +qui permet de stocker des données sans doublons. Ceci est critique du fait que le code NYT établi à l'insertion initiale du caractère a possiblement changé -suite aux divers _swaps_ qui ont possiblement eu lieu. Ces _swaps_ se produisent -lorsque le poids du sous-arbre gauche est supérieur à celui de droite. Par -conséquent, si nous allons insérer à nouveau un caractère connu au préalable -(i.e. présent dans le `set`), nous allons recalculer le préfixe NYT du caractère -via la fonction `compute_prefix` en parcourant l'arbre jusqu'à retrouvé ce -caractère. +suite aux divers _swaps_ et autres insertions qui ont eu lieu. Ces _swaps_ se +produisent lorsque le poids du sous-arbre gauche est supérieur à celui du +sous-arbre de droite. Par conséquent, si nous allons insérer à nouveau un +caractère connu au préalable (i.e. présent dans le `set`), nous allons +recalculer le préfixe NYT du caractère via la fonction `compute_prefix` en +parcourant l'arbre jusqu'à retrouver ce caractère. ### Résultat de l'encodage @@ -425,23 +425,24 @@ mésure jusqu'à retrouver la feuille NYT. À ce moment, il est nécessaire de lire les $e$ bits suivants. Si la valeur de ceux-ci en base 10 est inférieur à $r$, alors pour obtenir le symbole correspondant il est nécessaire de lire les $(e + 1)$, de les convertir en base 10 et d'y ajouter 1. La valeur numérique -résultante sera la position dans du symbole dans l'alphabet. Si la valeur de +résultante sera la position dans symbole dans l'alphabet. Si la valeur de $e$ est inférieur ou égale à $r$, il faut convertir ces bits en base 10 et d'y ajouter la valeur $r + 1$. -Plus concrètement, nous allons en premier lieu nous débarasser des éventuels +Plus concrètement, nous allons en premier lieu nous débarrasser des éventuels espaces dans la chaîne de caractères codées, puis nous allons lire cette chaîne -jusqu'à l'épuisement des bits dans celles-ci. À l'intérieur de la boucle, nous +jusqu'à l'épuisement des bits dans celle-ci. À l'intérieur de la boucle, nous commencerons par parcourir l'arbre jusqu'à la feuille NYT. Si la valeur du bit -actuel est 0, nous allons bifurquer à gauche, sinon à droite. Ayant recontré +actuel est 0, nous allons bifurquer à gauche, sinon à droite. Ayant rencontré la feuille NYT, nous appliquerons l'algorithme énoncé précédemment pour déterminer le caractère rencontré. Celui-ci, sera rajouté à la chaîne de caractère finale et sera aussi insérer dans un `set` afin d'indiquer que ce -caractère fut recontré. Ceci est important du fait que lorsque ce caractère +caractère fut recontré. Ceci est important du au fait que lorsque ce caractère sera à nouveau rencontré, le parcours de l'arbre ne se fera plus jusqu'à une feuille NYT et par conséquent le code NYT ne sera plus présent dans la chaîne -décodée. Ce cas est présenté par le branchement conditionnel à la ligne 43. -L'implémentation de cette fonction se trouve ci-dessous : +décodée à la suite de ce caractère. Ce cas est présenté par le branchement +conditionnel à la ligne 43. L'implémentation de cette fonction se trouve +ci-dessous : ```python def decode(encoded: str) -> (str, str):