Illustration Algo Sardinas Patterson

19
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 Beldiceanu [email protected]

Transcript of Illustration Algo Sardinas Patterson

Page 1: 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]

Page 2: Illustration Algo Sardinas Patterson

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

Page 3: Illustration Algo Sardinas Patterson

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)

Page 4: Illustration Algo Sardinas Patterson

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

Page 5: Illustration Algo Sardinas Patterson

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

Page 6: Illustration Algo Sardinas Patterson

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

Page 7: Illustration Algo Sardinas Patterson

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

Page 8: Illustration Algo Sardinas Patterson

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

Page 9: Illustration Algo Sardinas Patterson

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)

Page 10: Illustration Algo Sardinas Patterson

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

Page 11: Illustration Algo Sardinas Patterson

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

Page 12: Illustration Algo Sardinas Patterson

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

Page 13: Illustration Algo Sardinas Patterson

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

Page 14: Illustration Algo Sardinas Patterson

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

Page 15: Illustration Algo Sardinas Patterson

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

Page 16: Illustration Algo Sardinas Patterson

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

Page 17: Illustration Algo Sardinas Patterson

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

Page 18: Illustration Algo Sardinas Patterson

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)

Page 19: Illustration Algo Sardinas Patterson

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)

Permet de construire un mot (000110101111000110)ayant deux décompositions en mots de C (en partant de C7)