Upload
abenhari
View
214
Download
0
Embed Size (px)
Citation preview
7/31/2019 L'Algorithmique
1/120
ABDELKADER BENHARIABDELKADER BENHARIABDELKADER BENHARIABDELKADER BENHARI
LALGORITHMIQUELALGORITHMIQUELALGORITHMIQUELALGORITHMIQUE
The algorithm is the set of rules and techniques that are involved in the definition and design of algorithms,that is to say, systematic process of problem solving to describe the steps to the result. In other words, an
algorithm is a finite and unambiguous instructions to give the answer to a problem.
If the instructions of an algorithm executed one after the other, the algorithm is called sequential if they run
at the same time, it is parallel. If the algorithm operates tasks running on a processor network is calleddistributed algorithm, or distributed.
The word "algorithm" comes from the name of the mathematician Al Khawarizmi (Latinized Algoritmi in the
Middle Ages), which, in the ninth century wrote the first systematic work on the solution of linear andquadratic equations.
7/31/2019 L'Algorithmique
2/120
A.BENHARI 2
Table des matires
INTRODUCTION A LALGORITHMIQUE........................................................................................................ 4
- Analyse- Algorithme-
Squelette dun algorithme- Elment de base- Schmas algorithmique
APPLICATION............................................................................................................................................... 13
DEFINITION DES VARIABLES ....................................................................................................................... 14
- Variable destine au calcul- Variable non destine au calcul
ENTREE DE DONNEES DANS LA MACHINE................................................................................................ 15
AFFICHAGE DE RESULTATS ......................................................................................................................... 15
CALCULS........................................................................................................................................................ 15
CONDITIONS................................................................................................................................................. 15
LES STRUCTURES REPETITIVES ................................................................................................................... 16
LES PROCEDURES ET LES FONCTIONS (SOUS-PROGRAMME).................................................................. 19
- Procdure- Fonction
LES CHAINES DE CARACTERES .................................................................................................................... 22
- Dfinition- Concatnation- Conversions- Longueur dune chane- Sous chane dune chane
NOTION DE TABLEAU (OU TABLE OU VECTEUR OU MATRICEARRAY)............................................. 24
- Dfinition- Dclaration du tableau- Mise ltat initial- Recherche de donne dans un tableau
LES METHODES DE TRI USUELLES .............................................................................................................. 28
-
Tri par insertion- Tri par slection- Le tri bulle- Le tri de shell- Tri de shell-Metzner- Tri par vecteur dindice- Tri par monotonie
LA RECURSIVITE........................................................................................................................................... 35
- Dfinition- Principe
LES FICHIERS................................................................................................................................................. 37
- Dfinition
7/31/2019 L'Algorithmique
3/120
A.BENHARI 3
- du fichier- Notion denregistrement- Dclaration des fichiers en algorithme- Instruction de manipulation des fichiers- Application sur les fichiers squentiels- Les fichiers accs direct- Les fichiers texte
ALGORITHMES ET STRUCTURE DE DONNEES ........................................................................................... 44
- Les structures arborescentes- Graphes- Problme de la recherche- Problme du tri- Quicksort- Heapsort
ALGORITHMES NUMERIQUES .................................................................................................................... 58
-
Gnralits- Systmes linaires Ax=b : mthodes directes- Factorisation A=LU- Factorisation PA=LU- Factorisation A=BBt: Cholesky- Factorisation A=LDLt: Crout
SYSTEMES LINEAIRES AX=B : METHODES ITERATIVES ............................................................................. 73
- Principe- Mthode Jacobi- Mthode Gauss-Seidel- Mthode de relaxation- Mthodes du gradient
PROBLEMES AU MOINDRES CARRES (LINEAIRE)...................................................................................... 79
- Rgression linaire- Mthode des quations normales
RESOLUTION DES EQUATIONS NON LINEAIRES ....................................................................................... 81
- Mthode de dichotomie- Gnralits- Valeurs propres et vecteurs propres
APPROXIMATION POLYNOMIALE & INTEGRATION NUMERIQUE.......................................................... 85
- Approximations polynomialesQUATIONS DIFFERENTIELLES.................................................................................................................... 89
- Gnralits- Mthode de rsolution numrique- Mthode de Euler- Mthode du dveloppement de Taylor- Mthode de Runge - Kutta
EXERCICES CORRIGES .................................................................................................................................. 92
BIBLIOGRAPHIE......................................................................................................................................... 120
7/31/2019 L'Algorithmique
4/120
A.BENHARI 4
LALGORITHMIQUELALGORITHMIQUELALGORITHMIQUELALGORITHMIQUE
I.INTRODUCTION A LALGORITHMIQUE
Quest ce quun algorithme ?"Une suite finie de rgles appliquer dans un ordre dtermin un nombre fini de donnespour arriver, en un nombre fini d'tapes, un certain rsultat, et cela indpendamment desdonnes".Encyclopaedia universalis
I.1. Analyse
DfinitionLa dcomposition dun problme en sous problmes, ensuite des sous problmes en sousproblmes, on arrive ainsi des problmes non dcomposables, ou des tches lmentaires.Ces tches lmentaires ordonnes forment la succession des tapes qui permettent partirdune situation initiale daboutir une situation finale qui reprsente la solution du problmede dpart. Une premire solution peut tre rdige dans un langage non formel (en franaispar exemple), ensuite traduite dans un langage formel (algorithme), partir duquel il est
possible dcrire un programme dans un langage de programmation et de lexcuter sur unemachine.
Dmarche de dcompositionNous allons dtailler un exemple qui montre la dmarche de dcomposition et commentarriver rsoudre un problme sans faire autre chose que de lexprimer par des problmesplus petits.Le problme initial : un individu se trouve devant une voiture et doit la faire dmarrer.
Entrer dans la voiture
Dmarrer la voitureOuvrir la portireMonterFermer la portire
Faire fonctionner la voitureDmarrer la voiture
Mettre la cl dans le contactFaire un quart de tour, les voyants doivent sactiver
Continuer tourner la cl jusqu ce que la voiture mette un bruit indiquantltat de marche normal
7/31/2019 L'Algorithmique
5/120
A.BENHARI 5
Appuyer sur la pdale dembrayageEnclencher la premire vitesseDsactiver le frein mainActionner doucement le dmarreur et relcher progressivement lembrayage.
La solution finale est exprime par les tches se trouvant en bas du schma. Cette successionde tches sappelle un algorithme mais il est ici exprim dans un langage non formel.La situation initiale : individu, et voiture ouverte (non verrouille).La situation finale : individu dans la voiture et voiture en tat de marche.
Lalgorithme a besoin de certains renseignements externes pour pouvoir fonctionnercorrectement (voyants, bruit que fait la voitureetc.)La solution est donne dans le cas o il ny a aucun problme, supposons maintenant que lavoiture ne veut pas dmarrer o quune fois dmarre, le conducteur cale ! Que faire ? Il estclair que notre algorithme ne rpond plus la question, et quil faut lamliorer pour quil
marche dans toutes les situations possibles.Nous allons rcrire notre algorithme.Entrer dans la voitureDmarrer la voiture
Ouvrir la portireMonterFermer la portire
Faire fonctionner la voitureDmarrer la voiture
Si le conducteur a la cl alorsTant que la voiture nest pas en tat de fonctionnement normal il fautDbut
Mettre la cl dans le contactFaire un quart de tour, les voyants doivent sactiverContinuer tourner la cl jusqu ce que la voiture mette unbruit indiquant ltat de marche normalSi la voiture ne dmarre pas alorsRetourner la cl dans le sens contraire
Reprendre : Mettre cl dans contactFinAppuyer sur la pdale dembrayageEnclencher la premire vitesseDsactiver le frein mainActionner doucement le dmarreur et relcher progressivementlembrayage.Si la voiture cale alors
Retourner la cl dans le sens contraireReprendre : Mettre cl dans contact
Fin si
Sinon Retourner chercher la cl.
7/31/2019 L'Algorithmique
6/120
A.BENHARI 6
Reprendre : Mettre cl dans contactFin si.
Ce nouvel algorithme permet de refaire certaines actions si elles ne fonctionnent pascorrectement.
I.2. Algorithme
DfinitionUn algorithme est rdig dans un pseudo-langage et destin une machine abstraite(virtuelle). Il permet de dcrire formellement toutes les tapes ncessaires qui partir dunesituation initiale, permettent daboutir une situation finale. Cette dernire constitue lasolution qui rsout un problme donn.Le langage algorithmique est prcis, et suit des rgles qui seront dcrites tout au long de cedocument.
Dmarche : Problme, analyse, algorithmePour illustrer la dmarche qui permet dcrire un algorithme nous allons traiter des exemplesconcrets1er exemple : Somme de deux entiersSoit le problme formul dans les termes suivants : crire un algorithme qui calcule la sommede deux entiers, et affiche le rsultat lcran.Le problme ici est simple, il sagit de calculer la somme de 2 entiers. Le problme ne prcisepas o trouver les deux entiers, il est alors possible de supposer que les deux entiers serontdonns par lutilisateur, ce dernier dialogue avec la machine par lintermdiaire du clavier.On dit alors que les deux entiers seront saisis au clavier. Lnonc ne prcise pas non plus que
faire du rsultat, on suppose alors que ce dernier sera affich sur lcran.
Voici le schma qui rsume notre problme.
Figure Erreur ! Il n'y a pas de texte rpondant ce style dans ce document. -1
Deux donnes seront lentre dune bote qui ralise le calcul et fournit en sortie la sommede ces deux donnes.En algorithmique, il est frquent de parler dentre et de sortie.
o Les donnes dun algorithme sont appeles entres : elles sont la base du traitementdes algorithmes.
o Les rsultats dun algorithme sont appels sorties : elles sont le fruit des traitementsfaits par les algorithmes et fournissent une rponse au problme pos.
Donne 2
RsultatCalcul de Somme
Donne 1
7/31/2019 L'Algorithmique
7/120
A.BENHARI 7
La bote de la figure Figure Erreur ! Il n'y a pas de texte rpondant ce style dans ce document. -1reprsente ce que nous allons appeler par la suite un processus de calcul. Ce processus raliseun traitement simple, qui est le calcul de Donne 1 + Donne 2. Une fois le rsultat obtenu ilsera affich sur lcran.La totalit du schma est le processus gnral et cest ce quil faut concrtiser par un
algorithme.Pour crire cet algorithme nous avons besoin de :1. Accepter Donne 1 et la stocker,2. Accepter Donne 2 et la stocker,3. Calculer Donne 1 + Donne 2,4. Stocker le rsultat,5. Afficher le rsultat sur lcran.
Nous avons ainsi dcompos le problme comme expliqu dans la section 0, les tchesnumrotes de 1 5 sont en fait lalgorithme crit en langage non formel. Il est possible denoter ici, que chaque problme possde la solution dans sa dcomposition.Nous allons le traduire dans un langage algorithmique formel, et nous expliquerons les
diffrents mots-cls utiliss au fur et mesure.Algorithme SommeVariablesDonne1, Donne2, Rsultat : entierDbut
Ecrire (Donner la donne numro 1 )Lire Donne1Ecrire (Donner la donne numro 2 )Lire Donne2Rsultat = Donne1+Donne2Ecrire (La somme est : Rsultat)
Fin
I.3. Squelette dun algorithmeAlgorithmeNomDeLAlgorithmeVAR//Dclaration de variables manipuls par lalgorithmeDonne1, Donne2, Rsultat : entierDbut
//Corps de lalgorithme constitu par les expressionsFin
Un algorithme est dfini par un entte donnant le nom de lalgorithme, gnralementexplicite. Lentte est suivie par une partie dclarative permettant de dfinir toutes les
donnes qui seront utilises par lalgorithme. Par la suite entre deux mots-cl Dbut et Fin,nous retrouvons le corps de lalgorithme qui sera constitu par les diffrentes expressionspermettant de rsoudre le problme.
I.4. Elments de base
TypesLes types permettent de donner un domaine de dfinition aux objets manipuls par unalgorithme, par exemple des donnes ncessaires pour un calcul seront dfinies dans ledomaine des rels ou des entiers, un message affich sera dfini dans le domaine des
caractres alphanumriquesetc.
7/31/2019 L'Algorithmique
8/120
A.BENHARI 8
Il existe 5 types de base en langage algorithmique de programmation :Les entiers : dfinis dans le domaine des entiers naturels et les entiers relatifs.Les relsLes caractres : dfinit tout ce qui est caractre alphanumrique, a .. z , 1 .. 9 ainsi que les caractres spciaux, caractres de ponctuation, etc
Les chanes de caractres : un assemblage de caractres forme une chane.Les boolens : un boolen permet de dfinir une donne qui ne peut prendre quun avaleurentre deux : vrai ou faux, ou bien 0 ou 1.
VariablesLes variables servent dclarer des objets ncessaires au bon fonctionnement dunalgorithme. Les variables doivent tre dfinies avant leur utilisation, en gnral en dessous delentte de lalgorithme dans une partie qui peut tre distingue par le mot cl VAR. Elles sontdfinies grce lun des cinq types de base et peuvent accepter une valeur de dbut appelevaleur initiale.Exemple :
Algorithme Exemple
VARDonne1 : entierDonne2 : entierCar : caractreMessage : Chane de caractresVraiOuFaux : boolen
Dbut// Initialisation des diffrentes variablesCar A
VraiOuFaux
FauxDonne1 10Donne220...Fin
Linitialisation des variables permet de donner ces dernires une premire valeur. Il nestpas interdit de changer cette valeur par la suite que ce soit par lintermdiaire :
o dune autre affectation,o dune expression de calcul,o
dune lecture au clavier.Constantes
Les constantes sont des donnes initialises qui ne changent jamais de valeur pendant toute ladure de lalgorithme. Elles peuvent seulement tre lues, utilises pour un traitement,affiches mais jamais modifies
AlgorithmeCirconfrenceConstantesPI = 3,14VARCirconfrence : rel
Rayon : rel
7/31/2019 L'Algorithmique
9/120
A.BENHARI 9
DbutEcrire (Donner le rayon du cercle)Lire RayonCirconfrencePI * (Rayon)Ecrire (La circonfrence de votre cercle est : Circonfrence)
Fin.
Dans cet algorithme PI ne peut qutre utilise telle quelle, elle ne peut pas tre modifiedune faon quelconque.
DclarationLa dclaration sert introduire la donne (variable ou constante)qui sera utilise parlalgorithme. Lors de la dclaration dune donne il est ncessaire de lui donner un type, et ilest parfois possible de lui affecter une valeur de dpart. Pour les constantes, la valeur dedpart est obligatoire.Il existe deux manires de dclarer une variable en pseudo-langage.NomDeLaVariable [: type de la variable]
Ou bien[Type de la variable] NomDeLaVariable Remarque : Il est conseill de garder le mme type de dclaration dans le mme algorithme.Exemples :V1 : entier //Dclaration de V1 de type entierEntier V2 0 //Dclaration de V2 de type entier avec une valeur initiale gale 0Entier V3 //Dclaration de V3 de type entier sans valeur initialeIl est aussi possible de faire des dclarations groupes .Entier V1, V2, V3 // Dclaration de trois variables de type entier par le biais dune mmeinstruction.
InitialisationLinitialisation dune variable revient une affectation dune premire valeur avant touteautre utilisation de cette variable. Les instructions dinitialisation peuvent figurer nimporteo dans lalgorithme, et pas ncessairement au dbut.
OprateursLes oprateurs permettent de modifier des valeurs de donnes lintrieur des expressions.Nous allons distinguer entre trois types doprateurs en algorithmique. Le type dune donnedtermine le type des oprateurs qui peuvent lui tre appliqus.Remarque : certains langages de programmation possdent des oprateurs spciaux.
Oprateurs arithmtiquesLes oprateurs arithmtiques sont tous utiliss en algorithmique pour crire des expressionsarithmtiques pouvant tre affectes des variables numriques. Par exemple pour modifiercertaines valeurs il est ncessaire dutiliser des oprateurs.Remarque : Il est aussi possible dutiliser loprateur + pour modifier des chanes decaractres.+ : permet les additions- : permet les soustractions.* : permet la multiplication
/ : permet la division% ou modulo : le reste de la division entire
7/31/2019 L'Algorithmique
10/120
A.BENHARI 10
Oprateurs logiquesLes oprateurs logiques sont utiliss pour affecter ou modifier les valeurs des donnes de typeboolen. Il en existe trois :
o NON : appel Non logique, cest un oprateur unaire,o OU : oprateur binaire appel Ou logique,o ET : oprateur binaire appel Et logique.
Les trois tableaux ci-dessous rsument les tables de vrit des oprateurs logiques :
Et Vrai FauxVrai Vrai FauxFaux Faux Faux
Ou Vrai FauxVrai Vrai VraiFaux Vrai Faux
Non Vrai FauxFaux Vrai
Oprateurs relationnelsLes oprateurs relationnels permettent de comparer des expressions entre elles, le rsultat seraune expression logique : vraie ou fausse. Ces oprateurs peuvent comparer entre les typesnumriques, les types caractres et les types chanes de caractres.=Oprateur Type numrique Type alphanumrique Type chane
7/31/2019 L'Algorithmique
11/120
A.BENHARI 11
Les expressions comme nous le verrons plus loin peuvent aussi contenir des appels defonctions, ou constituer des appels de procdure.Les expressions constituent les instructions algorithmiques.
I.5. Schmas algorithmiquesSchma algorithmique simple
AffectationLaffectation est lexpression de base en algorithmique, elle permet dassocier une valeurquelconque une variable de lalgorithme. Il est clair que la valeur doit tre du mme typeque la variable.Laffectation comprend 2 parties spares par le symbole daffectation :
o une partie gauche appele aussi valeur de gauche et constitue par une variable, c'est--dire un objet qui peut prendre une valeur,
o une partie droite ou valeur droite constitue par une expression pouvant trevalue.
VARV1 : entierV2 : relDbut
V1 10.5 // Affectation erroneV1 10 // Affectation correcte, on dit que V1 reoitla valeur 10V232.5 // Affectation correcte, V2 reoit 32.5V210 // Affectation correcte, les rels englobent les entiers naturels
V2
25/2 // Affectation correcte, V2 recevra le rsultat du calcul de 25 divis par 2Fin
Lecture de donnesUne autre manire daccorder des valeurs des variables est de faire ce quon appelle unelecture de donnes. La lecture se fait partir dun dispositif dentre, en loccurrence unclavier. On lappelle aussi saisie ou entre de donnes. Ce procd est utilis chaque foisquune valeur est requise par lalgorithme et que cette valeur ne peut tre donne que parlutilisateur, c'est--dire la personne qui utilise le programme. Bien sr dans un algorithme ilny aura pas de vritable saisie partir du clavier mais seulement une simulation de la saisie.Lalgorithme simule une demande de donne lutilisateur et laccepte pour la stocker dans
une variable.Plus tard, lalgorithme sera traduit par un programme, le programme sera compil et lesinstructions qui seront excutables par une machine demanderont une saisie relle de la partde lutilisateur. Ce dernier devra taper une donne du type requis au clavier et valider sarponse par un retour chariot.La syntaxe permettant de lire une donne est la suivante :Lire NomDeLaVariable
Ecriture de donnesLcriture de donnes permet un autre type dinteraction avec lutilisateur : la sortie de
messages ou de rsultats lattention de ce dernier. Lcriture se fait sur un dispositif de sortietel que lcran ou limprimante par exemple.
7/31/2019 L'Algorithmique
12/120
A.BENHARI 12
La syntaxe communment adopte est la suivante :Ecrire Message Ecrire Valeur
Incrmentation
Lincrmentation est une expression particulire qui permet daugmenter la valeur dunevariable dune certaine quantit la fois.V1 V1 + 1V2V2 + 2
DcrmentationLa dcrmentation permet de rduire la valeur dune variable.V1 V1 - 1V2V2 - 2
Schma algorithmique conditionnel
Un schma algorithmique conditionnel donne lalgorithme la possibilit daller dans un sensplutt que dans un autre. Une condition est value, et partir du rsultat de cette valuationun choix est fait.
7/31/2019 L'Algorithmique
13/120
A.BENHARI 13
II. Application
Ennonc de EXAM1 : on fait passer un examen des tudiant et lon veut dterminer ceux quisont admis . Il y a 3 matires : math (coef 3), franais (coef 2) et informatique (coef 5).Les notes peuvent aller de 0 20. Il y a admission la condition dobtenir la moyennec'est--dire 10 sur 20.
Ralisation des spcifications :3 matires :
maths 3franais 2informatique 5
notes 0 20
admis = moyenne de 10/20 minimumc'est--dire ajourn pour un total de point = 100
Ralisation dun organigramme de programmation ou ordinogramme
Ralisation de lalgorithmealgo exam1 ()
Dbut
Entre des notes
Calcul le total
Si total >= 100
AdmisAjourn
FIN
Non Oui
7/31/2019 L'Algorithmique
14/120
A.BENHARI 14
/* dterminer admis ajourn*//* 0
7/31/2019 L'Algorithmique
15/120
A.BENHARI 15
ex :chane (15) phrase.Phrase il y a des nuages
IV. Entre de donnes dans la machinesaisir (nom_variable)
V. Affichage de rsultatsafficher ( libell1 , var1, libell2 , var2, )
VI. CalculsSymbole daffectation
total
math*3 Rgle hirarchique des oprateurs :- puissance : **- multiplication et division : * et /- addition et soustraction : + et
Les parenthse peuvent changer la hirarchie des oprations. Ralisation des oprations dansla parenthse la plus interne.
VII.ConditionsExcution squentielle des instructions des programmes
Attention au parenthsesi (a=8 et b=3 ou (c=5) ou non d
7/31/2019 L'Algorithmique
16/120
A.BENHARI 16
VIII. Les structures rptitives
Pour que le programme ne boucle pas indfiniment, il faut continuellement inclure lintrieur de la boucle une instruction capable de modifier la valeur de lexpression test.
Diffrentes faon de programmer une boucle :Lors dun dialogue clavier/cran = question pos loprateurAutres traitement ? (oui/non)
Rponse de loprateur variable = rponse
Analyse du problme : faire n addition de 2 nombrec a + b
tant que rponse = oui si nonfaire
calculer 1 additionautre calcul ? (oui/non)saisir la rponse
fin tant que
prog
Dbut
Calculer 1 addition
(c fois)
fin
Saisie de a et b
Addition
Affichage du rsultat
question
7/31/2019 L'Algorithmique
17/120
A.BENHARI 17
Entrez imprativement dans la boucle : rponse oui Entrez conditionnelle dans la boucle suivant oprateur :Afficher (calcul ? (oui/non))
algo rep1()var locales
entier a, b, cchane (3) reponse
dbutafficher ( Voulez-vous faire un calcul ? (oui/non) )saisir (rponse)c a + btant que rponse = oui faire
afficher ( entrez a et b )saisir (a, b)c a + bafficher ( rsultat= , c)afficher ( autre addition ? (oui/non) )saisir (rponse)
fin tant quefin
A laide dune marque de fin de travailalgo rep2()var locales
entier a, b, cdbut
afficher ( Entrez une valeur pour a ou -1 pour terminer.)saisir (a)tant que a -1faire
afficher ( entrez b )saisir (b)c a + b
afficher ( rsultat= , c)afficher ( Entrez a ou -1 pour terminer.)saisir (a)
fin tant quefin
7/31/2019 L'Algorithmique
18/120
A.BENHARI 18
a.A laide dun compteurPar incrmentation ou dcrmentation
i.Par dcrmentationalgo rep3()var locales
entier a, b, c, idbut
afficher ( Entrez le nombre daddition faire.)saisir (i)tant que i > 0faire
afficher ( entrez a et b )saisir (a, b)c a + b
afficher ( rsultat= , c)ii-1fin tant que
fin
ii.Par incrmentationalgo rep4()var locales
entier a, b, c, I, cptdbut
afficher ( Nombre daddition.)
saisir (i)cpt0tant que i > 0faire
afficher ( entrez a et b )saisir (a, b)c a + bafficher ( rsultat= , c)cptcpt+1
fin tant quefin
7/31/2019 L'Algorithmique
19/120
A.BENHARI 19
IX. Les procdures et les fonctions (sous-programme)
Raison des sous programmes :- rutilisabilit- lisibilit du programme- facilit de maintenance- facilit de mise au point
P1 : entreP2 : entre-sortieP3 : sortie
7/31/2019 L'Algorithmique
20/120
A.BENHARI 20
Une fonction ne retourne quune valeur, ses paramtres doivent tre exclusivement dentre(passage par valeur uniquement)
Entre = passage de paramtre par valeurEntre-sortie et sortie : passage par rfrence
Passage par une valeur : on donne au programme une valeur donn
7/31/2019 L'Algorithmique
21/120
A.BENHARI 21
a.ProcdureEst un sous ensemble indpendant o faisant partie dun programme principale. Ellecommunique avec des paramtres entre-sortie, sorties.Exemple : soit calcul de la somme de 2 nombres : c a + b
procdure somme (a, b, c)val entier a
val entier bref entier c
dbutca+b
fin
programme principalalgo pp ()var locales
entier x, y, z
dbutafficher ( Entrez une valeur pour x )saisir (x)afficher ( Entrez une valeur pour y )saisir (y)somme (x, y, z)afficher ( Le rsultat est , z)
fin
b.FonctionUne fonction est une sous partie dun programme qui retourne 1 valeur donc une fonctionpossde un type.Elle ne doit possder que des entrs.
Doit contenir la commande retourne (constante, variable, expression arithmtique)
fonction entier fsomme (a,b)
7/31/2019 L'Algorithmique
22/120
A.BENHARI 22
val entier aval entier b
var localesentier c
dbut
ca+bretourne (c)fin
dbutretourne (a+b)
fin
programme principalalgo fpp()var locales
entier a, bdbut
afficher ( entrez a et b )
saisir (a,b)afficher ( Rsultat , fsomme (a,b))
fin
X. Les chanes de caractresa.Dfinition
Cest un ensemble de caractres affichable. On utilise un code ISO (ASCII) codant 0 127caractre texte et 128 255 caractres graphiques
- 0 31 caractre de contrle du terminal- 48 57 chiffre- 65 A, B- 97 a, b
caractre alphabtique numrique spciaux
Une chane de caractre = caractre concatn
b.ConcatnationMise bout bout de caractre pour former une chaneMise bout bout de plusieurs chanes
Oprateur de concatnation = +y = il fait chaud // pas de smantiquez = xyaZb2 a = il b = fait c = froid d = chaud e = humide
y = a + b + d
7/31/2019 L'Algorithmique
23/120
A.BENHARI 23
c.Conversionsi.Conversions dune chane en entier
Fonction chanant
c 2003 z chainant (c)
d 128 y c + d
y = 2003128
r chainant (d)r = 128
w = z + v
w = 2131a chainant (y)a = 2003128
Si erreurchainant = Za34 retourne 0chainant = 34Za retourne 34
ii.Conversion dun entier en chaneEnt chaine (entier) retourne une chane
d.Longueur dune chaneDfinition de la chanevar locales
chaine (12) a
Longueur effective de la chane= Longueur de lespace utilis
longueur (chaine) retourne un entier
ex : l
longueur (a)
e.Sous chane dune chanez = Il fait chaud temperature milieu (z, 9, 5)temprature = froid
milieu (chaine, num dpart, nombre partir de dpart)
7/31/2019 L'Algorithmique
24/120
A.BENHARI 24
XI. Notion de tableau (ou table ou vecteur oumatrice array)a.Dfinition
Un tableau est un ensemble de valeurs de mme type
Types :- prdfinis = entier, rel, logique, caractre, chane- construits = structur, numr
Ex dun tableau dentier1, 3, 5, 2, 8, 7
en variable1 3 5 2 8 7A B C D E F
Tableau t11 3 5 2 8 7 Valeur
Rang dans tableau
t1[3] = 55 est la valeur de llment de rang 3 du tableau t1
1 2
1 1 32 5 23 8 7t1[2ligne,1colone] = 5rang = 2,1
b.Dclaration du tableauvar locales
type nom_tableau [taille] taille = 1er valeur valeur max
Ex : soit un tableau de 50 entiers appel t1entier t1 [1 50]
Soit un tableau de 50 chanes de caractres de 22 caractreschaine (22) t2 [1 50]
i.Tableau 1 dimensionOn peut le considrer comme linaireOn le remplie avec 1 et 1 seul indice(vecteur)Chaque lment est identique
ii.Tableau 2 dimensions, 3, n
7/31/2019 L'Algorithmique
25/120
A.BENHARI 25
On peut considrer quil sagit dune nature contenant l lignes et c colones
var localestype nom_tableau [ [1l], [1 c] ]
exemple 3 dimensionsentier t1 [ [1 m], [1l], [1 c] ]ensemble de matrice
Du plus haut niveau au plus bas niveau
c.Mise ltat initialMettre les donnes dans un tableau correspond au chargement des donnes dans le tableau.RAZ, RAB, VRAI / FAUX
- Transfert de variables- Transfert dautre tableau- Saisie- Donns de fichiers
Exemple de saisiealgo saisie ()var locales
entier t1 [[1..5], [1..3]], l, c
dbut /* -1 pour fin*/afficher ( entrez un numro de ligne )
saisir (l)tant que l -1faire
afficher ( entrez un numro de colone )saisir (c)afficher ( entrez une valeur pour , l, c)saisir (t1[l,c])afficher ( Entrez un numro de ligne ou -1 pour quitter
fin tant quefin
Exemple de fonction avec passage de tableaufonction entier TOTO (t1[], n)ref entier t1 [1..n]val entier n
d.Recherche de donne dans un tableaui.Recherche par le rang
Ex : afficher (t1 [3])
ii.Recherche squentielle1.Sans erreur possible
7/31/2019 L'Algorithmique
26/120
A.BENHARI 26
C'est--dire lment cherch se trouve toujours dans le tableau
2.Avec erreur possibleEn italique dans sch prcdent.t1 (0,1)t1 (0,1)
procdure rechseq (t1 [], n atrouve)ref entier t1[1..n]val entier nval entier atrouvervar locales
entier ilogique trouve
dbut
trouve
fauxi1tant que (i
7/31/2019 L'Algorithmique
27/120
A.BENHARI 27
PrincipeSoit un tableau dune suite de 8 nombres.3 5 8 12 15 27 43 751 2 3 4 5 6 7 8
Chercher 15indice mini = 1indice maxi = 8indice mil = (mini + maxi) /2 =4
trouve = 12indice mini mil +1indice mil 6
trouve = 27indice maximil - 1
indice mil (5+5) / 2 = 5
procdure dichotomie (t1[], n, cherche, trouve, rang)ref entier t1[1..n]val entier nval entier chercheref logique trouveref entier rang
var localesentier mini, maxi, mil
dbutmini 1maxi nmil (mini + maxi) / 2tant que mini
7/31/2019 L'Algorithmique
28/120
A.BENHARI 28
sinonmini mil + 1
finsimil (mini + maxi) / 2fin tant que
si t1[mil] = cherchealorstrouve vrairang milsinontrouve fauxfinsi
fin
XII.Les mthodes de tri usuellesa.Tri par insertion
i.Principe18 5 12 17 14 31 81 2 3 4 5 6 7
Comparer un lment au suivant de la liste si cet lment une valeur infrieur, il reste enplace sinon il est chang avec celui qui est de valeur infrieur, il sagit donc pour chaquelment du tableau de lui mnager une petite place parmi ceux qui sont dj tri en dcalantvers le haut ceux qui sont plus grand que tri.
ii.Algorithmeprocdure tri insre (tab [], n)rf TIND tab [1..n] TIND correspond un type indterminvaleur entier nvar locales
entier i,jTIND temp
logique fin
dbuti 2tant que i
7/31/2019 L'Algorithmique
29/120
A.BENHARI 29
tant que (j > 0) et (fin = faux)faire
si temp < tab [j]alors
tab [j+1] tab [j]
j j 1sinonfin vrai
finfin tant quetab [j+1] tempi i+1
fin tant quefin
b.Tri par slectioni.Principe
A chaque itration, on choisi le plue petit lment parmi ceux quil reste trier et on le met sa place.
ii.Algorithmeprocdure trislection (tab [], n)ref TIND tab [1..n]val entier n
var localesTIND petitentier i, ipetit, j
dbuti 1tant que i < nfaire
ipetit ipetit tab [ipetit]
j i+1tant que j
7/31/2019 L'Algorithmique
30/120
A.BENHARI 30
iii.RemarqueCette mthode conduit peu de dcalage. Elle est pourtant moins rapide que la prcdente.
c.Le tribullei.Principe
On parcoure le tableau autant de fois quil le faut en comparant les lments qui se suivent eten les changeant sils ne sont pas dans le bonne ordre. A chaque passage, on peut enlever 1 n puisque lon trouve le dernier du tableau trier.
ii.Algorithmeprocdure triballe (tab [], n)ref TIND tab [1..n]val entier nvar locales
logique finentier iTIND petit
dbutfin fauxtant que fin = fauxfaire
fin vraii1tant que i < nfaire
si tab [i] > tab [i+1]alors
petit tab [i+1]tab [i+1] tab [i]tab [i] petitfin faux
finsii i+1
fin tant quen n 1
fin tant quefin
iii.CommentaireLun des plus mauvais trie si les donnes sont trs disperses par contre, il peut trs bienconvenir pour remettre en ordre des donnes peu tris.
d.Le tri de shelli.Principe
7/31/2019 L'Algorithmique
31/120
A.BENHARI 31
Pour limiter les dplacements , on choisi de comparer des lments du tableau dans desparties de tableau. On choisi au dpart des parties dun pas gale la moiti de la taille dutableau, chaque lments de la premire moiti est compar un lment de la seconde. Silne sont pas dans le bonne ordre, ils sont chang puis on diminue le pas en continuant comparer des lments dont la distance est gale au pas. De cette faon, les lments traits
sont dabord des sauts important puis de plus en plus petit jusqu ce que le pas soit gale 1.
ii.Algorithmeh n/2tant que h >=1faire
fin vraii1tant que i tab [i+h]alors
petit tab [i+h]tab [i+h] tab [i]tab [i] petitfin faux
finsii i+1
fin tant quesi fin = vraialors
h h/2fin si
fintantque
iii.RemarqueMthode plus efficace que la prcdente dans les cas dune grande dispersion.
e.Tri de shell-Metzneri.Principe
Mme principe que pour le shell, au lieu d utiliser , le triballe, on choisi le tri par insertion( i+1 chang par i +h).
ii.Algorithmehn/2tant que h>=1faire
ih+1tant que i= 1
7/31/2019 L'Algorithmique
32/120
A.BENHARI 32
fairea[j+h]a[j]
jj-hfin tantii+1
fin tanthh/2fin tant
iii.RemarqueTri rput plus rapide que tous les prcdant
f.Tri par vecteur dindicei.Principe
Mthode ne manipulant pas directement les lments du tableau mais utilisation dun vecteurdindice qui joue le rle de pointeur
Ex :Avant triTab50 2 25 -30 45 11 2 3 4 5 6
Indice1 2 3 4 5 61 2 3 4 5 6
Aprs tri
Tab50 2 25 -30 45 11 2 3 4 5 6
Indice4 6 2 3 5 11 2 3 4 5 6
Rsultat : -30, 1, 2, 25, 45, 50
ii.Algorithme(Avec tri par slection)
ideb1tant que ieb
7/31/2019 L'Algorithmique
33/120
A.BENHARI 33
aux indice [min]indice [imin] indice [ideb]indice [ideb] aux
finsik k+1
fin tantideb ideb +1fin tant
iii.RemarqueCette mthode est trs intressante pour manipuler des fichiers de grande taille, on peut doncles trier sans dplacer lordonne.
g.Tri par monotoniei.Principe
On part du constat que dans toute suite de nombre entier tri au hasard, on a toujours un
certain nombre dentre eux tri naturellement.
On appelle monotonie, une suite de nombre naturellement tri ?Exemple :
ii.Algorithmeprocedure separation (tab1[], tab2[], tab3[], i1,i2, i3)ref TIND tab1 [1..i1], tab2 [1..i2], tab3 [1..i3]ref entier i2, i3val entier i1
var localesentier ecrit, i
dbutecrit 2i 1i2 1
7/31/2019 L'Algorithmique
34/120
A.BENHARI 34
i3 0tab2[i2] tab1[1]
tant que i
7/31/2019 L'Algorithmique
35/120
A.BENHARI 35
si k
7/31/2019 L'Algorithmique
36/120
A.BENHARI 36
1 instant tn ! = (n-1) ! * n0 !=1
fonction entier facto (n)val entier ndbut
si n=0alors
retoune (1)sinon
retourne (facto(n-1)*n)finsi
fin
algo factorielle ()var locales
entier ndbut
afficher ( Quelle factorielle ? )saisir (n)afficher ( La valeur est ,facto(n))
fin
En C++
int facto (int n){
if (n==0)return (1)
elsereturn (facto (n-1)*n)
endif}
Ex 2: soit la somme des n premiers nombres entiersfonction entier somme (n)val entier ndbut
si n = 0alors
retoune0sinon
retourne (somme (n-1) +n)finsi
fin
7/31/2019 L'Algorithmique
37/120
A.BENHARI 37
Ex 3 : crire une procdure rcursive qui affiche tous les lments dun tableau dentier danslordre croissant de leur indice.
procedure ecrivect (V[], n, i)val entier V[i..n]val entier i,n
dbutsi i
7/31/2019 L'Algorithmique
38/120
A.BENHARI 38
Transfert logique
En mmoire centrale, 3 zones de travail ou BUFFERS qui ralise les entre, sortie et travail.
c.Dclaration des fichiers en algorithmePour viter les problmes de recopie, nous dclarons les types de fichiers au niveau globalEX : Soit dclarer un fichier client qui contient un numclient 1 nom, 1 adresse, 1 solde decompte.
typestypes struct
entier numroclientchaine (30) nomchaine (80) adressereel solde
fstruct CLIENT
Aprs dclaration des bibliothque (#iostream.h)
var globaleCLIENT ennrcli /*dclaration dun buffer*/FICHIER (client) ficli /*dclaration dun fichier construit sur la structure CLIENT*/
ficli est un nom logique
7/31/2019 L'Algorithmique
39/120
A.BENHARI 39
d.Instruction de manipulation des fichiers- Ouverture- Lecture/ criture/ suppression
i.Ouverture, fermeture1.Ouverture
OUVRE (nom_fichier_logique, nom-fichier_physique , mode_douverture)
nom_fichier_logique : nom pour le programme.
nom-fichier_physique : nom connu pour le systme dexploitation.mode_douverture :- lecture- criture- Mise Jour (MAJ) {lecture/criture}- Extension {aprs fin de fichier}
Fonction :- En ouverture : vrifier que le fichier existe, rserver ensuite un buffer.- Ouverture en criture : cr le fichier ou lcraser sil existe dj- En MAJ : modifier directement chaque enregistrement- En extension : on efface la fin de fichier actuelle pour enregistrer des donnes lasuite de celle qui existe dj.
En algo, on peut utiliser une primitive (fonction) systme qui est fdef (fin de fichier ;fdef(nom de fichier))
2.Fermeturefermer (nom de fichier logique)Libre le buffer cr louverture en criture, enregistrer sur le disque le dernier contenu du
tampon.
ii.Lecture, criture, suppressionLecture lire (nom fichier logique, nom du buffer)Ecriture ecrire (nom fichier logique, nom du buffer)
Remarque :Encli.nom donne du buffer toujours nomm par le prsence du nom du buffer avant lenom de la donne spar dun point.
7/31/2019 L'Algorithmique
40/120
A.BENHARI 40
e.Application sur les fichiers squentielsi.Soit imprimer le contenu dun fichier sur
imprimanteFichier physique : FiphyFichier logique : fientr
typestype struct
chaine (25) nomentier nucli
fstruct CLIENT
var globalesCLIENT enrcliFICHIER (CLIENT) fientrchaine (25) snomentier snucli
algo lecseq ()dbut
ouvre (fientr, Fiphy , lecture)
lire (fientr, enrcli)tant que non fdef (fientr)faire
snom enrcli.nomsnucli enrcli.nucliimprimer ( , snom , , snucli)
fintantferme (fientr)
fin
ii.RemarqueLe fichier dentr ne doit pas tre cr partir de lditeur de texte mais laide dunprogramme de cration.
7/31/2019 L'Algorithmique
41/120
A.BENHARI 41
iii.Cration dun fichier squentieltypes
type structchaine (25) nomentier nucli
fstruct CLIENT
var globalesCLIENT enrcliFICHIER (CLIENT) fisor
chaine (25) tnomentier tnucli
algo ecriseq ()dbut
ouvre (fisor, Fiphy , ecriture)afficher ( entrez un nom ou fin )saisir (tnom)tant que tnom fin faire
enrcli.nom tnomafficher ( entrez un numro )saisir (tnucli)enrcli.nucli tnuclicrire (fisor, enrcli)afficher ( entrez un nom ou fin )saisir (tnom)
fintantferme (fisor)
fin
f.Les fichiers accs directSachant que les supports externes tel que les disques magntiques sont adressable, on va lesutiliser pour retrouver directement des donnes
Remarque : random (ang) = alatoire ou au hasard
Dans tous les cas il faut crer une correspondance entre une des informations delenregistrement et le rang de stockage de lenregistrement sur le support externe.
Algorithme de gnration automatique dadresse ou correspondance direct.
Ex : Correspondance direct, rang identifiant externe
7/31/2019 L'Algorithmique
42/120
A.BENHARI 42
Exemple = numro tudiant = rang de stockage sur le disque
i.Lecture accs directetypes
type structchaine (25) nomentier nucli
fstruct CLIENT
var globalesCLIENT enrcliFICHIER (CLIENT) filogcli
chaine (25) snomentier snucli, rang
algo lecdir ()dbut
ouvre (filogcli, Fiphy , lecture)afficher ( entrez un numro de client ou 0 pour fin )saisir (rang)tant que rang 0faire
positionner (filogcli, rang)lire (filogcli, eurcli)snom enrcli.nomstnucli enrcli.nucliafficher ( Nom du client : , snom)afficher ( Numro du client : snucli)afficher ( entrez un numro de client ou 0 pour fin )saisir (rang)
fintantferme (filogcli)
fin
ii.Cration a accs directtypes
type structchaine (25) nomentier nucli
fstruct CLIENT
var globalesCLIENT enrcliFICHIER (CLIENT) filogcli
chaine (25) tnomentier tnucli, rang
7/31/2019 L'Algorithmique
43/120
A.BENHARI 43
algo ecridir ()dbut
ouvre (filogcli, Fiphy , ecriture)afficher ( entrez un numro de client ou 0 pour fin )
saisir (rang)tant que rang 0faire
afficher ( Entrez nom du client )saisir (tnom)enrcli.nom tnomenrcli.nucli rangpositionner (filogcli, rang)ecrire (filogcli, enrcliafficher ( entrez un numro de client ou 0 pour fin )saisir (rang)
fintantferme (filogcli)
fin
g.Les fichiers textei.Dfinition
Fichier dont les composantes sont des caractresTEXTE fitext
On la particularit dtre divis en ligne dont la fin est indiquer par un caractre spciale en
gnral ce caractre et le caractre CR (caracter return).Un fichier texte fait les conversions de formats de donnes. Les transferts se fond par lesnoms de variables et non pas par structure complte. Les entres sorties standards sontgnralement de ce type (saisir, afficher, imprimer).
Remarque : un fichier texte peut tre cr partir de lditeur de texte
ii.Dclaration dun fichier textevarTEXTE nom_du_fichier_texte (logique)
iii.Action sur un fichier texte1.Ouverture de fichier
ouvre_text (nom_logique, nom_physique , mode douverture)
2.Transfert de donnesa.Lecture
lire_text (nom_logique, arg1, arg2 )
b.Ecriture
7/31/2019 L'Algorithmique
44/120
A.BENHARI 44
ecrire_text (nom_logique, arg1, arg2 )
3.Fermetureferme_text (nom_logique)
XV.Algorithmes et structure de donnes
a. Les structures arborescentesUn arbre est un ensemble dlments appels nuds ou sommets organiss de manire hirarchique partir dunnud distingu appel racine. On repre les nuds de larbre en leur donnant des noms diffrents.
i. Arbres binairesUn arbre binaire est soit vide, not , soit de la forme < r, B1, B2 > o r est la racine et o B1 et B2 sont desarbres binaires.
On dfinit intuitivement les notions de sous-arbre, de sous-arbre gauche, de fils gauche, de lien gauche et
rciproquement droite. On dfinit encore les notions depre, defrre, dascendantet de descendant. Lesnuds dun arbre binaire ont au plus deux fils. Un nud interne ou double a 2 fils. Unpoint simple gauche aseulement un fils gauche, et rciproquement droite. Un nud externe ou feuille na pas de fils. De faongnralise, on qualifie de nud interne, tout nud qui nest pas externe. On appelle les branches de larbre toutchemin (suite conscutive de nuds) allant de la racine une feuille. Il y a autant de branches que de feuilles. Lebord gauche est le chemin issu de la racine en suivant les liens gauches, et rciproquement droite.
Les caractristiques dun arbre sont :- la taille de larbre est le nombre total de nuds. - la hauteur ou niveau dun nud x est le nombre de lien sur lunique chemin allant de la racine x,
note h(x).
- la hauteur ou profondeur de larbre A, ( ) ( ){ }xhAhx
max= .
- la longueur de cheminement de larbre A, ( ) ( ) ( ) ( )ALCIALCExhALCx
+== avecLCE
la longueur de cheminement extrieure ( )feuillex
xh etLCI la longueur de cheminement intrieure
( )internenoeudx
xh .
- la profondeur moyenne externe deA est ( ) ( )feuillesdenombre
ALCEAPE = .
On donne la signature du type abstrait arbre binaire :
sorte arbreutilise nudoprations
r
B1 B2
7/31/2019 L'Algorithmique
45/120
A.BENHARI 45
: arbre< , , > : nud x arbre x arbre arbreracine : arbre nudgauche : arbre arbredroit : arbre arbre.
Proposition : Soit un arbre binaire de taille n, de profondeurp et possdantf feuilles. Si on examine les casextrmes, on obtient que ( ) 1log2 npn ; par ailleurs
pf 2 do ( ) fp 2log .
Reprsentation des arbres en machines : On utilise la structure rcursive des arbres.1) Dans cette premire reprsentation, le chanage est symbolis par des pointeurs.type arbre = adresse de nud ;type nud = structure
val : lment ;g, d : arbre ;fin ;
1.2. Larbre est dtermin par ladresse de la racine. On gre la mmoire dynamiquement pour les oprations desuppression / insertion.
2) Dans la reprsentation contigu, on simule les chanages par des indices dans un tableau.type arbre = tableau de 1 N de
structureval : lment ;g, d : entier ;fin ;
3.4. On utilise lindice 0 pour indiquer quil ny a pas de fils. Larbre est dtermin par une variable entirecontenant lindice de la racine. On va grer les cases libres pour des insertions / suppressions. On chane les
cases libres comme une pile, en utilisant le chanage g et on utilise une variable entire libre pour indiquerlindice du sommet de pile .
ii. Arbres binaires completsUn arbre binaire est completsi tous les nuds qui ne sont pas des feuilles ont 2 fils.
Propositions : Un arbre binaire complet ayant n nuds internes possde en tout n+1 feuilles. La dmonstrationse fait simplement par rcurrence. Par ailleurs, on montre quil existe une bijection entre lensemble des arbresbinaires de tailles n,Bn, et lensemble des arbres binaires complets de taille 2n+1,BC2n+1. Principe : on ajoute
des feuilles de sorte que tout nud de larbre ait deux fils. De plus on tablit quen
nnn Cn
BCB 212 1
1
+== + .
iii. Arbres binaires parfaits, ordre hirarchiqueOn dit quun arbre binaire estparfaitsi toutes ses feuilles sont situes sur les deux derniers niveau, lavantdernier tant complet, et les feuilles du dernier sont le plus gauche possible. Attention ! un arbre binaire parfaitnest pas forcment complet, mais il a toujours au plus un nud simple (le pre de la feuille la plus droite).
On peut reprsenter un arbre binaire parfait de taille n de manire compacte par un tableau n cases. Ceci se faiten numrotant les nuds de 1 n en partant de la racine, niveau par niveau de gauche droite (ordrehirarchique). On a les relation gnrales suivantes :
- le pre du nud dindice i est lindice i / 2 (division entire) ;- le fils gauche dun nud i est, sil existe, lindice 2i ;- le fils droit dun nud i est, sil existe, lindice 2i+1 ;- les feuilles sont aux indices > n / 2.
7/31/2019 L'Algorithmique
46/120
A.BENHARI 46
iv. Parcours en profondeur dun arbre binaireOn considre lopration deparcours qui consiste examiner systmatiquement dans un certain ordre tous lesnuds de larbres pour effectuer un traitement de donnes. Le parcours en profondeur gauche consiste partirde la racine et tourner autour de larbre en allant toujours le plus gauche possible.
Procdure Parcours(A : arbre) ;
dbutSi A =
Alors T0Sinondbut
T1 ;Parcours(g(A)) ;
T2 ;Parcours(d(A)) ;T3 ;
fin ;fin ;
Chaque nud est visit trois fois. A chaque visite correspond un traitement Ti et un ordre de parcours. T1seffectue avant la descente gauche et dcrit lordre prfixe oupr-ordre. T2 seffectue aprs la remonte gaucheet avant la remonte droite, lordre associ est lordre infixe ou symtrique. Le traitement T3 est ralis aprs laremonte droite ; les nuds sont parcourus dans lordre suffixe oupost-fixe.On ajoute un traitement particulierT0 pour les nuds vides.
v. Arbres gnrauxUn arbre gnral, ou simplement arbre, est une structure arborescente o le nombre de fils nest plus limit 2.Un arbre A = < r, A1, A2, , An > est la donne dune racine r et dune suite ventuellement vide de sous-arbresdisjoints. Cette suite est unefort. Un arbre est obtenu en rajoutant un nud racine la fort.
On donne la signature des arbres gnraux :
sorte arbre, fortutilise nudoprations
cons : nud x fortarbreracine : arbre nudsous-arbre : arbre fort : fortime : fort x entierarbrelongueur : fortentierinsrer : fort x entier x arbre fort
Il ny a plus de notion de fils gauche ou de fils droit. On parle du ime fils dun nud.
Dans un parcours gauche, chaque nud est rencontr une fois de plus que son nombre de fils.
Procdure Parcours(A : arbre) ;dbutSi sous-arbre(A) =
Alors T0Sinon
dbuti 1 ;Rpter
Ti ;Parcours(ime(sous-arbre(A), i)) ;i++ ;
Jusqu ce que i > longueur(sous-arbre(A)) ;
7/31/2019 L'Algorithmique
47/120
A.BENHARI 47
Ti ;fin ;
fin ;
Lordreprfixe sur les nuds est obtenu en ne faisant quintervenir que T 1. Lordre suffixe est obtenu en nefaisant intervenir que Ti lextrieur de la boucle. Il ny a pas dordre infixe.
Reprsentation des arbres : On reprsente un arbre gnral par des listes chanes dynamiques.
type arbre = adresse de nud ;type nud = structure
val : lment ;premier_fils, frre : arbre ;fin ;
Propositions : Le nombre darbres gnraux de taille n+1 estn
nCn
21
1
+. Par ailleurs, il existe des bijections
entre les forts de taille n, les arbres gnraux de taille n+1, et les arbres binaires de taille n, avec des propritsintressantes sur les parcours.
b. Graphes
i. DfinitionUn graphe est un ensemble dobjets modliss par des sommets, et mis en relation (binaire). Ces relations sont
modliss par des arcs ou des artes. Un graphe orient[non orient] est un couple ASG ,= o S est unensemble fini de sommets, et A un ensemble de paire ordonnes [couple] de sommets appels arcs [artes].
ii. TerminologieUn graphe simple est sans boucle1, et sans liens multiples. Dans un graphe orient, on dit quey est le successeurdex sil existe un arc qui mne dex versy ; on dit en outre quey est adjacentx. Pour un graphe orient, on ditsimplement quex ety sont adjacents. Un graphe est dit completsi pour tout couple de sommet il existe un arc(ou une arte) les joignant. Dans un graphe orient, le demi-degr extrieur[intrieur] dun sommetx, que lon
note ( )xd+ [ ( )xd ], est le nombre darcs ayantx comme extrmit initiale (finale). Le degrdex est
( ) ( ) ( )xdxdxd + += . Pour un graphe non orient, on dfinit uniquement le degrdun sommetx ( )xd .
Dans un graphe orient, on appelle chemin de longueurL une suite deL+1 sommets ( )Lsss L10 , telles que
( )1, +ii ss forme un arc. Pour un graphe non orient, on parle de chane. Dans un graphe orient [non orient],un chemin [une chane] dont tous les arcs [artes] sont distincts et tels que les sommets aux extrmits concidentest un circuit[un cycle]. Un graphe orient estfortement connexe si pour toute paire de sommets distincts s et s,il existe un chemin de s vers s et un chemin de s vers s. Un graphe non orient est connexe, si pour toute pairede sommets distincts, il existe une chane les joignant. Une composante fortement connexe [connexe] est un
sous-graphe fortement connexe [connexe] maximal.
iii. Graphe et ArbreEn thorie des graphes, un arbre est un graphe non orient, connexe et sans cycle. Soit G un graphe orient, onappelle racine de G un sommet rtel que, pour tous sommetsx distincts de r, il existe un chemin de rversx. Unearborescence est un graphe orient G admettant une racine et tel que le graphe obtenu partir de G en enlevantlorientation soit un arbre.
iv. Signature graphe orient
sorte sommetutilise boolen, entier
1 lien dun sommet sur lui-mme
7/31/2019 L'Algorithmique
48/120
A.BENHARI 48
oprationss : entiersommetn : sommetentier arc : sommet x sommetboolend+ : sommetentierime_succ : sommet x entiersommet
prem_succ : sommetsommetsucc_suivant : sommet x sommetsommet
Pour les graphes non orients, on dispose de la mme signature en remplaant arc par arte et d+ par d.
v. Reprsentation des graphesOn aura deux possibilits classiques de gestion de la mmoire : contiguet chane.
Reprsentation contigu: Soit n le nombre de sommet dun graphe ; on dfinit la matrice dincidence de
dimension n x n not G et tel que [ ] vraijiG =, ssi il existe un arc de i versj. Si le graphe est non orient lamatrice dincidence est symtrique.
type graphe = tableau[1 n, 1 n] de boolen.
La complexit en espace est en O(n), parcourir les successeurs dun sommet se fait en O(n), savoir siy est lesuccesseur dex se fait en O(1).
Reprsentation chane : Pour chaque sommet si, on forme la liste dadjacence, qui est la liste chane de tous lesuccesseur de si.
type graphe = tableau[1 n] dadresse de cellule;cellule = structurenumro : entier de 1 n;
suivant : adresse de cellule;fin;
Soit ( ) +=x
xdA . La complexit en espace est en n + 2p. Le parcours des successeurs dun sommet
seffectue en ( )( )xdO + . La consultation complte est en ( )AO . Savoir siy est le successeur dex se fait en( )( )xdO + , dans le pire des cas.
Remarque. Le chanage peut tre simul dans un tableau. Pour un graphe non orient, il y a redondance 2dinformation.
vi. Parcours en profondeur dun graphe orientLe parcours en profondeurun parcours rcursif, simulable par unepile.Principe : On utilise une marque (vecteur de n boolens) pour marquer les sommets au fur et mesure quon lesrencontre. A partir dunx de dpart, non marqu, on avance dans le graphe en allant toujours vers un nouveausuccesseur non marqu ; les sommets retenus chaque fois sont marqus. Quand on ne peut plus avancer, onrevient au choix prcdent, et on itre la mthode.
Procdure Profondeur(x : sommet) ;dbuti n(x) ;marque[i]vrai ;pour j de 1 d+(x) faire
dbuty ime_succ(x, j) ;
k
n(y) ;
2 y est le successeur de x et rciproquement
7/31/2019 L'Algorithmique
49/120
A.BENHARI 49
si non marque[k] alors Profondeur(y) ;fin ;
fin_Profondeur ;
Programme principaldbut
pour i de 1 n faire marque[i] faux ;pour i de 1 n fairesi non marque[i] alors profondeur(s(i)) ;
fin.
5. Pour les graphes non orients, on dispose du mme algorithme en remplaant d+(x) par d.Les sommets ne sont marqus quune seule fois et lalgorithme parcourt un fois et une seule les listes
dadjacence : complexit en ( ) +x
xd , ce qui donne ( )AO pour les listes dadjacence et ( )nO pour les
matrices dadjacence.
On considre les arcsx y tels que Profondeur(x) appelle Profondeur(y). Ces arcs couvrants constituent unefort couvrante constitue darborescences disjointes et dont les racines sont les sommets de dpart. Les graphesobtenu sans orientation sont des arbres (graphe non orient, connexe et sans cycle). Lafort couvrante a autantdarbres recouvrants quil y a de composantes connexes dans le graphe. Ainsi le parcours en profondeur rsoutle test de connexit en temps linaire.
vii. Parcours en largeurLeparcours par largeur ou par niveau est un parcours itratif qui fonctionne avec unefile.Principe : On part dun sommetx et on visite tous les successeursy dex ; on ritre lalgorithme sur les sommetsy dans lordre o on les a rencontrs partir de x. On utilise toujours une marque de sommets. On utilise une filepour grer ce parcours par niveaux.
Procdure Largeur(x :sommet)
dbutfile_vide(file) ;i n(x) ;marque[i] vraie ;ajouter(file, x) ;tant que non est_vide(file) faire
dbuty premier(file) ;
retirer(file) ;pour i de 1 d+(y) faire
dbutz ime_succ(y,i) ;j n(z);
si non marque[j] alorsdbutmarque[j] vraie;ajouter(file,z);fin;
fin ;fin ;
fin ;
Programme principaldbutpour i de 1 n faire marque[i] faux ;
pour i de 1 n fairesi non marque[i] alors Largeur(s(i)) ;
7/31/2019 L'Algorithmique
50/120
A.BENHARI 50
fin.
On a la mme complexit que pour le parcours en profondeur. Lalgorithme pour un graphe non orient sobtientsimplement en remplaant d+ par d. On a la mme proprit sur la fort couvrante et les composantes connexesque pour le parcours en profondeur.
c. Problme de la recherchei. Introduction
Considrons un ensemble de grande taille ayant des caractristiques communes. On veut faire de manireoptimise des oprations de recherche, dadjonction et de suppression. A chaque lment, on associe une clsimple (critre unique) : recherche associative. Les bases de donnes traitent des critres plus gnraux et descls multiples.
Signature
sorte ensembleutilise lment, clefoprations
cl : lmentclefvide : ensembleajouter : lment x ensemble ensemblesupprimer : clef x ensemble ensemble_ _ : clef x ensemble boolen
Remarques :- Si plusieurs lments ont la mme cl, la recherche fournit une solution quelconque parmi les
possibilits ; sil ny a pas de solutions (chec), on fournit une valeur spciale.- La suppression commence par une recherche, en cas dchec de la recherche, la suppression laisse
lensemble inchang.
-
En gnral, et sil ny a pas ambigut, on confond llment et sa cl.La complexit fondamentale est celle de la comparaison entre deux cls. Si lensemble des cls est muni dunerelation dordre, on peut les trieravec des algorithmes efficaces. On distingue les mthodes de recherchesquentielle, les mthodes de recherche dichotomique, de hachage, et les mthodes arborescentes.
ii. Arbres binaires de rechercheOn reprsente un ensemble ordonn n lments par un arbre binaire n nuds (les nuds sont les lments), etcest la comparaison avec la valeur dun nud qui va orienter la suite de la recherche.Un arbre binaire de recherche est un arbre binaire tel que pour tout nud x , les nuds de son sous arbre-gauchesils en existent ont des valeurs infrieures ou gales celle de x, et les nuds de son sous arbre-droit des valeursstrictement suprieures ;
6.
ce que lon traduit par g(A) racine(A) < d(A).
On obtient toujours lensemble ordonn par un parcours rcursif gauche symtrique. Il ny a pas unicit de lareprsentation.
x
x >x
7/31/2019 L'Algorithmique
51/120
A.BENHARI 51
iii. Recherche dun lment
rechercher : valeurarbreboolen
On compare llment la valeur de la racine :
- galit succsx = r rechercher (x , < r , g , d > ) = vraie7.- si le sous-arbre slectionn est vide, llment est absent checrechercher ( x , ) = faux
- si la valeur est plus petite, on recommence rcurcivement dans le sous-arbre gauche ; etrciproquement si la valeur est plus grande dans le sous-arbre droit
x < r rechercher (x , < r , g , d > ) = rechercher (x , g )
x > r
rechercher (x , < r , g , d > ) = rechercher (x , d )
Complexit: La complexit au pire est en O ( hauteur de larbre ).
iv. Adjonction dun lment aux feuilles
ajout_feuille : arbre valeurarbre
Ladjonction aux feuilles dun lment se ralise en deux tapes :- tape de recherche pour savoir o insrer le nouvel lment ;- adjonction elle-mme.
On compare la valeur de llment ajouter celle de la racine pour dterminer si on lajoute sur le sous-arbregauche ou droit.
x r ajout_feuille ( < r , g , d > , x ) = < r , ajout_feuille ( g , x ) , d >x > r ajout_feuille ( < r , g , d > , x ) = < r , g , ajout_feuille ( d , x ) >
Le dernier appel rcursif se fait sur un arbre vide ; on cre un nouveau nud cette place pour le nouvel lmentqui devient donc une feuille.
ajout_feuille ( , x ) = < x , , >
8. On peut construire un arbre binaire de recherche par adjonctions successives aux feuilles.9.On donne lalgorithme dadjonction aux feuilles (rcursif) en LDA :
Fonction adjonction_feuille (A : arbre , e : entier ) : arbredbutsi est_vide(A)
alors retourner < e , , >
sinon si ( e racine(A) )retourner < racine(A) , ajout_feuille( g(A) , e ) , d(A) >
sinonretourner < racine(A) ,g(A) , ajout_feuille( d(A) , e ) >
fin10.11. On donne galement une version itrative de lalgorithme ( voire td).12.13. La complexitdun adjonction est O ( hauteur de larbre ).
7/31/2019 L'Algorithmique
52/120
A.BENHARI 52
v. Adjonction dun lment la racineSoit A un arbre binaire de recherche, on veut ajouterx la racine.
On procde en deux tapes :- on coupe A en deux arbres binaires de recherche G et D contenant respectivement tous leslments x et tous ceux > x.
- construire larbre < x , G , D > voire cours
vi. Suppression dun lment
supprimer : arbre valeurarbre
- recherche de llment supprimer-
suppression qui dpend de la place de llment, selon que le nud est sans fils, avec un seul fils,ou avec deux fils. La suppression dun nud sans fils est immdiate. Pour la suppression un nud avec unseul fils, on remplace ce nud par son fils. Pour un nud, avec deux fils, on dispose de deux solutions : soiton remplace le nud supprimer par le plus grand lment de son sous-arbre gauche, soit on le remplacepar le plus petit lment de son sous-arbre droit.
On donne lalgorithme de suppression en LDA :14.
Fonction suppression ( A : arbre , e : entier ) : arbredbut% recherche de llment supprimer %si est_vide(A)
alors retourner erreur
si ( e < racine(A) )alors retourner < racine(A), suppression( g(A) , e ) , d(A) )sinon si ( e > racine(A) )
retourner < racine(A), g(A) , suppression( d(A) , e ) )% suppression %sinon
si est_feuille(A)
alors retournersinon si est_vide(g(A))
retourner d(A)sinon si est_vide(d(A))
retourner g(A)sinon
% on ajoute llment le plus droite du sous-arbre gauche %retourner < max_noeud(g(A)) , retire_max(g(A)), d(A) >
fin
Fonction max_noeud ( A : arbre ) : entier% retourne le plus grand lment de larbre A, le plus droite %dbutsi est_vide(d(A))
alors retourner racine(A)sinon
retourner max(d(A))fin
Fonction retire_max ( A : arbre ) : arbre% retourne larbre priv de son plus grand lment %
7/31/2019 L'Algorithmique
53/120
A.BENHARI 53
dbutsi est_vide(d(A))
alors retourner g(A)sinon
retourner < racine(A) , g(A) , retire_ max(d(A)) >fin
La complexit est O ( hauteur de larbre ).
Conclusion, Tri par arbre binaire de rechercheToutes les oprations ont une complexit dpendant de la hauteur de larbre binaire de recherche. Elle varieentre O (log n ) pour des arbres quilibrs et O ( n ) pour des arbres dgnrs.
Par consquent, le tri par arbre binaire de recherche, obtenu par un parcours symtrique de larbre, a unecomplexit en comparaison dans le pire des cas variant entre O ( n log n ) et O ( n ).
d. Problme du tri
i. IntroductionLe problme du tri est quasiment le plus important en informatique.
Spcification du tri : La donne est une liste n lments ; chaque lment est associe une cl dont la valeurappartient un ensemble totalement ordonn ; le rsultat est une liste dont les lments sont une permutation dela liste dorigine, et telle que les valeurs des cls soient croissantes quand on parcourt la liste squentiellement.
Un tri est stable, sil conserve lordre de dpart des lments dont les cls sont gales.
En fonction de la capacit mmoire, on distingue le tri interne (tout en mmoire centrale) et le tri externe(mmoire centrale + disque). Pour le tri interne, on a des algorithmes qui travaillent sur place, cest--dire sur laliste de dpart et des algorithmes qui manipulent physiquement une copie. On a des algorithmes diffrents et plus
compliqus quand ils se font sur place.On compte le nombre de variables auxiliaires pour valuer la complexit en mmoire. Le tri interne, sur place,avec un nombre constant de variables auxiliaires possde une bonne complexit en espace. On compte le nombrede comparaisons entre cls et de transferts dlments pour valuer la complexit en temps.
On distingue les mthodes simples et les mthodes plus complexes.
ii. Tri par arbre binaire de rechercheCest une mthode plus complexe, qui consiste crer larbre binaire de recherche, puis faire un parcourssymtrique, pour obtenir la liste trie.
voire partie sur les arbres binaires de recherche
e. Quicksort
i. PrincipeOn choisit une des cls de la liste (par exemple, celle du premier lment), et on lutilise comme pivot. Onconstruit sur place une sous-liste dont les cls sont infrieures ou gales au pivot et une sous-liste dont les clssont strictement suprieurs au pivot.
p > pivotpivot
7/31/2019 L'Algorithmique
54/120
A.BENHARI 54
Le pivotp a alors sa place dfinitive. Et on recommence rcursivement sur chacune des deux sous-listes. A lafin, la liste est trie par ordre croissant. Remarquons que le choix du pivot est dlicat ; de lui dpendlquilibrage des deux sous listes.
On suppose donne une procdure
Placer (e/s t : tableau de 1 n entiers , e/ i : entier , e/ j : entier , /s k : entier)
qui effectue le traitement de tentre les indices i etj en fonction du pivot t[i], et qui rend comme rsultat lindicek o le pivot a t plac et le tableau tragenc.
La procdure gnrique du quicksortscrit :
Procdure Quicksort (e/s t : tableau de 1 n entiers , e/ i : entier , e/ j : entier)utilise localement k : entierdbutsi i < jalors dbutPlacer (t , i , j , k)
Quicksort (t , i , k - 1)Quicksort (t , k + 1 , j)fin
fin
Le tri de la liste complte est obtenu par Quicksort (t , 1 , n).
La procdure Placer : La partition et le placement du pivot ne ncessite quun parcours.
On utilise deux compteurs l et kqui partent des extrmits du sous-tableau, et qui vont lun vers lautre :- l part de i+1 et avance tant que lon rencontre un lment a.- kpart dej et recule tant que lon rencontre un lment > a.
On change les deux lments et on recommence la progression jusqu ce que les deux compteurs se croisent :la place dfinitive du pivot est en k, et on y place le pivot a par change avec un lment a.
Si on utilise la procdure Placersur un sous-tableau qui nest pas la fin de ( x =t[j+1] existe ), alors
llmentx est un pivot plac antrieurement. Donc, on a [ ] ][,, stxjis . Par consquent, cet lmentxva arrter la progression du compteur l. Pour utiliser cette proprit (effet de bord) lors de tous les appels, on
rajoute un terme en t[n+1] qui contiendra un lment plus grand que tous les autres.15. Procdure Placer (e/s t : tableau de 1 n entiers , e/ i : entier , e/ j : entier , /s k : entier)16. utilise localement l : entier17. dbut18. l i +119. k j20. % boucle : tant que les compteurs ne se croisent pas %
21. tant que l k faire22. dbut23. tant que t[k] > t[i] faire k--
24. tant que t[l] t[i] faire l++
25. % on a t[k] t[i] et t[l] > t[i] %
26. si l < k alors dbut27. changer t[l] et t[k]28. l++
a > > > > x
i l k j j+
7/31/2019 L'Algorithmique
55/120
A.BENHARI 55
29. k--30. fin31.32. fin33. % on met le pivot sa place dfinitive %34. changer t[i] et t[k]
35. finii. Complexit
36. Complexit de Placer : Considrons un sous-vecteur p lments, on la pivot aux p - 1 autres lments. Oneffectue en toutp + 1 comparaisons.37.38. Complexit du Quicksort, au pire: Le graphe des appels du Quicksort est un arbre binaire. La complexit aupire en nombre de comparaisons est obtenu pour tdj tri est en prenant chaque fois le 1er lment commepivot. Le graphe des appels sera dgnr (peigne) et va induire une complexit au pire en O ( n ).39.40. Complexit du Quicksort, en moyenne : On suppose que les n nombres sont distincts, et que le pivot vaoccuper la pime place de la liste trier. On suppose que toutes les places sont quiprobables ; on a la probabilit
1/ndavoir le pivot la place
pet donc davoir deux sous-listes de taille
p - 1et
n - p. On dmontre ( voire
cours + td ) que la complexit en moyenne est en O (2n log n).
iii. Taille de la pile de rcursivit41. Dans la procdure Quicksort, le 2me appel est terminal, ce qui veut dire quon peut le supprimer, et doncviter des empilements. Comme un seul appel va tre conserv, on leffectuera systmatiquement sur la pluspetite des deux sous-listes. La taille de rcursion sera en O (log2 n), car on divisera par 2 la taille de la listedappel.42.Procdure Quicksort (e/s t : tableau de 1 n+1 entiers , e/ i : entier , e/ j : entier)utilise localement k : entierdbuttant que i < j
alors dbutPlacer (t , i , j , k)% on choisit le plus petit %
si (j - k) > (k - i)alors dbut
Quicksort (t , i , k - 1)i k + 1fin
sinon dbutQuicksort (t , k + 1 , j)j k - 1fin
43. fin
fin
f. Heapsort3Cest un tri par slection des minimums successifs bas sur une structure de tas. On va obtenir un tri O (n log n)comparaisons au pire, sans mmoire auxiliaire.
3 Tri par tas
7/31/2019 L'Algorithmique
56/120
A.BENHARI 56
i. Arbres partiellement ordonnsUn tri par slection ncessite de savoir localiser et rcuprer efficacement ( en O (1), si possible ) le minimumparmi les lments non encore placs.On considre le cas particulier du type abstrait ensemble o les seules oprations sont :
- laccs un lment minimum- la suppression du minimum- ladjonction dun nouvel lment
On reprsente cette ensemble par un arbre binaire parfait partiellement ordonn.44.Un arbre partiellement ordonnest un arbre tiquet par les valeurs dun ensemble muni dun ordre total, telque la valeur associe tout nud soit aux valeurs associes aux fils. La racine contient toujours un lmentminimum, accs en O (1).45.1) Adjonction dun lment xOn ajoute dabordx comme une feuille en conservant la structure darbre binaire parfait. Puis, on reconstruitlordre partiel :
y x
tant que ( y racine ) et ( y < pre(y) ) fairechanger y et pre(y)46.2) Suppression du minUne fois la racine enleve, on place la dernire feuille la racine, pour conserver la structure darbre binaireparfait. Puis, on reconstruit lordre partiel :
y racine
tant que ( y nest pas une feuille ) et ( y nest pas aux deux fils ) fairechanger y et son fils de valeur minimum
47.48.La complexiten nombre de comparaisons de ladjonction et de la suppression du minimum est au pire enO (hauteur de larbre). Par ailleurs, la hauteurdun arbre binaire parfait ayant n nuds est de n2log .
On utilise la reprsentation en tableau (ordre hirarchique) des arbres binaires parfaits. ( voire partie sur lesstructures arborescentes) Le tableau forme le tas.
On donne les algorithmes crits en LDA des procdure dadjonction et de suppression du minimum :
Procdure ajouter ( e/s t : tableau de 1 N entiers , e/s n : entier , e/ x : entier )% ajoute llment x t ayant n lments au moment de lappel %utilise localement i : entierdbutsi n < Nalors dbutn++t[n] xi ntant que ( i > 1 ) et ( t[i] < t[i div 2] ) faire
dbutchanger t[i] et t[i div 2]i i div 2fin
finsinon crire dbordement du tas
fin
Procdure suppress_min ( e/s t : tableau de 1 N entiers , e/s n : entier , /s min : entier )% fournit dans min le minimum pour t ayant n > 0 lments %utilise localement i, j : entiers
7/31/2019 L'Algorithmique
57/120
A.BENHARI 57
dbutmin t[1]
t[1] t[n]n--i 1% tant que lon est pas sur une feuille %
tant que ( i n div 2) fairedbutsi ( n = 2i ) ou ( t[2i] < t[2i+1])
alors j 2isinon j 2i +1
si ( t[i] > t[j])alors dbut
changer t[i] et t[j]i jfinsinon exit
finfin
ii. Tri par tasPrincipe :
- Construire un tas contenant les n lments par adjonction successives ; en O (n log n).- Tant que le tas nest pas vide, faire supprimer le minimum du tas avec rorganisation, mettre ce
minimum sa place dfinitive ; en O (n log n).
La complexit en comparaison est au pire en O(n log n).
On utilise un seul tableau pour le tas et les valeurs des minimums successifs. Le minimum rcuprer esttoujours dans t[1]. On mettra les minimums successifs la droite du tableau, de la droite vers la gauche. A la fin,
on obtient lensemble dans lordre dcroissant.
49.50.51.
52.53. Procdure heapsort (e/s t : tableau de 1 n entiers)54. utilise localement p, min : entiers55. dbut56. % construction du tas %57. p 058. tant que p < n faire
59. ajouter( t , p , t[p+1] )60. % tri %61. tant que p > 1 faire62. suppress_min ( t , p , min )t[p+1] min63. fin
64.65.Remarque : lincrmentation et la dcrmentation de p est gnr par les procdures en e/s.
tas traiter minimums bien plasmin t[n]
7/31/2019 L'Algorithmique
58/120
A.BENHARI 58
XVI. Algorithmes numriques
a. Gnralitsi.Normes et rayon spectral
Dfinition norme vectorielle :
+RRxxn,a vrifiant :
- 00et0 == xxx - xx .. = - yxyx ++
Exemple de norme vectorielle :
- Norme 1 : =i
ixX 1
- Norme 2 : XXxXi
i ,2
2==
- Norme : ii
xSupX =
Proposition : En dimension finie, toutes ces normes sont quivalentes ; en pratique, on choisit celle qui nousarrange.
Dfinition norme matricielle :
C'est une norme dans l'espace vectorielleMn(R), avec en plus BABA . .
ii.Norme matricielle induite :A partir d'une norme vectorielle, on construit une norme matricielle induite :
( )AXSupX
AXSupA
XouXX 110 ==
= .
Notons de plus que1=I
.
En particulier pour la norme 2, on a la relation : ( )AAI t=2
avec le rayon spectral.
Proprits :
- XAAX . et BAAB . - Cas de A symtrique : ( ) i
iAA max
2==
- Dans le cas gnral, max2 =A , maximum des valeurs singulires ii = avec i les valeurspropres (positives) de la matrice symtrique AAt . (?)
- Soit A une matrice carr quelconque n x n. Pour toutes normes de matrice induite, on a ( ) AA .
7/31/2019 L'Algorithmique
59/120
A.BENHARI 59
iii.Conditionnement dune matrice inversible :Considrons un systme linaire AX=b. L'exprience de Wilson met un vidence une instabilit des calculs danscertains cas. Si l'on modifie sensiblement les paramtres de la matrice A, ou du second membre b, on peuttrouver des rsultats compltement diffrends !
- ( ) 1. = AAACond - ( ) ( )ACondACond = - ( ) 1ACond avec ( ) 1=IdCond - Soit une matrice Q orthogonale :
22XQX = et ( ) 1=QCond
- Les bons conditionnements sont les petits conditionnements (au mieux 1 pour les matrices orthogonales).- Pour A symtrique : ( )
min
max2
=ACond ; dans la cas gnral : ( )
min
max2
=ACond
Thormes sur le conditionnement :
Thorme : ( ) bbXXABAX +=+= et . On a ( )b
bACond
X
X
.
Thorme : ( )( ) bXXAABAX =++= et . On a ( )A
AACond
XX
X
+
.
Remarque : Le conditionnement traduit l'amplification des grandeurs relatives.
iv.Inverse numrique dune matrice :
Soit A une matrice inversible et A-1 son inverse thorique.M est un inverse de A du point de vue numrique si :
-1
1
A
AMest petit, ce qui correspond M=A-1
-A
AM 1
est petit, ce qui correspond A=M-1
- IdMAIdAM et sont petits, ce qui correspond 0Id-MAet0 ==IdAM On s'adapte au calcul que l'on veut faire. Notons que l'on rsout rarement un systme linaire en calculantl'inverse bAX 1=
7/31/2019 L'Algorithmique
60/120
A.BENHARI 60
b. Systmes linaires Ax=b : mthodesdirectes
i. Formules de CrammerCette mthode ncessite le calcul d'un dterminant, dont la complexit est en n!. La complxit de la formule deCramer est en n 2 n!. Par consquent, cette mthode n'est pas utilisable en informatique.
ii. Mthode du pivot de Gauss
la kme tape : pour ,ki > kLigneiLigne,
,
kk
ki
a
a. On pose
kk
ki
kia
al
,
,, = .
L'algorithme une complexit en3
3n.
Le problme des coefficients diagonaux nuls : il faut permuter les lignes lorsque apparat un zro sur ladiagonale.
Stratgie du pivot maximum partiel :
On permute la kme ligne et la ime ligne avec i tel que klkl
ki aSupa ,,
= . Pour des raisons de stabilit
numrique, on divise par le terme de la colonne k, qui a la plus grande valeur absolue.
Stratgie du pivot avec seuil :
On effectue une permutation uniquement des
7/31/2019 L'Algorithmique
61/120
A.BENHARI 61
En rsum, on a leAx = et MAUeMxU l == avec.. une matrice triangulaire suprieure.On veut traiter tous les seconds membres en une seule passe ; pour cela on considre la matrice n x 2n suivante :
qui aprs calculs donne
.
On donne ici un exemple dcriture en langage de description algorithmique :
- Procdure pivot ( k , l : entiers ; OK : boolens )- Dbut- Max := ( )kkA , ;- l := k ;- Pour i := k+1 n faire- Si max < ( )kiA , - Alors- Dbut- Max := ( )kiA , ;- l := i ;- Fin ;- OK := Max > ;- Fin ;- Procdure permuter ( k , l : entiers )- Dbut- Si lk - Alors- Pour j := k 2n faire- Dbut- c := ( )jkA , ;- ( )jkA , : = ( )jlA , ;- ( )jlA , := c ;- Fin ;- Fin ;
On donne maintenant le programme principal, ralisant le calcul de linverse.
- Dbut- Initialiser A et lire ;-- /* triangularisation */- Pour k := 1 n faire- Dbut- Pivot (k , l , OK ) ;- Si non(OK)- Alors- Dbut- Ecrire matrice non inversible ;- Exit echec ;- Fin ;- Permuter ( k , l ) ;- Pour j := k+1 2n faire- ( ) ( ) ( )kkAjkAjkA ,/,:, = ;
7/31/2019 L'Algorithmique
62/120
A.BENHARI 62
- Pour i := k+1 n faire- Pour j := k+1 2n faire- ( ) ( ) ( ) ( )jkAkiAkiAjiA ,*,,:, = ;
Fin ;-- /* n remontes */- Pour k := 1 n faire- Pour i := n-1 1 par pas de -1 faire- Dbut- s := 0 ;- Pour j := i+1 n faire- ( ) ( )knjAjiAss ++= ,*,: ;- ( ) ( ) skniAkniA +=+ ,:, ;- Fin ;- Fin ;
Remarques :- Choix du pivot : pour des raisons de stabilit numrique, on divise toujours par le terme de la colonne k qui
a la plus grande valeur absolue (Cf. Pivot partiel maximum).- Recherche du pivot : si la plus grande valeur absolue est infrieure la prcision machine , alors on arrte
en disant que la matrice nest pas inversible prs (test dinversibilit informatique). Cependant, elle peuttrs bien tre inversible du point de vue mathmatique !
c. Factorisation A=LUSoit A une matrice rgulire, de dimension n.
Lien avec la mthode de Gauss
On applique la mthode de Gauss sans pivoter. U est une matrice triangulaire suprieure relle, telle que
UAJnk
k == ,1
.
On donne la dfinition des matrices
= +
1
1
1
1
,
,1
kn
kkkJ
OM
aveckk
kl
kla
a
,
,, = pour kl > .
On dmontre que linverse des Jk existe et que =
=
nk
kJL,1
1est une matrice triangulaire infrieure, avec des 1
sur la diagonale. En fait, on a
= +
1
1
1
1
,
,11
kn
kkkJ
OM
.
Calcul algorithmique des coefficients de L et de U
On procde par identification en utilisant les proprits de L (triangulaire infrieure avec une diagonale de 1) etde U (triangulaire suprieure). On cherche un algorithme par ligne donnant les
njuijl jiji 1pourleset11pour ,, .
-Pour i := 1 n faire- Dbut
7/31/2019 L'Algorithmique
63/120
A.BENHARI 63
- Pour j := 1 i-1 faire- jj
j
k
jkkijiji aulal ,
1
1,,,, .:
=
=
;
- /* avec 1, =iil */-
- Pour j := i n faire-
=
=1
1,,,, .:
i
k
jkkijiji ulau ;
- Fin ;Remarque : L et U crasent la matrice A.
Cas particulier des matrices structure bande
OO
OO
OOO
OOO
OOO
OO
OO
- La largeur de la bande est W = P+Q+1- On ne stocke dans une structure de donne approprie que la bande, soit un O(W.N), ce qui est intressant si
W
7/31/2019 L'Algorithmique
64/120
A.BENHARI 64
Matrice de permutation lmentaire i j :
jligne
iligne
1
1
01
1
1
10
1
1
,
=
O
O
O
jiP
Le produit PA permute les lignes i et j de la matrice A. Le produit AP permute les colonnes i et j de la matrice A.
( complter avec le cours : obtention de la factorisation et utilisation de la factorisation )
7/31/2019 L'Algorithmique
65/120
A.BENHARI 65
e. Factorisation A=BBt: CholeskyCette factorisation s'applique pour des matrices A symtriques et positives.Thorme : Soit A une matrice SDP de dimension n. Il existe une et une seule matrice B triangulaire infrieure,telle que A=BBt.
f. Factorisation A=LDLt: CroutThorme : Soit A une matrice SDP de dimension n. Il existe une et une seule matrice L triangulaire infrieure etD diagonale positive, telles que A=LDLt.Remarque : Crout a le mme comportement numrique que Cholesky. Cependant, il est plus utilis cargnralisable au cas complexe.
Soit A une matrice symtrique dfinie positive (quelconque ?).L est une matrice triangulaire infrieure de dimension n dont la diagonale se compose de 1.D est une matrice diagonale de dimension n.
L est en fait la matrice B pour laquelle les termes d'une colonne sont diviss par les coefficients bii. D est lamatrice dont les coefficients diagonaux sont les bii.
i.Algorithme par ligne pour lobtention de lafactorisation
On crit
=
1
0
001
,jil
L O et
=
nd
d
D O
1
.
Il s'agit de calculer les li,j et les di. On a jij
j
k
jkkikji dlldla +=
=
1
0
, .
On tablit un algorithme par ligne : Pour la 1re ligne, on crit 1,11 ad = . Supposons maintenant le calcul
effectu jusqu' la ligne i-1 ; le calcul de la ligne i est donn par
( )
j
j
kjkkik
jijid
ldl
al
==
1
1,, pour 1 ij et
par ( )
=
=1
1
2,
j
k
kikiii dlad . Ainsi une CNS pour cette factorisation est que les di ne soient pas nuls.
On donne lalgorithme correspondant :
-Pour i de 1 n faire- Dbut- Pour j de 1 i-1 faire- ( ) j
j
k
jkkikjiji dldlal /:1
1,,
=
= ;
- /* 1:, =iil */- ( )
=
=1
1
2,:
j
k
kikiii dlad ;
- Fin ;
7/31/2019 L'Algorithmique
66/120
A.BENHARI 66
Remarque : L et D crase la partie triangulaire infrieure de A.
On veut maintenant apporter une amlioration cet algorithme en diminuant les nombres de calcul ; on
conomise les produits kki dl ., , que lon stocke pour un i fix dans le vecteur C[k].
On donne lalgorithme modifi :
-Pour i de 1 n faire- Dbut- Pour j de 1 i-1 faire- Dbut- C[ j] :=
=
1
1, ][.
j
k
jkji kCla ;
-j
jid
jCl
][:, = ;
- Fin ;-
=
=1
1, ][.:
j
k
ikiii kClad ;
- Fin ;
ii.Algorithme par colonne pour lobtention de lafactorisation
Principe : On construit L et D, en procdant par dcomposition successives. On ralise le dcoupage suivant :
==1
1
1
1
11
1
Bd
v
dv
d
AA
t
, avec v1 un vecteur colonne de dimension n-1, et B1 une matrice carr de dim
n-1.
On pose
=
11
1
1
1
nIdv
O
L ,
=
1
1
2
BO
Od
A , avec1
1111
.
d
vvBB
t
= .
Ainsi, on a :t
LALAA 1211 == . Puis, en ritrant n-1 fois, il vient : ( ){
( )43421
L43421
Lt
L
t
n
D
n
L
n LLALLAA 11111 == .
7/31/2019 L'Algorithmique
67/120
A.BENHARI 67
Le produit des matrices
=
1
1
1
k
k
k
dv
LO
O
donnent la matrice finale
=
1
1
1
2
2
1
1 L
O
dv
dv
L .
Ce qui correspond en effet une factorisation de Crout, car la matrice ( )idD = est bien diagonale et la matriceL est bien triangulaire infrieure, par construction.
On donne lalgorithme de calcul de L et de D par colonne, qui procde en crasant la partie triangulaireinfrieure de A, (les 1 de la diagonale de L ne sont pas stocks, car on prfre y stocker D) :
-Dbut-Pour k de 1 n-1 faire- Pour j de k+1 n faire- Dbut- kkkj aad ,,:= ;- Pour i de j n faire daaa kijiji .: ,,, = ;- da kj =:, ;- Fin ;-Fin ;
La structure donne dimplmentation serait un vecteur une dimension stockant conscutivement les colonnesde la partie triangulaire infrieure de A.
Remarque fondamentale : jia , est modifi par kia , et kja , .
iii.Etude du remplissage lors de la factorisation dematrices SDP creuses
Considrons une matrice A symtrique creuse. On utilise une structure de donne type profil, il est important desavoir o se trouvent les termes priori non nuls de L.
Une matrice est dite creuse si elle contient un grand nombre de termes nuls. Plus prcisment, on considreque la matrice est creuse partir du moment, o son pourcentage de termes nuls permet un gain informatique parrapport un traitement classique qui la considrerait pleine.
Dfinitions :
- Un terme de remplissage apparat en (i,j) au cours de la factorisation si et seulement si 0, =jia et0, jil . On reformule le problme comme la conservation du creux initial de la matrice.
- li,j est logiquement non nul si 0quetel11,ou0 ,,, kjkiji lljkka . Cest dire, la kmeitration ( )11 nk un terme jia , de la matrice A qui est nul, devient non nul ssi
7/31/2019 L'Algorithmique
68/120
A.BENHARI 68
0et0 ,, kikj aa avec 1 jk . Preuve (algorithme par colonne):{ {
kk
kjki
jijia
aaaa
,
0
,,
0
,
0
,
.:
48476
=
= .
- Les li,j logiquement non nuls