Liene 2MASS - Algorithmique etInformatiqueThéorique
Sébastien Verel
vereli3s.unie.fr
www.i3s.unie.fr/
∼
verelÉquipeSoBi-UniversitédeNieSophia-Antipolis
14 février2008
TDAliste
TDApileetle
Objetifs de la séane 4
onnaitre letype de donnéesabstrait liste
onnaitre letype de donnéesabstrait pileet le
ériredes algorithmesréursifs baséssur leTDA liste,en
partiulierlealul de lalongueur, l'extrationde sous-liste,la
onaténation de listes,l'ajoutet lasupressiond'éléments,
l'utilisationd'aumulateur
Question prinipaledujour :
Comment traiterlesinformationsles unes après lesautres?
TDAliste
TDApileetle
Exemples de données
Liste de tahesàeetuer:
suitenie de tahesàeetuer dansl'ordre
basede données lients:
ensemble de n-uplet (nom, ville,ahat, date,valeur)
ungenome :suessionde basesATCG
...
TDAliste
TDApileetle
Dénitions
Une Donnée
informationélémentaire de départ
Des Données
ensemble d'informationsélémentairesde départ
Traiterl'informationonsiste à:
passer d'informations,appeléesdonnées,
àd'autres informations,appeléesrésultats.
Comment aéder(lire, et)à esdonnées?
Typesde Données Abstraits(TDA)
Desriptiondes opérations surles données(et non diretementdes
TDAliste
TDApileetle
Dénitions
Struture de données
struture logiquedestinée àontenirdes données
Typesde Données Abstraits(TDA)
Desriptiondes opérations surles données(et non diretementdes
struturesde données elle-même)
Une struturede donnéesimplémente unTDA.
TDAliste
TDApileetle
Opérations sur TDA
Opérations élémentairesd'un TDA:
réation de donnéesde base
ériturede données
leture de données
Il peut y avoird'autresopérations élémentairesbiensùr
TDAliste
TDApileetle
Classiation
Il existe desTDAdontles donnéeslogiquement sontstruturéesde
manière :
linéaire/ nonlinéaire
indexée/ nonindexée
ordonnées /non ordonées
TDAliste
TDApileetle
Exemple
Listedetâhes
Aheter deseurs
Réserverunrestaurant
Erire unelettre
Aheter unebague
Dormir
Répondre àsa mère
Regarder lemagasine de voyage
Donner àmangeraux hats
Prendrel'appareilphoto
Finirle livre
Ranger lahambre
Passer hezleoieur
TDAliste
TDApileetle
Comment traiter es données?
Faire les tâheslesunes après les autres:
pas toutesen même temps...
→
TraitementséquentielLaquelle?
pas de préfèrene (ouprioritéf TP)
→
LirelapremièretâheConstruirelaliste de tâhes:
pouvoir ajouter unenouvelle tâhe àuneliste de tâhes,où?
→
pas de préférene :en têtede lalisteRetirerune tâhe déjàeetuée:
pourdiminuerle nombrede tâhesà faire,laquelle?
→
ellequivientd'êtrelueSavoirs'ilreste unetâhe àeetuer
TDAliste
TDApileetle
Algorithme informel de traitement de tâhes
Algorithme traitement(l :listede tahes) :rien
début
sil est videalors
ne rienfaire
sinon
exéuter lapremièretâhe de l
traitementdureste dela listel
nsi
n
Remarques:
algorithmeréursif?
terminaison silaliste estde taillenie
TDAliste
TDApileetle
Plan
1
Introdution
2
TDAliste
Dénition
Algorithmes surlistes
3
TDApile etle
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Dénition
Liste
Suite nie de données(appeléeaussiéléments) où ilest seulement
possible d'ajouteret de lireune donnée en têtede lasuite.
Tete Queue
...
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Représentation et notation
Exemple de lalistede tâhes:notation vertiale
notation ourante deslistes(informatique) de gauheà droite.
Une listede nombres entiers:
(
12,
34,
3,
45,
7,
90)
Une listede mots :
( ′or′ , ′
eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
12 et
′
or
′
sonten tête de liste
(
34,
3,
45,
7,
90)
et( ′eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
sontles queues
deslistes
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Primitives
5 fontions primitives sontnéessairespourdénir leTDAliste:
listeVide: rien
→
listeretourne lalistevide
listeCons :typeElement
×
liste→
listeajouteun élémentde type typeElement en tête de laliste
listeTete :liste
→
typeElement retourne l'élémenten tête de lalistelisteQueue :liste
→
listeretourne laqueue de laliste
listeEstVide?:liste
→
boolenretourne lavaleur Vrai ssilaliste est vide
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Exemple de listes
listeVide()retourne lalistevide :
On note
()
laliste videlisteEstVide?(
()
):Vrai
listeEstVide?(
(
34,
3,
45,
7,
90)
):Faux
listeEstVide?(listeVide()) :
Vrai
listeCons(12,
(
34,
3,
45,
7,
90)
):(
12,
34,
3,
45,
7,
90)
listeCons(
′
or
′
,
( ′eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
) :
( ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ ′ )
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Exemples
listeTete(
(
12,
34,
3,
45,
7,
90)
)12
listeTete(
( ′or′ , ′
eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
)
′
or
′
listeQueue(
(
12,
34,
3,
45,
7,
90)
)(
34,
3,
45,
7,
90)
listeQueue(
( ′or′ , ′
eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
)
( ′eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Exemples de onstrution de listes
listeCons(7,listeVide()) :
(
7)
listeCons(34,listeCons(3 ,listeCons(45,listeCons(7,
listeCons(90, listeVide()))))) :
(
34,
3,
45,
7,
90)
( ′temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
:
listeCons(
′
temps
′
,listeCons(
′
patiente
′
, listeCons(
′
bleus
′
,
listeCons(
′
diamant
′
,listeVide()))))
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Quand utiliser un TDA liste?
A-t-on besoin d'un traitementséquentieldesdonnées?
Le nombrede donnéesest-ildéterminéàl'avane?
Le nombremaximalde donnéesest-ildéterminéàl'avane?
Les donnéesont-elles besoind'êtreindexées(numérotées)?
A-t-on besoin d'aéder àunedonnée dontl'indexedoit être
déterminé?
A-t-on besoin d'aéder àlapremièredonnée?
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Algorithme réursif sur liste
Traitementdetâhes
Algorithme traitement(l :listede tahes) :rien
début
sil est videalors
ne rienfaire
sinon
exéuter lapremièretâhe de l
traitementdureste dela listel
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Traitement de tâhes
Mahineabstraite
Notre mahineabstraiteest trèsintelligente, puisqu'elleest apable
de :
exéuter( mot ):exéute l'ordrequiest exprimé parmot
exéuter(
′
ndetahe
′
) :lamahinestoppe
Nous espérons que touslesordressontomprisparette mahine
abstraite...
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Algorithme réursif sur liste
Traitementdetâhes
Algorithme traitement(l :liste):rien
début
silisteEstVide?(l)alors
exéuter(
′
ndetahe
′
)
sinon
exéuter( listeTete(l ))
traitement(listeQueue(l ) )
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Algorithme réursif sur liste
Algorithme traitement(l :liste): type
début
silisteEstVide?(l)alors
....
sinon
....
traitement(...listeQueue(l ) ...)
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Calul de la longueur d'une liste
longueur(
(
34,
7,
42,
121)
)4
Algorithme longueur(l :liste): :entier
début
silisteEstVide?(l)alors
retourner 0
sinon
retourner 1+longueur( listeQueue(l ))
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Somme des éléments
somme(
(
34,
7,
42,
121)
)204
Algorithme somme(l :liste d'entier) :entier
début
silisteEstVide?(l)alors
retourner 0
sinon
retourner listeTete(l)+somme(listeQueue(l ) )
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Conaténation des mots d'une liste
onatMots(
( ′or′ , ′
eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
)
oreurtempspatientebleusdiamant
′
Algorithme onatMots(l :liste de mot):mot
début
silisteEstVide?(l)alors
retourner
′′
sinon
retourner listeTete(l).onatMots(listeQueue(l ) )
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Extration de sous-liste
Extrairelasous-listedesmotsommençantpare,d ouf
extratMot(
( ′or′ , ′
eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
)
( ′eur′ , ′
diamant′ )
lettre( m,i ) :retournelalettrenuméro i dumotm
Algorithme extratMot(l :listedemot):listedemot
début
silisteEstVide?(l)alors
retourner listeVide()
sinon
silettre(listeTete(l),0)=
′
e
′
OUlettre(listeTete(l),0)=
′
d
′
OU
lettre(listeTete(l),0)=
′
f
′
alors
retournerlisteCons(listeTete(l),extratMot(listeQueue(l )))
sinon
retournerextratMot(listeQueue(l ))
nsi
nsi
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Conaténation de listes
onat(
(
23,
89)
,(
34,
7,
42,
121)
)(
23,
89,
34,
7,
42,
121)
Algorithme onat(l
1 ,l
2
:liste):liste
début
silisteEstVide?(l
1 ) alors
retourner l
2
sinon
retourner listeCons(listeTete(l
1
),onat(listeQueue(l
1 ),l
2
))
nsi
n
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Ajout d'un élément
ajout( 2,23,
(
34,
7,
42,
121)
)(
34,
7,
23,
42,
121)
ajout( 0,23,
(
34,
7,
42,
121)
)(
23,
34,
7,
42,
121)
Algorithme ajout(p: entier,elem:entier,l :liste):liste
début
si listeEstVide?(l)alors
retourner listeCons(elem ,l)
sinon
sip
=
0alorsretourner listeCons(elem ,l)
sinon
retourner listeCons(listeTete(l),ajout(p
−
1,elem ,listeQueue(l )))nsi
TDAliste
TDApileetle
Dénition
Algorithmessurlistes
Supression d'un élément
suppression( 2,
(
34,
7,
23,
42,
121)
)(
34,
7,
42,
121)
suppression( 0,
(
23,
34,
7,
42,
121)
)(
34,
7,
42,
121)
Algorithme suppression(p :entier,l :liste):liste
début
silisteEstVide?(l)alors
retournerl
sinon
sip
=
0alorsretournerlisteQueue(l)
sinon
retournerlisteCons(listeTete(l),suppression(p
−
1,listeQueue(l ))) nsinsi
TDAliste
TDApileetle
Exemples de piles
Pile:ensemble d'objetsen pile...
Pilede feuilles
Piled'assiettes
Pilede vétements
pile d'instrutions
Avantage :
Les objets lesplus fréquemmentdemandés sontsituésprohedu
sommet
TDAliste
TDApileetle
Exemples de le
File :ensemble d'objetsen le...
File d'attenteà laboulangerie
File d'attentetéléphonique
File d'attentede toute sorte
Avantage :
Le premier entréest lepremier sorti...
TDAliste
TDApileetle
Représentations
Pile:
23
47
24
41
File :
( ′a′ , ′
f′ , ′
h′ , ′
g′ )
23 est lesommet de lapile
′ ′
TDAliste
TDApileetle
Primitives du TDA pile
pileVide :rien
→
pileretourne lapile vide
empiler :typeElement
×
pile→
pileajouteun élémentde type typeElement au sommet de lapile
sommet :pile
→
typeElementretourne l'élémentau sommet de lapile
dépiler :pile
→
pileretourne lapile sanslesommet
pileEstVide?:pile
→
booleenretourne lavaleur Vrai ssilapile est vide
TDAliste
TDApileetle
Primitives du TDA le
leVide:rien
→
leretourne lalevide
enler :typeElement
×
le→
leajouteun élémentde type typeElement en queue de lale
leTete :le
→
typeElement retourne l'élémenten tête de laledéler :le
→
leretourne lalesanslatête
leEstVide?:le
→
booleenretourne lavaleur Vrai ssilaleest vide
TDAliste
TDApileetle
Généralisation
Laledérite ii estappeléeleFIFO:FirstIn FirstOut
Lapile peut êtreappeléepar"le" FILO:FirstInLastOut
leLIFO :LastInFirstOut
leLILO :LastInLastOut
Remarque :
Le TDA pileest équivalent auTDAliste
TDAliste
TDApileetle
Reherhe d'un élément dans une pile
orir(
′
eur
′
,
( ′or′ , ′
eur′ , ′
temps′ , ′
patiente′ , ′
bleus′ , ′
diamant′ )
)
Vrai
Algorithme orir(x :mot,p :pile de mot) : :booléen
début
sipileEstVide?(p)alors
retourner Faux
sinon
si sommet(p) =x alors
retourner Vrai
sinon
retourner orir(x,dépiler(p))
nsi
nsi
TDAliste
TDApileetle
Objetifs de la séane 4
onnaitre letype de donnéesabstrait liste
onnaitre letype de donnéesabstrait pileet le
ériredes algorithmesréursifs baséssur leTDA liste,en
partiulierlealul de lalongueur, l'extrationde sous-liste,la
onaténation de listes,l'ajoutet lasupressiond'éléments,
l'utilisationd'aumulateur
Questions prinipales dujour :
Comment traiterlesinformationsles unes après lesautres?
Comment réussirun14 février?