Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
dct
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ISC3
compression
dct
Commits
d0557710
Verified
Commit
d0557710
authored
1 month ago
by
iliya.saroukha
Browse files
Options
Downloads
Patches
Plain Diff
feat: added part about vitter params
parent
8d8fbe98
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
report/report.qmd
+56
-4
56 additions, 4 deletions
report/report.qmd
with
56 additions
and
4 deletions
report/report.qmd
+
56
−
4
View file @
d0557710
...
@@ -232,10 +232,56 @@ l'inverse quantifiée.
...
@@ -232,10 +232,56 @@ l'inverse quantifiée.
# Huffman Adaptatif
# Huffman Adaptatif
Dans ce travail pratique nous allons implémenter l'algorithme de compression
Dans ce travail pratique nous allons implémenter l'algorithme de compression
Huffman Adaptatif. Celui-ci aura pour but de construire un arbre binaire où
Huffman Adaptatif. L'intérêt de cet algorithme est de pouvoir maximiser la
chaque noeud **externe** représentera un caractère dans la chaîne fournie pour
compression d'une chaîne de caractères en combinant le codage fixe (e.g. ASCII)
l'encodage et la valeur des noeuds **internes** correspondra à la somme des
et variable (e.g. Huffman). L'arbre résultant aura deux types de noeuds
poids de ses enfants (i.e. nombre d'occurrence du caractère).
différents. Les noeuds dit **externes** représenteront les caractères rencontrés
de la chaîne original et les des noeuds **internes** correspondront à la somme
des poids de ses enfants (i.e. nombre d'occurrence des caractères). Par
conséquent le poids de la racine de l'arbre doit être égal à la longueur de la
chaîne de caractère initiale.
## Calcul des codes fixes
Initialement, afin de calculer les codes fixes de chaque caractère nous devons
calculer les paramètres de Vitter $e$ et $r$. La valeur de ceux-ci dépendent
de la longueur de l'alphabet utilisé pour l'encodage.
```python
def compute_vitter_params(m: int) -> tuple[int, int]:
e = math.floor(np.log2(m))
r = m - (2 ** e)
return (e, r)
```
É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
suivantes :
- Si $0 \leq k \leq 2r$, alors le symbole $S_{k}$ est encodé par la
représentation binaire de $(k - 1)$ sur $(e + 1)$
- où $k$ est la position du symbole dans l'alphabet trié
- Sinon, le symbole $S_{k}$ est encodé par la représentation binaire de
$(k - r - 1)$ sur $e$ bits.
```python
def compute_k(char: str) -> int:
return DICT_ALPHABET[char]
def compute_code(char: str):
e, r = compute_vitter_params(len(LIST_ALPHABET))
k_char = compute_k(char)
if k_char <= 2*r:
bin_val = k_char - 1
n_bits = e + 1
return bin(bin_val)[2:].zfill(n_bits)
else:
bin_val = k_char - r - 1
return bin(bin_val)[2:].zfill(e)
```
## Structure de l'arbre
## Structure de l'arbre
...
@@ -369,3 +415,9 @@ Node(weight=9,
...
@@ -369,3 +415,9 @@ Node(weight=9,
value='v',
value='v',
left=None,
left=None,
```
```
## Décodage
Pour le décodage, nous allons appliquer l'algorithme présenté dans le cours
n°5. Celui-ci stripule qu'il est nécessaire de parcourir l'arbre au fur et à
mésure jusqu'à retrouver la feuille NYT. À ce moment il est
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment