Académique Documents
Professionnel Documents
Culture Documents
Enseignant : Dr. Khemaies GHALI (ghali.khemaies@gmail.com) 6. Notion de coût d'un algorithme et classes de
complexité
Année universitaire 2019/2020
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 2/110
1. résultats à obtenir,
D’ALGORITHME 3. les moyens pour obtenir les résultats recherchés à partir des
données.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 3/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 4/110
Définition et Propriétés d’un
algorithme (2/2) Structure d’un Algorithme (1/2)
ALGORITHME nom_Algo
Tout algorithme possède: entête
CONSTANTE nom_Constante = Valeur de la constante
2. une partie déclarative (optionnelle), {Cette partie est utile lorsqu’il y a des
types définis par l’utilisateur}
3. et un corps regroupant l’ensemble des actions à exécuter. VARIABLE nom_Var1 : type1
(optionnelle)
nom_Var2, ..., nom_Varp : type2
Le corps de chaque algorithme comporte les trois parties suivantes :
{type1 ou type2 peuvent êtres des
1. La préparation des données nécessaires à la résolution du types élémentaires ou définis}
problème et la vérification de leur cohérence si nécessaire.
2. Le traitement : définir les actions à effectuer ainsi que leur PROCEDURE ... FONCTION ...
enchaînement pour résoudre le problème. {Cette partie sera traitée au chapitre 4}
Opérations d’affectation
1. La déclaration des objets (ou entités) manipulés :
Opérations d’écriture
Les objets élémentaires,
Structures Conditionnelles
Les objets structurés définis par l’utilisateur.
Appels à des modules REMARQUE : Les actions ou les instructions élémentaires (prédéfinis
(procédures et fonctions) par les langages de programmation) ne doivent pas être déclarées.
FIN
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 7/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 8/110
Algorithme : Les Objets Objets Elémentaires(1/2)
Les entités ou encore les objets manipulés peuvent être : Un identificateur est un nom désignant l’objet et qui doit être
unique dans l’algorithme et invariant et ne doit :
Simples (objets élémentaires)
Complexes (objets structurés) construits à partir des objets être formé que de lettres et/ou de chiffres non séparée par un
élémentaires et définis par l’utilisateur. espace mais pouvant être attachées par « _ » et commençant
impérativement par une lettre,
Exemple : les intervalles, les enregistrements, les tableaux,
les ensembles, les listes, etc. (à voir plus tard) pas comporter de caractères spéciaux (+,*,/,(,à,…),
Tout objet élémentaire doit être bien spécifié et caractérisé par : pas être un mot réservé (Algorithme, début, fin, SI,…).
Objets Elémentaires(2/2)
Le type simple ou scalaire représente le type prédéfini par
la majorité des langages de programmation sur machine et
qui regroupe :
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 11/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 12/110
Opérations Elémentaires: Affectation (1/2) Opérations Elémentaires: Affectation (2/2)
Une variable ne peut avoir qu’une seule valeur à un instant
On rappelle qu’un algorithme exécute un ordonnancement fini donné et qui doit être compatible avec son type.
d’actions sur des données concrètes pour obtenir un ou
La valeur précédente (si elle existe) est écrasée par la
plusieurs résultats.
nouvelle valeur.
Parmi ces opérations, on trouve les opérations élémentaires La valeur attribuée à un objet peut être:
d’affectation, de lecture et d’écriture.
une valeur particulière.
L’opération élémentaire d’affectation attribue une valeur à une
Exemple : A ← 5 X ← ‘b’
variable, qu’il s’agisse d’une première valeur ou d’une valeur
calculée au cours de l’exécution de l’algorithme. une valeur contenue dans une autre variable.
Elle fait appel à la notation « ← ». L’opération s’écrit comme Exemple : A ← 5 B←2 A←B
suit : une valeur numérique calculée par l’évaluation d’une
expression (pouvant être une expression de cumul).
Identificateur_var ← valeur
Le résultat d’une fonction.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 13/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 14/110
L’instruction de base permettant à la machine de récupérer (ou Le format général de l’opération élémentaire de sortie ou
lire) les valeurs introduites au clavier est l’opération de lecture d’affichage est :
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 15/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 16/110
Exemple (1/2) Exemple (2/2): Erreurs à ne pas faire
ALGORITHME Circ_Surface_Cercle
ALGORITHME Circ_Surface_Cercle
CONSTANTE Pi = 3.14
CONSTANTE Pi=3.14
VARIABLE R, Circ_Cercle, Surf_Cercle :réel
VARIABLE R, Circ_Cercle, Surf_Cercle :réel
DEBUT
DEBUT
Ecrire(‘donner le rayon du cercle’, R)
Ecrire(‘donner le rayon du cercle R:’)
Lire(R)
Lire(R)
Surf_Cercle ← R * R * Pi
Surf_Cercle ← R * R * Pi {ou R^2 * Pi}
Circ_Cercle = 2*Pi*R
Circ_Cercle ← 2*Pi*R
Ecrire(‘la circonférence et la surface du
Ecrire(‘la circonférence et la surface du cercle de rayon R sont respectivement égales
cercle de rayon’, R, ‘sont respectivement à ‘, Circ_Cercle, ‘, ‘, Surf_Cercle)
égales à ‘, Circ_Cercle, ‘, ‘, Surf_Cercle)
Lire(Surf_Cercle)
FIN
FIN
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 17/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 18/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 19/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 20/110
Définition et Structure (1/2)
Lorsque l’exécution d’un traitement est conditionné c.-à-d.
s’exécute selon l’évaluation d’une condition,
les instructions séquentielles sont inadéquates => utiliser des
structures conditionnelles.
3ème Partie : La structure conditionnelle exprime la possibilité de choisir entre
deux alternatives selon la valeur de l’évaluation d’une condition.
Dans ce cas, la condition doit être booléenne donc formulée de
STRUCTURES telle sorte à n’offrir que deux réponses :
CONDITIONNELLES oui, si la condition est remplie (vérifiée),
non, si la condition n’est pas remplie.
non Test oui
?
Traitement1 Traitement2
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 21/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 22/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 25/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 26/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 31/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 32/110
Équivalence en structures
L’Instruction (cas4) séquentielles du cas 4
SI condition1 et condition2
Cas4: Structure conditionnelle imbriquée ou emboîtée.
ALORS Instruction_c1_c2 N.B: Dans ce cas, la version
SI condition1 ALORS FINSI imbriquée est meilleure car si
SI condition2 ALORS SI condition1 et non(condition2)
Instruction_c1_c2 les conditions 1 et 2 sont
ALORS Instruction_c1_non(c2)
SINON vérifiées, la machine teste les
FINSI
Instruction_c1_non(c2) 3 autres alternatives
FINSI SI non(condition1) et condition3
inutilement.
SINON ALORS Instruction_non(c1)_c3
SI condition3 ALORS FINSI Conclusion : Lorsque l’ensemble
Instruction_non(c1)_c3 SI non(condition1) et d’intersection entre les
SINON non(condition3) différentes conditions est {Ø},
Instruction_non(c1)_non(c3) ALORS
FINSI les structures conditionnelles
Instruction_non(c1)_non(c3)
FINSI séquentielles doivent être
FINSI
utilisées.
1ère Année Académie Militaire –
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 33/110 A.U. 2019/2020 Informatique – Chapitre 1 34/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 35/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 36/110
Structure conditionnelle en
Exemple 2 : Résolution de Ax+B=0
1. ALGORITHME sol_prem_degre
Python (1/2)
2. VARIABLE A,B,x : réel Drapeau : entier
1. if condition:
3. DEBUT
4. Ecrire("Donner les coefficients de l’équation: ") 2. bloc_instruction1
5. Lire(A,B) 3. else:
6. SI A=0 ALORS 4. bloc_instruction2
7. SI B=0 ALORS drapeau ← 0
8. SINON drapeau ← -1 FINSI
9. SINON DEBUT x ← -B/A La condition est une expression booléenne composée d'opérateurs
10. drapeau ← 1 relationnels, d'opérateurs logiques et des verbes logiques ((True,
11. FIN False).
12. FINSI
13. SI drapeau = 1 ALORS L'évaluation de la condition doit donner True ou False, autrement une
14. Ecrire("la solution de l’équation", A,"* x +", B,
15. "=0 est x=", x) erreur se produit.
16. SINON
17. SI drapeau = -1 ALORS Ecrire("pas de solution") La clause else s'exécute lorsque l'évaluation de toutes les
18. SINON Ecrire("infinité des solutions") conditions précédentes donne False. Cette clause est optionnelle.
19. FINSI
20.
21.FIN
FINSI
ATTENTION : Python est sensible à la casse.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 37/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 38/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 39/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 40/110
Indentation signifiante (2/2) Exemple (1/3)
1. #cette ligne a un niveau d'indentation de 0 Le programme suivant exécute trois instructions différentes
suivant la valeur de x % 3:
2. #cette ligne a un niveau d'indentation de 1
3. #cette ligne a un niveau d'indentation de 2 1. #ici, les trois instructions
1. if x % 3 == 0 :
2. #sont au même niveau.
2. x = x + 1
Au sein d’un bloc, le niveau d’indentation doit être le même. 3. else: 3. if x % 3 == 0 :
Le code suivant est valide et la ligne y = y // x ne s’exécute que si x 4. if x % 3 == 1 : 4. x = x + 1
est non nul : 5. elif x % 3 == 1 :
5. x = x – 1
1. if x != 0: 6. else: 6. x = x – 1
2. y = 3 7. x = 2 * x 7. else:
3. y = y // x # division entière
8. x = 2 * x
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 43/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 44/110
Problématique : Exemple1
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 45/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 46/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 47/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 48/110
Définitions (1/3) Définitions (2/3)
En général, lorsque plusieurs opérations se répètent: Les boucles permettent ainsi d’exécuter une séquence
nous représentons celles-ci par une même séquence d’instructions soit un certains nombre de fois :
d’instructions Connu d’avance. Exemple : calcul du Nème terme d’une suite.
et nous répétons l'exécution de la séquence plusieurs fois. Non connu d’avance. Exemple : le contrôle de saisie de données
L’exécution de toute séquence d’instructions répétitive ou itérative qui consiste à vérifier que les valeurs des données entrées au
est une boucle. clavier correspondent bien à celles attendues par l’algorithme.
Un traitement répétitif ou itératif peut être vu comme un traitement La séquence d’instructions peut être :
conditionnel: Une répétition : Le passage courant dans la boucle est
qu’on exécute un certains nombre de fois connu, indépendant du passage précèdent.
ou non connu d’avance (y compris zéro fois) selon la valeur de Exemple : calcul des moyennes des étudiants (la même
la condition. séquence d’opérations se répète pour le calcul de la moyenne de
chaque étudiant; MAIS aucune relation n’existe entre la moyenne
d’un étudiant et celle d’un autre).
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 49/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 50/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 51/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 52/110
Les Différentes Structures Boucle conditionnelle
Répétitives/Itératives (2/2) TANTQUE … FIN_TANTQUE
Cette structure s’applique aussi bien dans le cas où le nombre de
TRES IMPORTANT : passages dans la boucle (c.à.d. itération ou répétition) est connu ou
inconnu d’avance:
Chaque structure répétitive/itérative se caractérise par :
une initialisation,
…
une condition, Initialisation
TANTQUE (condition d’EXECUTION est vraie) FAIRE
une séquence logique d’instructions.
oui
Instructions (incluent au moins une instruction
qui change la valeur de la condition)
Toute modification de l’une des trois caractéristiques
nécessite une vérification des deux autres. FIN_TANTQUE
… non
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 53/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 54/110
Exemple de Calcul du produit des N premiers Exemple de Calcul du produit des N premiers
entiers positifs avec TANTQUE (1/2) entiers positifs avec TANTQUE (2/2)
ALGORITHME Produit
VARIABLE P, N, x : entier ALGORITHME Produit_2 ALGORITHME Produit_3
VARIABLE P, N, x : entier VARIABLE P, N, x : entier
DEBUT
DEBUT DEBUT
ECRIRE(" Donner N > 0: ") ECRIRE("Donner N > 0") ECRIRE("Donner N > 0")
LIRE(N) LIRE(N) LIRE(N)
TANTQUE (N<=0) FAIRE TANTQUE (N <= 0) FAIRE TANTQUE (N <= 0) FAIRE
ECRIRE(" Donner N > 0: ") ECRIRE("Donner N > 0") ECRIRE("Donner N > 0")
LIRE(N) LIRE(N) LIRE(N)
FIN_TANTQUE FIN_TANTQUE FIN_TANTQUE
x ← 1 x ← N x ← 0
P ← 1 P ← 1
P ← 1
TANTQUE (x > 0) FAIRE TANTQUE (x < N) FAIRE
TANTQUE (x <= N) FAIRE P ← P * x x ← x + 1
P ← P * x x ← x - 1 P ← P * x
x ← x + 1 FIN_TANTQUE FIN_TANTQUE
FIN_TANTQUE ECRIRE("Le produit des", ECRIRE("Le produit des",
ECRIRE(" Le produit des ",N, " entiers est ", P) N, "entiers est P=", P) N, "entiers est P=", P)
FIN FIN FIN
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 59/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 60/110
Invariant de boucle (1/2) Invariant de boucle (2/2)
Il s’agit de démontrer qu’une boucle produit l’effet attendu au c = n pour toute « i » on a pi=2n-ci et ci≥0
moyen d’un invariant, c’est-à-dire une propriété:
p = 1
Pour i=0: p0=1=20=2n-c0 et
Qui est vérifiée avant d’entrer dans la boucle, while c > 0 : c0=n ≥0
Si elle est vérifiée avant une itération, est vérifiée après p = p * 2
celle-ci, pi+1=2pi=2n-ci+1=2n-ci+1 et
c = c – 1 ci+1=ci-1 => pi=2n-ci
Lorsqu’elle est vérifiée en sortie de boucle permet d’en
Soit ci et pi à l’itération « i » Or ci>0 => ci+1 ≥0
déduire que le programme est correct.
Exemple: L’état initial: c0 = n, p0 = 1 Si (ci>0) n’est pas vérifiée =>
Et d’après la boucle on a: ci+1 on quitte la boucle avec ci=0,
Démontrer que le programme de calcul de « 2n » suivant est donc pi=2n-ci => pi=2n
correct, c.-à-d. lorsque l’exécution se termine, la variable « p » = ci - 1 et pi+1 = 2Pi
contient bien la valeur « 2n » où « n >0 » est la valeur initiale de Et on remarque que la => La subtilité de ce
la variable « c ». propriété suivante est raisonnement tient dans le
toujours vérifiée, choix de bon invariant!
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 63/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 64/110
Caractéristiques de la structure REMARQUES IMPORTANTES
…
REPETER ALGORITHME Somme_Pairs i ← 2
La condition peut être simple ou complexe. VARIABLE S, N, i: entier S ← 0
DEBUT REPETER
Les instructions sont exécutées jusqu’à ce que la condition REPETER S ← S + i
d’arrêt devienne vraie. ECRIRE("Donner N") i ← i + 2
LIRE(N) JUSQU’À i > N
On exécute au moins une fois l’itération (ou la répétition) avant …
JUSQU'À (N > 0)
de vérifier la condition d’arrêt. PROBLEME : Si N=1 Alors S = 2.
i ← 2
S ← 0 Solution :
Les instructions sont exécutées tant que la condition est toujours
TANTQUE (i<=N) FAIRE …
à la valeur Faux. S ←0
S ← S + i
REMARQUE IMPORTANTE : i ← i + 2 Si N>1 Alors
FIN_TANTQUE Début i ← 2 , S ← 0
Un traitement exprimé avec TANTQUE ne peut pas être exprimé ECRIRE("La somme des REPETER
avec REPETER en inversant juste la condition (la négation). entiers pairs < à", N, S ← S + i
"est= ", S) i ← i + 2
Ceci n’est vrai que pour un traitement dont le nombre de JUSQU’À i > N
FIN
passages dans la boucle TANTQUE est au moins égal à une Fin
Remarque : Si N=1 Alors S=0.
fois. Finsi
… Militaire –
1ère Année Académie
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 65/110 A.U. 2019/2020 Informatique – Chapitre 1 66/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 69/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 70/110
et la fin du bloc est marquée par le retour au niveau On va détailler l’exécution de ce programme à partir de l’état c = 3
d’indentation du while.
Après Après Après
itération Initial
Ce bloc d’instructions est appelé le corps de boucle et chaque itér.1 itér.2 itér.3
passage dans ce bloc est appelé une itération. p 1 2 4 8
c 3 2 1 0
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 75/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 76/110
Structures Répétitives/Itératives en Structures Répétitives/Itératives en
Python (3/4) Python (4/4)
4- Exemple:
3- Syntaxe d’une boucle inconditionnelle: Si on reprend le programme de calcul de 2n, on aura juste à écrire :
Les boucles conditionnelles sont nécessaires pour effectuer des 1. p = 1
calculs lorsqu’il n’est pas possible de borner le nombre d’étapes 2. for c in range(n):
nécessaires. 3. p = 2 * p # p *= 2
En pratique, dans de nombreux cas, on connaît à l’avance le nombre
d’itérations qu’il faudra effectuer, ce qui rend inutile d’utiliser une Le compteur de boucle est ici entièrement géré par la boucle for.
boucle conditionnelle. Il n’est pas besoin de l’incrémenter, ni de tester qu’il ne dépasse
pas une certaine limite.
Il reste possible d’utiliser ce compteur au sein du corps de la
En Python, on écrit une boucle inconditionnelle « for » ainsi : boucle.
Dans la boucle for c in range(n), la variable « c » parcourt les
1. for i in range(x):
entiers de 0 à n − 1.
2. bloc_d_instructions On remarque que le paramètre passé à range() est donc la valeur
avant laquelle on s’arrête.
Comme souvent en informatique, on numérote à partir de 0.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 77/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 78/110
MANIPULATION DES Exemple : Pour ranger les longueurs des mois d’une année non
bissextile, on utilise le tableau suivant :
TABLEAUX 31 28 31 30 31 30 31 31 30 31 30 31
positions 1 2 3 … 12
=> On constate que ce tableau contient 12 éléments de même type.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 81/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 82/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 83/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 84/110
Définition d’un tableau à 1D (2/2) Déclaration d’un tableau à 1D (1/3)
Jusque-là, nous avons considéré qu’un tableau commence
Un tableau est une variable qui doit avoir un nom, un nombre
forcément par l’indice « 1 » jusqu’à l’indice « N » pour simplifier le
d’éléments (borne_sup - borne_inf + 1) et un type qui représente
discours mais ceci n’a rien d’obligatoire algorithmiquement.
le type de ses éléments.
En effet, la borne inférieure d’un tableau (éventuellement la
Il est nécessaire de déclarer un tableau avant sa première
borne supérieure) peut être négative mais forcément inférieure à
utilisation.
la borne supérieure.
Cette déclaration peut se faire directement dans la partie
De manière générale, un tableau à une dimension ayant (bsup –
variable,
binf + 1) éléments se présente comme suit :
Ou en définissant un type tableau dans la partie type et
T[binf] T[binf+1] … T[i] … T[bsup-1] T[bsup] déclarer ensuite la variable de ce type défini comme suit:
Exemples: Type NomType = tableau [borne_inf .. borne_sup]
[binf .. bsup] = [-10 ..-1] [binf .. bsup] = [-10 ..10] de type des éléments
[binf .. bsup] = [-10 .. 0] [binf .. bsup] = [ 0 ..10]
[binf .. bsup] = [1 ..10] etc.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 85/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 86/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 87/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 88/110
Manipulation d’un tableau à 1D Remplissage d’un tableau à 1D
Si T est un tableau à « N » entiers, défini comme un tableau Dans la suite, on suppose avoir effectué les déclarations suivantes :
[1..N] d’entier avec « N » constante déjà défini.
une constante Nmin=1 Nmax=10
L’accès à la case d’indice « i » se fait par T[i].
un type Tab1 = tableau [Nmin..Nmax] de entier
Lorsque l’indice « i » est inférieur à « 1 » ou supérieur à « N
« x » et « y » représentent respectivement la borne « inf » et la
», T[i] génère une erreur.
borne « sup » de début et de fin de remplissage.
La variable « T[i] » peut être manipulée comme n’importe
Procédure Remplir_Tab Remplissage complet
quelle variable scalaire : (S T: Tab1,
Tab1 Algorithme Remplir_Complet
Lire(T[i]) Ecrire(T[i]) E x, y: entier) Constante Nmin=1 Nmax=10
Variable i : entier Type Tab1=tableau[Nmin..Nmax]
T[i] ← valeur T[i] ← T[i]+T[i-1] Début d’entier
Pour i = x à y Faire Variable V:Tab1 …
Si T[i] > T[i-1] Alors …. Ecrire (‘donner
Remarque importante : Attention, les instructions de lecture, T[‘,i,’]=’) Début …
d’écriture et d’affectation ne sont pas applicables au tableau T. Lire(T[i]) Remplir_Tab(V, Nmin, Nmax)
FinPour …
Lire(T) Ecrire(T) T ← valeur Fin Fin
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 89/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 90/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 91/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 92/110
Définition d’un Tableau à 2D (2/2) Déclaration d’un Tableau à 2D
jème Un tableau à deux dimensions (matrice) doit être déclaré en
colonne précisant son nom, le type de ses éléments, le nombre de ses
lignes (L) et celui de ses colonnes (C).
T[1,1] T[1,2] … T[1, j] … T[1, C]
Cette déclaration se présente comme suit :
T[2,1] T[2,2] … T[2, j] … T[2, C] 1. Constante L=valeur1 C=valeur2
… … … … 2. Type nomtype = tableau[1..L,1..C] type
3. des éléments
ième T[i,1] T[i,2] … T[i, j] … T[i, C] 4. Variable T : nomtype ...
ligne
Exemple :
… … … …
1. Constante L=5 C=5
T[L,1] T[L,2] … T[L, j] … T[L, C] 2. Type Tab2d = tableau [1..L, 1..C] d’entier
3. Variable T : Tab2d ...
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 93/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 94/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 97/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 98/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 101/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 102/110
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 103/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 104/110
Domination asymptotique (1/2) Domination asymptotique (2/2)
Soitent « f » et « g » étant deux fonctions,
La notation O, dite notation de Landau, vérifie les propriétés
« f = O(g) » s'il existe des constantes c>0 et n0 suivantes :
telles que f(x) < c*g(x) pour tout x > n0 : si f=O(g) et g=O(h) alors f=O(h)
si f=O(g) et k un nombre, alors k*f=O(g)
si f1=O(g1) et f2=O(g2) alors f1+f2 = O(g1+g2)
si f1=O(g1) et f2=O(g2) alors f1*f2 = O(g1*g2)
Exemples de domination asymptotique :
x = O(x2) car pour x>1, x<x2
x2 = O(x3) car pour x>1, x2<x3
100*x = O(x2) car pour x>100, x<x2
f = O(g) signifie que « f » est dominée
ln(x) = O(x) car pour x>0, ln(x)<x
asymptotiquement par « g ».
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 105/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 106/110
O(1) : complexité constante, pas d'augmentation du temps O(n log(n)) : complexité quasi-linéaire, augmentation un peu
d'exécution quand le paramètre croit, supérieure à O(n).
O(log(n)) : complexité logarithmique, augmentation très
faible du temps d'exécution quand le paramètre croit. Exemple : algorithmes qui décomposent un problème en
Exemple : algorithmes qui décomposent un problème en d'autres plus simples, traités indépendamment et qui
un ensemble de problèmes plus petits (dichotomie). combinent les solutions partielles pour calculer la solution
O(n) : complexité linéaire, augmentation linéaire du temps générale.
d'exécution quand le paramètre croit (si le paramètre double,
le temps double). O(n2) : complexité quadratique, quand le paramètre double,
Exemple : algorithmes qui parcourent séquentiellement le temps d'exécution est multiplié par 4.
des structures linéaires.
Exemple : algorithmes avec deux boucles imbriquées.
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 107/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 108/110
Classes de complexité (3/3) Exemples
O(ni) : complexité polynomiale, quand le paramètre double, Exemple 1: Exemple 2:
le temps d'exécution est multiplié par 2i . n=int(input("Donner n:") n=int(input("Donner n:")
for i in range(15): for i in range(n):
Exemple : algorithme utilisant « i » boucles imbriquées. print(2*i) print(i)
O(in) : complexité exponentielle, quand le paramètre Ici la boucle est toujours Ici la boucle affiche le « i » pour
exécutée 15 fois (de i=0 ..14) i=[0 ..n-1] et elle comporte
double, le temps d'exécution est élevé à la puissance 2.
et elle ne comporte que 2 qu’une opérations élémentaires
opérations élémentaires (affichage)
O(n!) : complexité factorielle, asymptotiquement
(multiplication + affichage)
équivalente à nn La boucle est exécuté « n » fois
Le temps d’exec. = cte.
Indépendant de « n » Donc la complexité est O(n)
A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 109/110 A.U. 2019/2020 1ère Année Académie Militaire – Informatique – Chapitre 1 110/110