arbre binaire de recherche

publicité
Révisions
1
Tableaux non contraints
Déclaration du type :
type Tvecteur = tableau ( intervalle d’entiers) de entiers
type Tvecteur is array (integer range <>) of integer;
Le vecteur doit être contraint avant toute utilisation donc lors de la
déclaration des variables du programme principal:
vect : Tvecteur ( 1 .. 8);
mais grande utilité des tableaux non contraints lors du passage de paramètres
dans les procédures ou les fonctions
2
Tableaux non contraints
Chercher une valeur dans un tableau se traduit par une procédure dont les instructions
restent les mêmes que le tableau contienne 10, 20 ou 1000 valeurs.
Ce qui sera modifié, sera le nombre d’itérations, suivant la position de cette valeur
cherchée dans le tableau.
Type Telement is private;
type Tvecteur is array (integer range <>) of Telement;
3
Tableaux non contraints
procedure RECHERCHE ( {D}vect : Tvecteur; {D} element_cherche : Telement;
{R} position : entier ; {R} trouve : booléen)
pré-requis : aucun
action : S’il existe la valeur element_cherche, dans le tableau vect, alors met trouve à vrai
et position prend la valeur du premier indice où element_cherche est rangé, sinon met
trouve à faux et position reste indéterminé
stratégie : parcours partiel de vect
4
Tableaux non contraints
procedure RECHERCHE ( {D}vect : Tvecteur; {D} element_cherche : Telement ;
{R} position : entier ; {R} trouve : booléen)
I : entier
début
I  premier indice de vect
tant que I <= dernier indice de vect et alors non ( vect(I) = element_cherche)
faire I  I + 1
fin tant que
 I <= dernier indice de vect
position  I
trouve
fin RECHERCHE;
5
Tableaux non contraints
procedure RECHERCHE ( {D}vect : Tvecteur; {D} element_cherche : caractere ;
{R} position : entier ; {R} trouve : booléen)
I : entier
début
I  premier indice de vect
tant que I <= dernier indice de vect et alors non (vect(I) = element_cherche )
faire I  I + 1
fin tant que
 I <= dernier indice de vect
position  I
trouve
Parcours partiel
fin RECHERCHE;
6
Procédure ou fonction générique
procedure ECHANGE_ENTIER( {D/R} a, b : entier)
pré-requis : aucun
action : permute les deux valeurs entières
contenues dans a et b
variable : temp : entier
procedure ECHANGE_REEL( {D/R} a, b : réel)
pré-requis : aucun
action : permute les deux valeurs réelles
contenues dans a et b
variable : temp : réel
début
temp
a
b
fin
début
temp
a
b
fin
 a
 b
 temp
 a
 b
 temp
7
Procédure ou fonction générique
La généricité permet d’écrire une procédure modèle à partir de
laquelle des procédures spécifiques pour chaque type pourront être
créées et utilisées.
Dans le cas des exemples précédents, seul le type diffère : le type va
constituer un paramètre générique
8
Procédure ou fonction générique
paramètres de généricité
type TElement is private
procedure ECHANGE_TOUT( {D/R} a, b : TElement)
pré-requis : aucun
action : permute les deux valeurs de même type TType contenues dans a et b
variable : temp : TElement
début
temp
a
b
fin
 a
 b
 temp
