Algorithmes et structures de donnes 8me cours - PowerPoint PPT Presentation

1 / 59
About This Presentation
Title:

Algorithmes et structures de donnes 8me cours

Description:

Stock dans 4 Octets (32 bit), comme a on peut adresser. 232 octets = 4 294 967 296 octes = 4 GO. Limite bient t atteint. Organisation de la m moire ... – PowerPoint PPT presentation

Number of Views:56
Avg rating:3.0/5.0
Slides: 60
Provided by: PatrickR158
Category:

less

Transcript and Presenter's Notes

Title: Algorithmes et structures de donnes 8me cours


1
Algorithmes et structures de données8ème cours
  • Patrick Reuter
  • maître de conférences
  • http//www.labri.fr/preuter

2
Théorie de la complexité
  • Classes de Grand-O
  • O(1) complexité constante
  • O(log n) complexité logarithmique
  • O(n) complexité linéaire
  • O(n log n) complexité quasi-linéaire
  • O(na) complexité polynomiale
  • O(n2) complexité quadratique
  • O(n3) complexité cubique
  • O(an) complexité exponentielle

O(log n) ? O(n) ? O(n log n) ? O(n2) ? O(n3) ?
O(2n)
3
Théorie de la complexité
  • En général
  • O(f) g ?c gt 0 ? n0 gt 0 ? n n0 g(n)
    c f(n)
  • Soit g une fonction non négative.
  • g est dans O(f) sil existe deux constantes
    positives c et n0 telles que g ? cf(n) pour tout
    n gt n0.
  • EXEMPLE T(n) 9n2 ? O(n2) f n2, g
    9n2

4
  • Algorithme A1 en O(n)
  • A2 Exécuter 4 fois lalgorithme A1
  • Quel est sa complexité ?

5
Elimination des constantes
  • Si
  • T(n) ? O(kf(n))
  • où k gt 0, une constante
  • alors
  • T(n) ? O(f(n)).
  • Les constantes sont ignorées!

6
  • Algorithme A1 en O(n)
  • A3 Exécuter 4n2 fois lalgorithme A1
  • Quel est sa complexité ?

7
Règle des produits
  • Si
  • T1(n) ? O(f(n))
  • et
  • T2(n) ? O(g(n))
  • alors
  • T1(n)T2(n) O(f(n) g(n))

8
  • Algorithme A1 en O(n)
  • Algorithme A2 en O(n2)
  • A4 Exécution successive de A1 et A2
  • Quel est sa complexité ?

9
Règle des sommes
  • Si
  • T1(n) ? O(f(n))
  • et
  • T2(n) ? O(g(n)),
  • alors
  • T1(n) T2(n) ? O(max(f(n), g(n)))

10
Transitivité
  • Si
  • f(n) ? O(g(n))
  • et
  • g(n) ? O(h(n)),
  • alors
  • f(n) ? O(h(n)).
  • La notation Grand-O est transitive

11
  • Algorithme A1 avec T1(n) log2n
  • Algorithme A2 avec T2(n) log10n
  • Quelle algorithme a la meilleure complexité
    asymptotique ?

12
La base du logarithme
  • logbn
  • logan _____
  • logba

13
La base du logarithme
  • logbn
  • logan _____
  • logba
  • lt gt
  • logbn logb a loga n

14
La base du logarithme
  • logbn
  • logan _____
  • logba
  • lt gt
  • logbn logb a loga n c loga n

15
La base du logarithme
  • logbn
  • logan _____
  • logba
  • lt gt
  • logbn logb a loga n c loga n
  • Avec c logb a
  • (ne dépend pas de n)
  • ? c peut être considérer
  • comme une constante

16
(No Transcript)
17
Déclaration de variables
  • var compteur integer
  • var diviseur single
  • var c char
  • var precision double
  • var nom string
  • var masculin boolean
  • var jours array1..12 of byte
  • diviseur 1.1 Affectation
  • compteur 1
  • Nom Gerhard

Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractère
Tableau
18
Déclaration de variables
  • var compteur integer
  • var diviseur single
  • var c byte
  • var precision double
  • var nom string
  • var masculin boolean
  • var jours array1..12 of byte
  • diviseur 1.1 Affectation
  • compteur 1
  • Nom Gerhard

