G. Falquet, CUI, Université de Genève 1 de 35
Algortihmes et Structures de données
Gilles Falquet, printemps-été 2004
http://cui.unige.ch/isi/cours/std/
G. Falquet, CUI, Université de Genève 2 de 35
Ordinateurs
Machines composées de (depuis 1940 en
v
.) :
Processeur
tr
aitements sur les données stockées dans la mémoire.
Mémoire
composée de cellules > composée de bits = unité binaire de mémoire
– stock
er le progr
amme à exécuter
– stock
er les données à tr
aiter
Systèmes de communication (entrées/sorties):
tr
ansmission d’informations entre l’ordinateur et son en
vironnement
écr
ans, cla
viers, souris, réseau de télécommunication, appareils
(moteurs, capteurs, etc.).
G. Falquet, CUI, Université de Genève 3 de 35
Architecture des ordinateurs
01000101
11001101
données
programme
11111101 disque magnétique
écran
PROCESSEUR
bus
clavier
souris
manettes
etc.
MEMOIRE
G. Falquet, CUI, Université de Genève 4 de 35
Modèle
Mémoire
séquence de Cellules
Cellule = séquence de Bits
Bit = mémoire à deux états (0 ou 1) , (==> n bits : 2
n
états)
Programme
ensemble d’instructions
Instruction:
- mouv
ement de données mémoire <--> registres du processeur
- calculs (arithmétiques, logiques, etc.) dans le processeur
- rupture de séquence (conditionnelle)
- entrées/sorties
- etc.
G. Falquet, CUI, Université de Genève 5 de 35
Exécution
ix
saut 34
iy
iz
56
34
35
G. Falquet, CUI, Université de Genève 6 de 35
Information et données
T
r
aitement de l’information par une machine => stockage en mémoire =>
codage
Informations codée = DONNÉES
.
1902
"hello"
110011010
1101001
10001010
101010110
000101101
100101010
G. Falquet, CUI, Université de Genève 7 de 35
Schéma de codage = structure de données
complet: représenter en mémoire toutes les informations à tr
aiter;
efficace en espace : faible occupation de la mémoire;
efficace en temps : peu d’instructions pour tr
aiter les données
G. Falquet, CUI, Université de Genève 8 de 35
Algorithme
Méthode pour résoudre un problème
en un nombre fini d’étapes
Problème généraux et instances
Pblm génér
al : trouv
er le plus gr
and diviseur commun de deux nombres
Instance : trouv
er le plus gr
and diviseur commun de 36 et 28
On s’intéresse aux algorithmes qui résolv
ent un problème génér
al
== qui résolv
ent n’importe quel instance du problème génér
al.
G. Falquet, CUI, Université de Genève 9 de 35
Thèse de Church
T
out algorithme peut être exécuté par un progr
amme sur un ordinateur
== il n’y a pas de méthode “r
aisonnable” qu’on ne puisse progr
ammer
Conséquence: on peut exprimer un algorithme dans n’importe quel
langage (complet) de progr
ammation d’ordinateur
Remarque
Il y a des problèmes indécidables
== pour lesquels il n’existe pas d’algorithme
G. Falquet, CUI, Université de Genève 10 de 35
Algorithmes et structures de données
F
orte dépendance entre structures de données et progr
ammes
influence sur la simplicité du progr
amme
influence sur l’efficacité du progr
amme
Malheureusement : pas de structure optimale en toute circonstance
"Algorithmes + Structures de données = Progr
ammes" [Wirth]
G. Falquet, CUI, Université de Genève 11 de 35
Langage algorithmique de haut niveau
P
our éviter d’écrire des progr
ammes au niv
eau "machine"
On se donne un langage algorithmique plus abstr
ait
Langage = une syntax
e + une sémantique
Sémantique (opér
ationnelle)
= signification des instructions
= comment les instructions changent l’état de la mémoire
G. Falquet, CUI, Université de Genève 12 de 35
Modèle abstrait de mémoire = ensemble d’objets
objet = ensemble de cellules
contient une
valeur
d’un certain
type
(entier
, réel, chaînes de
car
actères, booléen, etc.)
Etat de la mémoire : ensemble de paires (variable = valeur)
M = { X = "Hello", Y = 95 }
X
Y95
"Hello"
Variables
Désignent un objet de la mémoire.
G. Falquet, CUI, Université de Genève 13 de 35
Programme
= séquence d’instructions de div
erses natures
affectations
conditionnelles
itér
ation
appels de sous-progr
ammes
On utilise un pseudo langage (pseudo Ja
v
a)
G. Falquet, CUI, Université de Genève 14 de 35
Instructions: affectation
Stock
e une v
aleur
, résultat d’un calcul, dans une v
ariable.
/!\
Le contenu précédent est perdu.
variable constante
X 34
variable variable
Y X
variable expression opérateur expression
Z 3 * X
A la place de
on noter
a aussi = ou parfois :=
G. Falquet, CUI, Université de Genève 15 de 35
Exemples
mémoire avant instruction mémoire après
X = 897 X 2 X = 2
X = 2 , Y = 3333 Y X + 8 X = 2 , Y = 10
X = 3 , Y = 11 X X * Y X = 33 , Y = 11
Z = "xsjsjdsw" Z "allo" Z = "allo"
Z = "allo" , Y = 11 X Z + Y indéfini : chaîne de caractè-
res + entier
G. Falquet, CUI, Université de Genève 16 de 35
Sémantique
On dit comment l’exécution d’un instruction modifie la mémoire
nouv
el état mémoire = Interprétation( instruction | état mémoire actuel)
Pour l’affectation
si M = {X = e, v1 = k1, …, vn = kn}
Interprétation(
X
g
| M) = {X=
g
, v1 = k1, …, vn = kn}
G. Falquet, CUI, Université de Genève 17 de 35
Evaluation d’expression
Expressions composées de constantes, v
ariables, opér
ateurs, fonctions
Ev
aluation dans l’ordre habituel: ( ),
fonctions
, ^, *, /, mod, +, –,
,
, <,
>, =,
,
,
Les v
ariables sont remplacées par leur v
aleur
.
Signification des opér
ations dépend du t
ype d’arguments
2.3 + 5.66 addition des réels
6 + 2 addition des entiers
6 / 4 = 1 ou 1.5 ?
"bon"+"jour" concaténation des chaînes
"bonjour"[1..3] extraction de sous-chaîne
G. Falquet, CUI, Université de Genève 18 de 35
Evaluation d’expression - sémantique
ev
al(constante | M) = constante
ev
al(X | {X=e; …}) = e
ev
al(E1 + E2 |
M) = ev
al(E1 |
M) + ev
al(E2 | M)
etc.
ev
al( f(E1, …, Ek) | M ) = f(ev
al(E1 |
M), …, ev
al(Ek | M))
G. Falquet, CUI, Université de Genève 19 de 35
Séquences d’instructions
{ instruction1; instruction2; …}
Sémantique:
Exécuter
instruction1
, puis
instruction2
, et ainsi de suite.
Exemple:
{ X 2; Z X + 1; U X – Z; …}
mémoire avant instruction mémoire après
X = 0, Y = 1, Z = 111 X 2; Z X + 1;
U X – Z X = 2, Z = 3, U = –1
G. Falquet, CUI, Université de Genève 20 de 35
Ordre d’exécution
Attention:
L
’ordre des instructions dans une séquence est important !
{ … }{ X 2; Z 2*X ; X X+1 }
{ X = 3 , Z = 4 }
{ … }{ X 2; X X+1; Z 2*X }
{ X = 3 , Z = 6 }
Sémantique
Interprétation(
i1 ; i2
| M ) = Interprétation(
i2
| Interprétation(
i1
| M ) )
1 / 9 100%