Académique Documents
Professionnel Documents
Culture Documents
Patrick Reuter
matre de confrences http://www.labri.fr/~preuter
Thorie de la complexit
Classes de Grand-O
O(1) O(log n) O(n) O(n log n) O(na)
O(n2) O(n3)
complexit constante complexit logarithmique complexit linaire complexit quasi-linaire complexit polynomiale
complexit quadratique complexit cubique
O(an)
complexit exponentielle
Thorie de la complexit
En gnral :
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
La base du logarithme
logan = logbn _____ logba
La base du logarithme
logan = logbn _____ logba < == > logbn = logb a * loga n
La base du logarithme
logan = logbn _____ logba < == > logbn = logb a * loga n = c * loga n
La base du logarithme
logan = logbn _____ logba < == > logbn = logb a * loga n = c * loga n Avec c = logb a (ne dpend pas de n) c peut tre considrer comme une constante
Dclaration de variables
var compteur : integer; var diviseur : single; var c : char; var precision : double; var nom : string; var masculin : boolean; Nombre virgule flottante avec double prcision Chane de caractre Tableau } Nombre entier Nombre virgule flottante
var jours : array[1..12] of byte; diviseur := 1.1; compteur : = 1; Nom := Gerhard; { Affectation
Dclaration de variables
var compteur : integer; var diviseur : single; var c : byte; var precision : double; var nom : string; var masculin : boolean; Nombre virgule flottante avec double prcision Chane de caractre Tableau } Nombre entier Nombre virgule flottante
var jours : array[1..12] of byte; diviseur := 1.1; compteur : = 1; Nom := Gerhard; { Affectation
Dclaration de variables
Types de base prdfinis
Integer, boolean, Real, Single,
TABLEAU STATIQUE
2 dimensions
type t_damier = array[1..8] of array[1..8] of t_champ; var damier : t_damier;
RAPPEL MEMOIRE
Organisation de la mmoire
var nombre : byte; lettre := 191;
#536.870.911 #536.870.910 ... #1.000 ... #5 lettre #4 #3 #2 #1 #0 191
Organisation de la mmoire
var nombre : integer; nombre := 125;
#536.870.911 #536.870.910 ... #1.000 ... #5 #4 #3 #2 #1 #0
( 4 byte (octets) )
0 0 0 0 0 0 125 125
RAPPEL MEMOIRE
Organisation de la mmoire
var jours : array[1..12] of byte;
#536.870.911 #536.870.910 ... jours[12] #2011 ... ... jours[3] jours[2] jours[1] #2002 #2001 #2000 ... #0
{12 octets}
Organisation de la mmoire
Jours[1]:=31; jours[2]:=30;
#536.870.911 #536.870.910 ... jours[12] #2011 31 ... jours[3] jours[2] jours[1] #2002 #2001 #2000 31 28 31 ... #0
Organisation de la mmoire
var jours : array[1..12] of byte;
#536.870.911 #536.870.910 ... jours[12] #2011 31 ... jours[3] jours[2] jours[1] #2002 #2001 #2000 31 28 31 ... #0 Occupe de la place successive dans la mmoire
{12 octets}
Organisation de la mmoire
var jours : array[1..12] of byte;
#536.870.911 #536.870.910 ... jours[12] #2011 31 ... jours[3] jours[2] jours[1] #2002 #2001 #2000 31 28 31 ... #0 jours[index] #(2000+index-1) Occupe de la place successive dans la mmoire
{12 octets}
2D
Organisation de la mmoire
type t_ligne = array[1..3] of byte; type t_tableau2 = array[1..3] of t_ligne; var a : t_tableau2;
#536.870.911 #536.870.910 ... a[3][3] ... a[2][2] a[2][1] a[1][3] a[1][2] a[1][1] #2008 ... #2004 #2003 #2002 #2001 #2000 ... #0 a[i][j] #(2000+(3*(i-1))+ j - 1 ) Occupe de la place successive dans la mmoire
RAPPEL MEMOIRE
Type enregistrement 1D 2D n D
Affectation
aujourdhui.jour = 17; aujourdhui.mois = 10; aujourdhui.an = 2006;
Affectation
with aujourdhui do jour := 17; mois := 10; an := 2006; end
type t_date = RECORD an : mois : jour : END; var aujourdhui : t_date; #536.870.911 #536.870.910
... ...
#0
NOUVEAU :
Organisation de la mmoire
var a : byte;
#536.870.911 #536.870.910 ... #1.000 ... #5 #4 #3 #2 #1 #0
( 1 octet (byte) )
Organisation de la mmoire
var a : byte;
#536.870.911 #536.870.910 ... #1.000 ... a #5 #4 #3 #2 #1 #0
Organisation de la mmoire
var a : byte; a := 97;
#536.870.911 #536.870.910 ... #1.000 ... a #5 #4 #3 #2 #1 #0 97
Organisation de la mmoire
var a : byte; a := 97;
#536.870.911 #536.870.910 ... #1.000 ... a #5 #4 #3 #2 #1 #0 97
Organisation de la mmoire
var a : byte; a := 97; p_a := Addr(a);
#536.870.911 #536.870.910 ... #1.000 ... a #5 #4 #3 #2 #1 #0 97
{ Sauvegarder ladresse }
#536.870.911 #536.870.910 p_a #1.003 p_a #1.002 p_a #1.001 p_a #1.000 0 0 0 4 ... a #5 #4 #3 #2 #1 #0 97 p_a pointe vers a
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; { Drfrencement } #536.870.911 { p_a est 4, p_a^ est 10) #536.870.910 p_a #1.003 p_a #1.002 p_a #1.001 p_a #1.000 0 0 0 4 ... #5 p_a^ a #4 #3 #2 #1 #0 10
Cest quivalent !!
Dfinitions
Dclaration dun pointeur vers un byte
var p_a : ^byte;
#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
Et non plus : p_a := 4; { On ne sais pas si cest libre ! } p_a^ := 10; ERREUR !! { affectation par drfrencement #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 }
#536.870.911 #536.870.910 p_a #1.003 p_a #1.002 p_a #1.001 p_a #1.000 0 0 0 0 ... ... #5 #4 #3 #2 #1 #0
#536.870.911 #536.870.910 p_a #1.003 p_a #1.002 p_a #1.001 p_a #1.000 0 0 0 0 ... ... #5 #4 #3 #2 #1 #0
p_a^
var p_a : ^byte; ... New(p_a); p_a^ := 10; { affectation par drfrencement } #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 #0
p_a^
10
var p_a : ^byte; ... New(p_a); p_a^ := 10; { affectation par drfrencement ... Dispose(p_a); { Librer la mmoire } #536.870.911 #536.870.910 p_a #1.003 p_a #1.002 p_a #1.001 p_a #1.000 0 0 0 0 ... ... #5 #4 #3 #2 #1 #0
p_a := Addr(a); p_a^ := 10; #536.870.911 #536.870.910 p_a #1.003 p_a #1.002 p_a #1.001 p_a #1.000
0 0 0 4 ...
#5 #4 #3 #2 #1 #0
10
p_a
10