Nombre entier
Nombre à virgule flottante
Nombre à virgule flottante avec double précision
Chaîne de caractère
Tableau
19
Déclaration de variables
  • Types de base prédéfinis
  • Integer, boolean, Real, Single,
  • Les types énumérés
  • type t_jourdesemaine (lundi, mardi, mercredi,
    jeudi, vendredi, samedi, dimanche)
  • var jour t_jourdesemaine
  • Type tableau (structure homogène) -- TABLEAU
    STATIQUE
  • 1 dimension
  • type t_tableau array1..12 of byte
  • var jours t_tableau
  • 2 dimensions
  • type t_damier array1..8 of array1..8 of
    t_champ

20
RAPPEL MEMOIRE
  • Types de base prédéfinis
  • char
  • integer

21
Organisation de la mémoire
  • var nombre byte
  • lettre 191

536.870.911
536.870.910
...
1.000
...
5
lettre 4
191
3
2
1
0
22
Organisation de la mémoire
  • var nombre integer ( 4 byte (octets) )
  • nombre 125

536.870.911
536.870.910
...
1.000
...
5
4
3
0
nombre
0
2
0
0
nombre
1
0
nombre
0
0
nombre
125
125
23
RAPPEL MEMOIRE
  • Type tableau (structure homogène)
  • (statique)
  • 1D
  • 2D
  • n D

24
Organisation de la mémoire
  • var jours array1..12 of byte 12
    octets

536.870.911
536.870.910
...
jours12 2011
...
...
jours3 2002
jours2 2001
jours1 2000
...
0
25
Organisation de la mémoire
  • Jours131 jours230

536.870.911
536.870.910
...
jours12 2011
31
...
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
26
Organisation de la mémoire
  • var jours array1..12 of byte 12
    octets

536.870.911
536.870.910
...
jours12 2011
31
...
Occupe de la place successive dans la mémoire
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
27
Organisation de la mémoire
  • var jours array1..12 of byte 12
    octets

536.870.911
536.870.910
...
jours12 2011
31
...
Occupe de la place successive dans la mémoire
jours3 2002
31
jours2 2001
28
jours1 2000
31
...
0
? joursindex (2000index-1)
28
  • 2D

29
Organisation de la mémoire
  • type t_ligne array1..3 of byte
  • type t_tableau2 array1..3 of t_ligne
  • var a t_tableau2

536.870.911
536.870.910
...
a33 2008
...
...
a22 2004
Occupe de la place successive dans la mémoire
a21 2003
a13 2002
a12 2001
a11 2000
...
0
  • aij (2000(3(i-1)) j - 1 )

30
RAPPEL MEMOIRE
  • Type enregistrement
  • 1D
  • 2D
  • n D

31
Type enregistrement (structure hétérogène)
  • Exemple
  • Déclaration du type
  • type t_date RECORD
  • an integer
  • mois byte
  • jour byte
  • END
  • Déclaration dune variable
  • var aujourdhui t_date
  • Affectation
  • aujourdhui.jour 17
  • aujourdhui.mois 10
  • aujourdhui.an 2006

32
Type enregistrement (structure hétérogène)
  • Exemple
  • Déclaration du type
  • type t_date RECORD
  • an integer
  • mois byte
  • jour byte
  • END
  • Déclaration dune variable
  • var aujourdhui t_date
  • Affectation
  • with aujourdhui do
  • jour 17
  • mois 10

33
  • type t_date RECORD
  • an integer
  • mois byte
  • jour byte
  • END
  • var aujourdhui t_date

536.870.911
...
536.870.910
...
17
aujourdhui.jour 4005
aujourdhui.mois 4004
10
aujourdhui.an 4003
0
aujourdhui.an 4002
0
Occupe de la place successive dans la mémoire
aujourdhui.an 4001
7
aujourdhui.an 4000
214
...
0
34
  • NOUVEAU

35
(No Transcript)
36
(No Transcript)
37
Adresse dune variable
  • Stocké dans 4 Octets (32 bit), comme ça on peut
    adresser
  • 232 octets 4 294 967 296 octes
  • 4 GO
  • Limite bientôt atteint

38
Organisation de la mémoire
  • var a byte ( 1 octet (byte) )

536.870.911
536.870.910
...
1.000
...
5
4
3
2
1
0
39
Organisation de la mémoire
  • var a byte

536.870.911
536.870.910
...
1.000
...
5
a 4
3
2
1
0
40
Organisation de la mémoire
  • var a byte
  • a 97