9
Procédure ou fonction générique
Grâce à la procédure générique, il est maintenant possible de créer, en les
spécialisant par un type précis, de nouvelles procédures. Cette opération
s’appelle instanciation des procédures
procedure ECHANGE_CARACTERES is new ECHANGE_TOUT(character);
procedure ECHANGE_ENTIER is new ECHANGE_TOUT(integer);
procedure ECHANGE_REELS is new ECHANGE_TOUT(float);
Il peut y avoir plusieurs instances d’un même moule.
10
Procédure ou fonction générique
Objet générique
Moule non utilisable directement
procedure
function
Instanciation
avec paramètres effectifs
Objet utilisable
Objet utilisable
with …..;
appelé dans une autre procédure
ou fonction avec la clause with
pas de use
11
Encapsulation
La plupart des méthodes préconisées pour la production de logiciels de qualité
reposent sur la décomposition du logiciel en modules ou composants
.
On appelle composant une collection d’entités et de ressources logicielles
« encapsulées »
12
Encapsulation
Composant
Exemple de la vie quotidienne
montre
identificateur
Déclaration des
fonctionnalités mises à la
disposition d’un
utilisateur
Définition des
fonctionnalités
interface
Donne l’heure
Réalisation ou
implémentation
Construction interne
de la montre
13
Encapsulation
PDate
identificateur
type Tdate est privé
procedure lire (D:Tdate);
Déclarations
procedure lire (D:Tdate) is
begin
Définitions
……
end;
14
Paquetages génériques
generic
paramètres de généricité
identificateur
interface
Déclaration des
fonctionnalités mises à la
disposition d’un
utilisateur
Définition des
fonctionnalités
réalisation ou
implémentation
15
Paquetages génériques
LIST_GEN
Instance avec :
Instance avec :
type caractère
type entier
procedure put
procedure ecrit
Même programme
16
package Pliste_Generique
package PDate
package PMot
package PProduit
package PEnsemble_Produits
17
Fonctionnalités qui permettent de traiter les données
TProduit
- Nom : TMot
- code : entier
- Date_péremption : TDate
- PrixHT : réel
+ procedure saisie ( p : out TProduit) ;
+ procedure affiche ( p : in TProduit) ;
+ function produitAlimentaire ( p : in TProduit) return boolean;
+ function lePrixTTC (p : in TProduit) return float;
+ function produitPerime ( p : in TProduit; dat : TDate) return
boolean;
18
TDate
- jour : entier
- mois : entier
- an : entier
+ procedure creDate ( D: out TDate; j : in integer; m : in
integer; a :
in integer)
+ function precede (D1, D2 : in TDate) return boolean
19
package PlistGen
Instance pour la définition du
type TMot
package PMot
20
Types abstraits
Un type de données abstrait est représenté par un composant logiciel
dont l’interface est le suivant :
 identificateur du type de données abstrait
 ensemble de base
 opérations définies sur tout objet de ce type
• Opération de construction ou destruction
• Opérations de modification
• Opérations de consultation
 itérateurs, dans le cas où l ’objet est une collection d ’éléments
 exceptions
 constantes éventuelles
21
Type abstrait Pile
identificateur du type de données abstrait  Tpile
ensemble de base

valeurs de type Telement
22
Type abstrait Pile
Opérations de construction:
•
CRÉER

TPile
crée une pile vide
Opérations de modification
•
EMPILE( TPile, TElement)
•
DEPILE (TPile)


TPile
ajoute un élément à la pile
TPile
retire un élément de la pile
Opérations de consultation
•
VALEUR_SOMMET (TPile) 
•
VIDE (TPile)

booléen
TElement donne accès au dernier élément
rangé dans la pile, en le laissant
dans la pile
permet de savoir si une pile est vide ou non
23
Déclaration de l’unité pile
Quelle que soit l’implémentation, l’interface de l’unité de programmation sera la
même, à savoir déclaration des procédures et fonctions suivantes :
Soit un type TPile privé
procedure CRÉER ( {R} P : TPile )
-- pré-requis : aucun
-- action : crée une pile vide P
procedure EMPILE ( {D/R} P : TPile ; {D} e : TElement )
-- pré-requis : aucun
-- action : ajoute l’élément e à la pile P
(l’ajout se fait au sommet de la pile)
procedure DEPILE ( {D/R} P : TPile )
-- pré-requis : aucun
-- action : retire s’il existe, l’élément du sommet de la pile P
24
Déclaration de l’unité pile
fonction VALEUR_SOMMET ( {D} P : TPile ) retourne un Telement
-- pré-requis : la pile n’est pas vide
-- résultat : renvoie la valeur qui est au sommet de la pile P
fonction VIDE ( {D} P : TPile ) retourne un booleen
-- pré-requis : aucun
-- résultat : retourne vrai si la pile P est vide, faux sinon
fonction HAUTEUR ({D} P : TPile ) retourne un entier
-- pré-requis : aucun
-- résultat : renvoie le nombre de valeurs rangées dans la pile P
La réalisation verra la définition des corps de ces sous programmes
25
Récursivité
Fonction Fib ( {D} n : entier) retourne 1 entier
•
Résultat : calcule la nième valeur de la suite
•
Pré requis : Les calculs qui suivent seront toujours faits avec n positif ou nul
•
Stratégie : calcul récursif
26
récursivité
début
si n <= 1
alors retourne 1
sinon retourne Fib (n -1) + Fib (n - 2)
fin si
fin
27
Récursivité et liste simplement chaînée
On appelle décomposition canonique d ’une liste L non vide, sa
décomposition en deux éléments :
 sa tête

