Illustration Algo Sardinas Patterson
Transcript of Illustration Algo Sardinas Patterson
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 1/19
2003
Illustration de l’algorithme
de Sardinas Patterson
Nicolas [email protected]
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 2/19
Programmation Logique
Le langage
Soit A un alphabet fini non vide.
Un code sur A est un sous ensemble de mot C dans A* tel que:
quelque soit 2 séquences
x1 x2 … xm (xi dans C) et y1 y2 … ym (yi dans C)
si x1 x2 … xm = y1 y2 … ymalors: (1) n=m (2) xi=yi (pour tout i)
Définition d’un code
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 3/19
Programmation Logique
Le langage
Un code ne contient pas le mot vide
C n’est pas un code s’il existe un mot se décomposant de deuxmanière distinctes
Exemple: A={a,b} C={a,ab,ba} n’est pas un code car
il existe un mot se décomposant de deux manières distinctespar rapport à C, à savoir aba = (a)(ba) = (ab) (a)
Définition d’un code (remarques)
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 4/19
Programmation Logique
Le langage
Détecter et corriger les erreurs
Compression de données
Utilité des codes
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 5/19
Programmation Logique
Le langage
Soit C un code sur un alphabet A non vide. C est un
. Bloc code si tous les mots de C ont la même longueur
. Préfixe code s’il n’existe pas 2 mots de C tel que l’un est lepréfixe de l’autre
. Suffixe code s’il n’existe pas 2 mots de C tel que l’un est lesuffixe de l’autre
. Bipréfixe code si C est à la fois un préfixe et un suffixe code
. Code binaire si le nombre d’éléments de l’alphabet A est 2.
Classes de codes
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 6/19
Programmation Logique
Le langage
Question fondamentale:
Etant donné C un ensemble de mots sur un alphabet A,
déterminer si C est un code ou pas.
Pour cela on va maintenant décrire
l’algorithme de Sardinas Patterson
Déterminer si C est un code ou pas
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 7/19
Programmation Logique
Le langage
Définissons inductivement les deux ensembles suivant à partir de C
(a) C1={x dans A+ | il existe c dans C: cx dans C}
autrement dit:
suffixe non vide de C dont le préfixe appartient à C
Déterminer si C est un code ou pas
dans C
dans C élément de C1
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 8/19
Programmation Logique
Le langage
(b) Ci+1={x dans A* | il existe p dans C: px dans C i}
autrement dit:suffixe de Ci dont le préfixe appartient à C
Déterminer si C est un code ou pas
dans Ci
dans C élément de Ci+1
Ci+1={x dans A* | il existe p dans Ci: px dans C}
autrement dit:
suffixe de C dont le préfixe appartient à Ci
OU BIEN
dans C
dans Ci
élément de Ci+1
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 9/19
Programmation Logique
Le langage
Théorème
Soit A un alphabet et C dans A+ un ensemble de mots non vide
C est un code si et seulement si pour tout i>1
l’intersection entre C et Ci est vide
Sardinas Patterson (fin)
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 10/19
Programmation Logique
Le langage
C= {010,0001,0110,1100,
00011,00110,11110,101011} est-il un code ?
Example d’utilisation
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 11/19
Programmation Logique
Le langage
! 010 pas un préfixe d’un autre mot de C
! 0001 préfixe de 00011: donc suffixe 1 dans C1
!
0110 pas un préfixe d’un autre mot de C
! 1100 pas un préfixe d’un autre mot de C
!
00011 pas un préfixe d’un autre mot de C
!
00110 pas un préfixe d’un autre mot de C! 11110 pas un préfixe d’un autre mot de C
!
101011 pas un préfixe d’un autre mot de C
Calcul de C1
C={010,0001,0110,1100,00011,00110,11110,101011}
C1={1}
dans C
dans C élément de C1
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 12/19
Programmation Logique
Le langage
! Aucun mot de C n’est préfixe d’un mot de C1 (longueur du mot de C1 trop petite)
! Cherche éléments de C ayant un mot de C1 comme préfixe:" 1 préfixe de 1100: donc suffixe 100 dans C2
"
1 préfixe de 11110: donc suffixe 1110 dans C2
"
1 préfixe de 101011: donc suffixe 01011 dans C2
Calcul de C2
C={010,0001,0110,1100,00011,00110,11110,101011}
C2={100,1110,01011}
C1={1}
dans C1
dans C élément de C2
dans C
dans C1
élément de C2
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 13/19
Programmation Logique
Le langage
! Cherche mots de C préfixe d’un mot de C2"
010 préfixe de 01011: donc 11 dans C3
"
0001, 0110,1100,00011,00110,11110,101011 pas préfixe
d’aucun mot de C2
!
Cherche éléments de C ayant un mot de C2 comme préfixe:"
aucun mot de C ne commence par 100
"
aucun mot de C ne commence par 1110
"
aucun mot de C ne commence par 01011
Calcul de C3
C={010,0001,0110,1100,00011,00110,11110,101011}
C3={11}
C2={100,1110,01011} dans C2
dans C élément de C3
dans C
dans C2
élément de C3
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 14/19
Programmation Logique
Le langage
! Cherche mots de C préfixe d’un mot de C3 (longueur du mot de C3 trop petite)
! Cherche éléments de C ayant un mot de C3 comme préfixe:"
11 préfixe de 1100: donc 00 dans C4
"
11 préfixe de 11110: donc 110 dans C4
Calcul de C4
C={010,0001,0110,1100,00011,00110,11110,101011}
C4={00,110}
C3={11}
dans C3
dans C élément de C4
dans C
dans C3
élément de C4
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 15/19
Programmation Logique
Le langage
! Cherche mots de C préfixe d’un mot de C4"
Aucun mot de C n’est préfixe de 00 (longueur trop petite)
"
Aucun mot de C n’est préfixe de 110 (seul 010 serait un candidat )
! Cherche éléments de C ayant un mot de C4 comme préfixe:"
00 préfixe de 0001: donc 01 dans C5
"
00 préfixe de 00011: donc 011 dans C5
"
00 préfixe de 00110: donc 110 dans C5
" 110 préfixe de 1100: donc 0 dans C5
Calcul de C5
C={010,0001,0110,1100,00011,00110,11110,101011}
C5={01,011,110,0}
C4={00,110}
dans C4
dans C élément de C5
dans C
dans C4 élément de C5
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 16/19
Programmation Logique
Le langage
! Cherche mots de C préfixe d’un mot de C5"
Aucun mot de C n’est préfixe de 00 ou 0 (longueur trop petite)
"
Aucun mot de C n’est préfixe de 011 ou 110 (seul 010 serait un candidat )
! Cherche éléments de C ayant un mot de C5 comme préfixe:"
01 préfixe de 010: donc 0 dans C6
"
01 préfixe de 0110: donc 10 dans C6
"
011 préfixe de 0110: déjà trouvé
"
110 préfixe de 1100: déjà trouvé
"
0 préfixe de 010: déjà trouve
"
0 préfixe de 0001: donc 001 dans C6
" 0 préfixe de 0110: donc 110 dans C6"
0 préfixe de 00011: donc 0011 dans C6
" 0 préfixe de 00110: donc 0110 dans C6
Calcul de C6C={010,0001,0110,1100,00011,00110,11110,101011}
C6={0,10,001,110,0011,0110}
C5={01,011,110,0} dans C5
dans C élément de C6
dans C
dans C5 élément de C6
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 17/19
Programmation Logique
Le langage
! Cherche mots de C préfixe d’un mot de C6"
Le mot 0110 de C est préfixe de 0110 de C6donc le mot vide appartient à C7
donc C n’est pas un code
Calcul de C7
C={010,0001,0110,1100,00011,00110,11110,101011}
C7={!,…}
C6={0,10,001,110,0011,0110}
dans C6
dans C élément de C7
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 18/19
Programmation Logique
Le langage
Récapitulatif des calculs
C
010
0001
0110
1100
00011
00110
11110
101011
C1
C/C
00011
C2
C1/C
1100
C1/C
11110
C1/C
101011
C3
C/C2
01011
C4
C3/C
1100
C3/C
11110
C5
C4/C
0001
C4/C
00011
C4/C
00110
C4/C
1100
C6
C5/C
010
C5/C
0110
C5/C
0001
C5/C
0110
C5/C
00011
C5/C00110
C7
C/C6 (0110)
!
7/25/2019 Illustration Algo Sardinas Patterson
http://slidepdf.com/reader/full/illustration-algo-sardinas-patterson 19/19
Programmation Logique
Le langage C
010
0001
0110
1100
0001100110
11110
101011
C1
C/C
00011
C2
C1/C
1100
C1/C
11110
C1/C101011
C3
C/C2
01011
C4
C3/C
1100
C3/C
11110
C5
C4/C
0001
C4/C
00011
C4/C00110
C4/C
1100
C6
C5/C
010
C5/C
0110
C5/C0001
C5/C
0110
C5/C
00011
C5/C
00110
C7
C/C6 (0110)
!
C
(0110)C6
C
(1100)C4
C2
(01011))C
C
(1 C1
C
(0001)
C(00110)C5
C(11110)C3
C(010)
C(00011)
C
Permet de construire un mot (000110101111000110)ayant deux décompositions en mots de C (en partant de C7)