536.870.911
536.870.910
...
1.000
...
5
a 4
97
3
2
1
0
41
Organisation de la mémoire
  • var a byte
  • a 97

536.870.911
536.870.910
...
1.000
...
5
a 4
97
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
42
Organisation de la mémoire
  • var a byte
  • a 97
  • p_a Addr(a) Sauvegarder ladresse

536.870.911
536.870.910
...
1.000
...
5
a 4
97
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
43
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse

536.870.911
536.870.910
p_a pointe vers a
0
p_a 1.003
0
p_a 1.002
0
p_a 1.001
p_a 1.000
4
...
5
a 4
97
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
44
  • var a byte
  • var p_a pointer to byte 4 octets, lire
    pointeur vers a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse
  • p_a est 4, p_a est 97)
  • p_a 10 Déréférencement
  • p_a est 4, p_a est 10)

536.870.911
536.870.910
0
p_a 1.003
0
p_a 1.002
0
p_a 1.001
p_a 1.000
4
...
5
p_a a 4
10
3
2
1
Comment connaître ladresse de a ? ? Addr(a)
0
45
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse
  • p_a 10 affectation par déréférencement
  • a 10 affectation

46
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • a 97
  • p_a Addr(a) Sauvegarder ladresse
  • p_a 10 affectation par déréférencement
  • a 10 affectation

Cest équivalent !!
47
Définitions
  • Déclaration dun pointeur vers un byte
  • var p_a byte
  • Déréférencement dun pointeur
  • p_a
  • Connaître ladresse dune variable a
  • Addr(a) ou bien
  • _at_a

48
  • var p_a byte 4 octets, lire pointeur vers
    a
  • begin
  • p_a 10 affectation par déréférencement
  • end.
  • ERREUR !!

49
  • var p_a byte 4 octets, lire pointeur vers
    a
  • p_a 10 affectation par déréférencement
  • ERREUR !!

536.870.911
536.870.910
p_a 1.003
p_a 1.002
p_a 1.001
p_a 1.000
...
5
4
3
2
1
0
50
  • var p_a byte 4 octets, lire pointeur vers
    a
  • Et non plus p_a 4 On ne sais pas si cest
    libre !
  • p_a 10 affectation par déréférencement
  • ERREUR !!

536.870.911
536.870.910
p_a 1.003
p_a 1.002
p_a 1.001
p_a 1.000
...
5
4
3
2
1
0
51
  • Solution
  • var p_a byte 4 octets, lire pointeur vers
    a
  • ...

536.870.911
536.870.910
0
p_a 1.003
0
p_a 1.002
p_a 1.001
0
p_a 1.000
0
...
...
5
4
3
2
1
0
52
  • Solution
  • var p_a byte 4 octets, lire pointeur vers
    a
  • ...
  • New(p_a)

536.870.911
536.870.910
0
p_a 1.003
0
p_a 1.002
p_a 1.001
0
p_a 1.000
0
...
...
5
4
3
2
1
0
p_a
53
  • Solution
  • var p_a byte 4 octets, lire pointeur vers
    a
  • ...
  • New(p_a)
  • p_a 10 affectation par déréférencement

536.870.911
536.870.910
p_a pointe vers p_a
0
p_a 1.003
0
p_a 1.002
p_a 1.001
0
0
p_a 1.000
...
...
5
4
3
2
1
10
p_a 0
54
  • Solution
  • var p_a byte 4 octets, lire pointeur vers
    a
  • ...
  • New(p_a)
  • p_a 10 affectation par déréférencement
  • ...
  • Dispose(p_a) Libérer la mémoire

536.870.911
536.870.910
0
p_a 1.003
0
p_a 1.002
p_a 1.001
0
p_a 1.000
0
...
...
5
4
3
2
1
0
55
Ebauche da la mémoire plus compacte
56
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • p_a Addr(a) Sauvegarder ladresse
  • p_a 10 Déréférencement

536.870.911
536.870.910
p_a pointe vers a
0
p_a 1.003
0
p_a 1.002
0
p_a 1.001
p_a 1.000
4
...
5
a 4
10
3
2
1
0
Comment connaître ladresse de a ? ? Addr(a)
57
  • var a byte
  • var p_a byte 4 octets, lire pointeur vers
    a
  • p_a Addr(a) Sauvegarder ladresse
  • p_a 10 Déréférencement

p_a
a
10
58
(No Transcript)
59
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com