1 Introduction
2 Les types de base
3 Les tableaux
4 Les structure
Algorithme
Quelque exemple
D´eterminer la plus petite valeur entre deux valeurs Calcul du PGCD de deux nombres (Euclide 300 avant J.-C.)
Tri d’un tableau
Chemin dans un graphe Ordonnancement
Compression/D´ecompression Cryptage
Simulation etc
Algorithme
D´efinition
Un algorithme prend en entr´ee des donn´ees et fournit une solution `a un probl`eme
Un algorithme = ensemble d’op´erations `a effectuer
I Op´erations ex´ecut´ees en s´equence
I Op´erations ex´ecut´ees en parall`ele
I Op´erations ex´ecut´ees sur plusieurs processeurs
Mise en œuvre d’un algorithme
I on parle d’impl´ementation (Anglicisme)
I L’´ecrire dans un langage de programmation
Algorithme
Pourquoi en faire ?
Il existe plusieurs m´ethodes pour r´esoudre un probl`eme, qui ne sont pas ´equivalentes
Ecrire un programme sans faire de l’algorithmique´ c’est choisir une m´ethode sans r´efl´echir
Faire de l’algorithmique permet de trouv´e la meilleur m´ethode pour r´esoudre un probl`eme
Algorithme
Comment comparer ?
Tous les algorithmes ne sont pas ´equivalents Le chois de l’algorithme d´epend de
I du probl`eme `a r´esoudre
I de l’architecture mat´eriel utilis´e
Pour diff´erencier les algorithmes on utilise 2 crit`eres
I Temps de calcul : lent v.s. rapides
I M´emoire utilis´ee : peu v.s. beaucoup
On parle de
I complexit´e en temps (vitesse)
I complexit´e en espace (m´emoire utilis´ee)
Structure de Donn´ees
D´efinition
Une structure de donn´ees est une mani`ere d’organiser les donn´ees pour les traiter plus facilement
Diff´erentes type de structures de donn´ees :
I Les structures finies
I Les structures index´ees
I les structures r´ecursives
Choisir la structure de donn´ees, la plus adapt´e `a l’algorithme utilis´e
Structure de Donn´ees
Op´erations sur les donn´ees
Structures finies
Structures de donn´ees dont la taille est fix´ee `a l’avance Types de base
I Caract`ere, valeur num´erique, adresse m´emoire
Types compos´es
I Regroupement dans une structure de types de base
Op´erations :
I Lecture
I Ecriture´
Structure de Donn´ees
Op´erations sur les donn´ees
Structures index´ees et r´ecursives
Collection de structures finies
Tableau, liste chaˆın´ee, dictionnaire, arbre, ...
Op´erations :
I Acc`es
F par index
F par cl´e
I Insertion
I Suppression
I Tri
I Recherche
Structure de Donn´ees
Comment choisir ?
Tous les structures de donn´ees ne sont pas
´
equivalents
Le crit`ere le plus important est le temps d’acc`es au donn´ees
I Lecture/´Ecriture
I Insertion/Suppression
On parle de la complexit´e des fonctions d’acc`es
M´emoire physique
D´efinition
La m´emoire physique est la partie mat´eriel de l’ordinateur qui set `a stocker des
informations
Diff´erentes types de m´emoire physique
I m´emoire de masse
I m´emoire vive
Donn´ees stock´ees accessible par adresse
I La m´emoire est constitu´e d’un ensemble de block unitaire
I Chaque block unitaire `a une adresse qui lui est unique
I L’adressage est continue
M´emoire physique
Plus concr`etement
Mémoire
Bus d’adresses
Dans un ordinateur (Architecture AMD64)
I Block unitaire de donn´ee : 8 bits/1 octet (soit 256 valeurs possible)
I Bus d’adresse : 48 bits (soit 280 To d’adressage)
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
I Vitesse : plusieurs centaine deGo/s
I Temps d’acc`es : dizaine denano-seconde
M´emoire physique
Taille, vitesse et temps d’acc`es
Disque dur
I Taille : plusieursTo
I Vitesse : plusieurs dizaine deMo/s
I Temps d’acc`es : quelques dizaine dems
SSD (Solid-state drive)
I Taille : plusieurs centaine deGo
I Vitesse : plusieursGo/s
I Temps d’acc`es : quelques centaine demicro-seconde
M´emoire vive
I Taille : plusieurs dizaine deGo
I Vitesse : plusieurs dizaine deGo/s
I Temps d’acc`es : quelques dizaine denano-seconde
Cache processeur (L1, L2 et L3)
I Taille : plusieursMo
M´emoire physique
Plus concr`etement
Adresses Données
... ...
0xFF01020305 0xAA 0xFF01020306 0x02 0xFF01020307 0x52 0xFF01020308 0xBF 0xFF01020309 0x80 0xFF0102030A 0xA5 0xFF0102030B 0x6E 0xFF0102030C 0x4C 0xFF0102030D 0x88 0xFF0102030E 0xB2 0xFF0102030F 0xF3 0xFF01020310 0x8C 0xFF01020311 0xB4 0xFF01020312 0x58
... ...
M´emoire continue
I Adresse + 1 : existe
I Adresse - 1 : existe
Langage C
Histoire
invent´e en 1972 dans les Laboratoire Dell plusieurs Normalisation depuis 1983
I C89 (ANSI C) en 1989
I ...
I C11 en 2011
Langage C
Caract´eristiques g´en´erales
Langage de programmation imp´eratif Qualifi´e de langage de bas niveau Compil´ee
Typ´e
Passage d’argument par recopie en pile
Segment de donn´ees
Architecture
initialized data data uninitialized data
bss heap stack
M´emoire programme divis´e en 3 r´egions Segment de donn´ees
I Text + Data (globales et statiques initialis´ees)
I BSS (globales et statiques non initialis´ees)
I Tas binaire (Allocation dynamique)
Pile d’ex´ecution Segment de code
Les nombres entiers
Les diff´erents types
Type Taille (Octets) Plage de valeurs
char 1 -128 `a 127
unsigned char 1 0 `a 255
short 2 -32 768 `a 32 767
unsigned short 2 0 `a 65 535
int 4 -2 147 483 648 `a 2 147 483 647
unsigned int 4 0 `a 4 294 967 295
long 8 -9 223 372 036 854 775 808 `a
9 223 372 036 854 775 807 unsigned long 8 0 `a 18 446 744 073 709 551 616
Les nombres entiers
La repr´esentation m´emoire
Les nombres entiers non sign´es unsigned short i;
I Valeur min = 0
I Valeur max = 216−1 = 65535
2´emeoctets 1´er octets
215 214 213 212 211 210 29 28 27 26 25 24 23 22 21 20
Les nombres entiers sign´es short i;
I Valeur min = −215 = -32 768
I Valeur max = 215−1 = 32 767
Les nombres flottants
Les diff´erents types
Attention : ne pas confondre nombres r´eels et nombres flottants !
Type Taille (Octets) Plage de valeurs float 4 3.4×10−38 `a 3.4×1038 double 8 1.7×10−308 `a 1.7×10308 long double 10 3.4×10−4932 `a 3.4×104932
Les nombres flottants
La repr´esentation m´emoire
La norme IEEE 754 cr´ee en 1985
Les nombres sont d´ecompos´e en 3 composantes
I Le signe (S)
I L’exposant (E)
I la Mantisse (M)
Type Signe Exposant Mantisse Valeur
float 1 bit 8 bits 23 bits (−1)S ×M ×2(E−127) double 1 bit 11 bits 52 bits (−1)S ×M ×2(E−1023)
Les nombres flottants
Les caract´eristiques
flottant 6= r´eel
I float pi = π; /* impossible */
Deux exceptions
I NaN (not a number)
I Inf (infini)
Les caract`eres
Encodage
Le codage des caract`eres est une convention qui permet,
`
a travers un codage connu de tous, de transmettre de l’information textuelle, l`a o`u aucun support ne permet l’´ecriture scripturale.
un caract`ere est cod´e sur un ou plusieurs octets
Les caract`eres
ASCII et ASCII ´etendu
ASCII pour American Standard Code for Information Interchange cr´ee en 1960 deux versions :
I normal (7 bits)
I ´etendu (8 bits)
Les caract`eres
UTF-8
Codage le plus utilis´e sur internet Codage `a nombre d’octet variable
Les types ´enum´ er´es
type avec un nombre de valeur d´etermin´e `a l’avance
Les pointeurs
c’est quoi ?
Les pointeurs c’est simple ! Variable qui contient l’adresse
Les pointeurs
D´eclaration
Deux types de pointeur
I Non typ´e
I typ´e
Les pointeurs
Utilisation
Les tableaux
c’est quoi ?
Ensemble de variable du mˆeme type rang´e successivement en m´emoire
Acc`es au ´el´ement par l’adresse en m´emoire du premi`ere ´el´ement du tableau
Les tableaux
Utilisation
Les structure
c’est quoi ?
Ensemble de variable d´efinit `a l’avance de type diff´erant rang´e en m´emoire
Les structure
Utilisation