L(tête)
 son reste

L(reste)
28
Récursivité et liste simplement chaînée
Toute fonction ou procédure définie sur une liste L :
•
peut si L n’est pas vide,
– traiter l’élément de tête
– s’appeler récursivement sur L(reste) qui est de taille strictement
inférieure à celle de L
•
nécessite un traitement particulier, si L est vide
29
Récursivité et liste simplement chaînée
liste vide
tete
ou bien
liste composée
tete
reste
30
Notion d’arbre
•
Un arbre est une structure à deux dimensions comportant un
ensemble fini d’éléments, appelés nœuds.
•
Les nœuds sont associés entre eux suivant un ordre hiérarchique
strict.
•
Il existe au plus, un seul chemin entre deux nœuds.
•
Un arbre binaire est un arbre dont chaque nœud possède au plus
deux fils
31
Un arbre binaire est :
soit vide,
soit constitué d’un nœud racine possédant un sous arbre binaire gauche et un sous
arbre binaire droit
racine
sous arbre gauche
sous arbre droit
32
Parcours dans un arbre binaire : itérateurs
Parcourir un arbre consiste à visiter les différents noeuds de l’arbre une
fois et une seule dans un certain ordre.
Les trois ordres de parcours habituels dans un arbre binaire sont :
•
le préordre ou parcours préfixé
•
le postordre ou parcours postfixé
•
le symétrique ou parcours infixé
33
Parcours dans un arbre binaire : préordre
si l’arbre n’est pas vide
alors traiter la racine de l’arbre
effectuer le parcours préfixé de son sous arbre gauche
effectuer le parcours préfixé de son sous arbre droit
fin si
34
Arbre binaire de recherche
Un arbre binaire de recherche est un arbre binaire tel que pour tout
nœud, la valeur de ce nœud est supérieure aux valeurs de ses
descendants de gauche, et inférieure à celles de ses descendants de
droite.
On ne peut parler d’arbre binaire de recherche que si une relation
d’ordre sur les valeurs contenues dans l’arbre, est définie et utilisable
On suppose que toutes les valeurs rangées dans les arbres binaires de
recherche, sont différentes
35
Arbre binaire de recherche
Pour ajouter une valeur dans un arbre binaire de recherche, deux méthodes :
– adjonction de la valeur dans une feuille de l’arbre
– adjonction de la valeur à la racine de l’arbre
36
Arbre binaire de recherche : exemple
34
20
8
50
26
23
95
47
31
84
37
Arbre binaire de recherche
38
Arbre binaire de recherche
procedure INSERE_VALEUR ( RAC : in out TArbreBinaire; X : in TElement)
Pré requis : RAC repère un arbre binaire de recherche
Action:
insère la valeur X dans l’arbre binaire de recherche repéré par RAC, en
conservant les propriétés de cet arbre binaire de recherche
39
Arbre binaire de recherche
procedure INSERE_VALEUR ( RAC : in out TArbreBinaire; X : in TElement) is
begin
if RAC = null
then RAC := new TCelluleAB' (X, null, null);
else if plusPetit (X, RAC.val)
then INSERE_VALEUR( RAC.suivG, X);
else INSERE_VALEUR( RAC.suivD, X);
end if ;
end if;
end INSERE_VALEUR;
40
Téléchargement