Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cours
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
algorithmique
cours
Commits
6a92d672
Verified
Commit
6a92d672
authored
3 years ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
splitted cours
parent
88026c33
Branches
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#16930
passed
3 years ago
Stage: test
Changes
2
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
slides/cours_20.md
+0
-189
0 additions, 189 deletions
slides/cours_20.md
slides/cours_21.md
+236
-0
236 additions, 0 deletions
slides/cours_21.md
with
236 additions
and
189 deletions
slides/cours_20.md
+
0
−
189
View file @
6a92d672
...
@@ -15,24 +15,6 @@ patat:
...
@@ -15,24 +15,6 @@ patat:
backend
:
auto
backend
:
auto
---
---
<!-- # Le cours précédent -->
<!-- ## Questions (réponse sur matrix) -->
<!-- . . . -->
<!-- * Combien de points du suture? -->
<!--  -->
<!-- # Le cours précédent -->
<!-- ## Questions -->
<!-- * Aucun c'est de la colle -->
<!--  -->
# Le cours précédent
# Le cours précédent
## Questions
## Questions
...
@@ -737,174 +719,3 @@ void rotate(node *qt) {
...
@@ -737,174 +719,3 @@ void rotate(node *qt) {
# Compression sans perte (1/N)
## Idée générale
*
Regrouper les pixels par valeur
```
SG=0 | SD=1 SG=0 | SD=1
21 | 12 | 4 | 4 21 | 12 | 4
9 | 7 | 4 | 4 9 | 7 |
----------------- => -----------------
1 | 1 | 0 | 31 1 | 0 | 31
1 | 1 | 3 | 27 | 3 | 27
IG=2 | ID=3 IG=2 | ID=3
```
*
Comment faire?
# Compression sans perte (2/N)
## Que devient l'arbre suivant?

. . .
## Arbre compressé

# Compression sans perte (3/N)
*
Si un noeud a tous ses enfants égaux:
*
Donner la valeur au noeud,
*
Supprimer les enfants.
*
Remonter jusqu'à la racine.
## Écrire le pseudo-code (5min, matrix)
```
C
rien compression_sans_perte(arbre)
si !est_feuille(arbre)
pour i de 0 à 3
compression_sans_perte(arbre.enfant[i])
si derniere_branche(arbre)
valeur, toutes_égales = valeur_enfants(arbre)
si toutes_egales
arbre.info = valeur
detruire_enfants(arbre)
```
# Compression sans perte (4/N)
\f
ootnotesize
## Écrire le code C (5min, matrix)
. . .
```
C
void lossless_compression(node *qt) {
if (!is_leaf(qt)) {
for (int i = 0; i < CHILDREN; i++) {
lossless_compression(qt->child[i]);
}
if (is_last_branch(qt)) {
int val = -1;
if (last_value(qt, &val)) {
qt->info = val;
for (int i = 0; i < 4; ++i) {
free(qt->child[i]);
qt->child[i] = NULL;
}
}
}
}
}
```
# Compression sans perte (5/N)
\f
ootnotesize
```
C
bool is_last_branch(node *qt) {
for (int i = 0; i < 4; ++i) {
if (!is_leaf(qt)) {
return false;
}
}
return true;
}
bool last_value(node *qt, int *val) {
int info = qt->child[0];
for (int i = 1; i < 4; ++i) {
if (info != qt->child[i]) {
return false;
}
}
*val = info;
return true;
}
```
# Compression avec perte (1/N)
## Idée générale
*
Regrouper les pixels par valeur sous certaines conditions
```
SG=0 | SD=1 SG=0 | SD=1
21 | 12 | 4 | 3 21 | 12 | 4
9 | 7 | 4 | 4 9 | 7 |
----------------- => ------------------
1 | 1 | 0 | 31 1 | 0 | 31
2 | 1 | 3 | 27 | 3 | 27
IG=2 | ID=3 IG=2 | ID=3
```
*
On enlève si l'écart à la moyenne est "petit"?
# Compression avec perte (2/N)
## Que devient l'arbre suivant si l'écart est petit?

. . .
## Arbre compressé

# Compression avec perte (3/N)
## Comment mesurer l'écart à la moyenne?
. . .
*
Avec l'écart-type
\b
egin{equation
*
}
\m
u =
\f
rac{1}{4}
\s
um_{i=0}^{3} p[i],
\q
uad
\s
igma =
\s
qrt{
\f
rac{1}{N}
\s
um_{i=0}^3 (
\m
u-p[i])
^2}
\e
nd{equation
*
}
## Que devient l'algorithme?
. . .
*
Si $
\s
igma<
\t
heta$, $
\t
heta$ est la
**tolérance**
:
*
Remplacer la valeur du pixel par la moyenne des enfants.
*
Remonter les valeurs dans l'arbre.
## Quelle influence de la valeur de $\theta$ sur la compression?
. . .
*
Plus $
\t
heta$ est grand, plus l'image sera compressée.
# Compression avec perte (4/N)
## Que devient l'arbre avec $\theta=0.5$?

. . .

This diff is collapsed.
Click to expand it.
slides/cours_21.md
0 → 100644
+
236
−
0
View file @
6a92d672
---
title
:
"
Arbres
quaternaires,
compression
et
Barnes-Hut"
date
:
"
2022-04-06"
patat
:
eval
:
tai
:
command
:
fish
fragment
:
false
replace
:
true
ccc
:
command
:
fish
fragment
:
false
replace
:
true
images
:
backend
:
auto
---
# Le cours précédent
## Questions
*
Structure de données d'un arbre quaternaire?
. . .
```
C
typedef struct _node {
int info;
struct _node *child[4];
} node;
```
. . .
*
Dessin d'un noeud d'arbre quaternaire (avec correspondance
`node`
)?
. . .
```
{.mermaid format=pdf width=400 loc=figs/}
graph TD;
id0((" "))-->|"child[0]"| id1(("info"));
id0-->|"child[1]"| id2(("info"));
id0-->|"child[2]"| id3(("info"));
id0-->|"child[3]"| id4(("info"));
```
# Le cours précédent
## Questions
*
Comment faire la symétrie d'axe horizontal?
. . .
```
C
arbre symétrie(arbre)
si !est_feuille(arbre)
échanger(arbre.enfant[0], arbre.enfant[1])
échanger(arbre.enfant[2], arbre.enfant[3])
pour i de 0 à 3
symétrie(arbre.enfant[i])
retourne arbre
```
# Compression sans perte (1/N)
## Idée générale
*
Regrouper les pixels par valeur
```
SG=0 | SD=1 SG=0 | SD=1
21 | 12 | 4 | 4 21 | 12 | 4
9 | 7 | 4 | 4 9 | 7 |
----------------- => -----------------
1 | 1 | 0 | 31 1 | 0 | 31
1 | 1 | 3 | 27 | 3 | 27
IG=2 | ID=3 IG=2 | ID=3
```
*
Comment faire?
# Compression sans perte (2/N)
## Que devient l'arbre suivant?

. . .
## Arbre compressé

# Compression sans perte (3/N)
*
Si un noeud a tous ses enfants égaux:
*
Donner la valeur au noeud,
*
Supprimer les enfants.
*
Remonter jusqu'à la racine.
## Écrire le pseudo-code (5min, matrix)
```
C
rien compression_sans_perte(arbre)
si !est_feuille(arbre)
pour i de 0 à 3
compression_sans_perte(arbre.enfant[i])
si derniere_branche(arbre)
valeur, toutes_égales = valeur_enfants(arbre)
si toutes_egales
arbre.info = valeur
detruire_enfants(arbre)
```
# Compression sans perte (4/N)
\f
ootnotesize
## Écrire le code C (5min, matrix)
. . .
```
C
void lossless_compression(node *qt) {
if (!is_leaf(qt)) {
for (int i = 0; i < CHILDREN; i++) {
lossless_compression(qt->child[i]);
}
if (is_last_branch(qt)) {
int val = -1;
if (last_value(qt, &val)) {
qt->info = val;
for (int i = 0; i < 4; ++i) {
free(qt->child[i]);
qt->child[i] = NULL;
}
}
}
}
}
```
# Compression sans perte (5/N)
\f
ootnotesize
```
C
bool is_last_branch(node *qt) {
for (int i = 0; i < 4; ++i) {
if (!is_leaf(qt)) {
return false;
}
}
return true;
}
bool last_value(node *qt, int *val) {
int info = qt->child[0];
for (int i = 1; i < 4; ++i) {
if (info != qt->child[i]) {
return false;
}
}
*val = info;
return true;
}
```
# Compression avec perte (1/N)
## Idée générale
*
Regrouper les pixels par valeur sous certaines conditions
```
SG=0 | SD=1 SG=0 | SD=1
21 | 12 | 4 | 3 21 | 12 | 4
9 | 7 | 4 | 4 9 | 7 |
----------------- => ------------------
1 | 1 | 0 | 31 1 | 0 | 31
2 | 1 | 3 | 27 | 3 | 27
IG=2 | ID=3 IG=2 | ID=3
```
*
On enlève si l'écart à la moyenne est "petit"?
# Compression avec perte (2/N)
## Que devient l'arbre suivant si l'écart est petit?

. . .
## Arbre compressé

# Compression avec perte (3/N)
## Comment mesurer l'écart à la moyenne?
. . .
*
Avec l'écart-type
\b
egin{equation
*
}
\m
u =
\f
rac{1}{4}
\s
um_{i=0}^{3} p[i],
\q
uad
\s
igma =
\s
qrt{
\f
rac{1}{N}
\s
um_{i=0}^3 (
\m
u-p[i])
^2}
\e
nd{equation
*
}
## Que devient l'algorithme?
. . .
*
Si $
\s
igma<
\t
heta$, $
\t
heta$ est la
**tolérance**
:
*
Remplacer la valeur du pixel par la moyenne des enfants.
*
Remonter les valeurs dans l'arbre.
## Quelle influence de la valeur de $\theta$ sur la compression?
. . .
*
Plus $
\t
heta$ est grand, plus l'image sera compressée.
# Compression avec perte (4/N)
## Que devient l'arbre avec $\theta=0.5$?

. . .

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