Filière :MP/TSI
Algorithmique et programmation 2
Introduction aux Bases de Données
Présenté par :
Mr. YASSINE KHARCHACHI
Année Universitaire: 2020/2021
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Partie 1 :
Algorithmique et programmation 2
2
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
La Complexité
3
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Introduction
Exercice
Ecrire en python une fonction qui prend en
argument une chaine de caractères et
détermine si le caractère 'a' est présent
dans la chaîne (on retourne soit True soit
False).
4
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Analysons plusieurs solutions
Première solution
def fct1(chaine) :
k=0
N = len(chaine)
result = False
while (result == False and k < N)
if chaine[k] == 'a' :
result = True
k=k+1
return result
5
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Deuxième solution :
def fct2(chaine) :
for i in range(len(chaine))
if chaine[i] == 'a' :
return True
return False
6
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Troisième solution :
def fct3(chaine) :
n = chaine.count('a')
return bool(n)
Quatrième solution :
def fct4(chaine) :
return ('a' in chaine)
7
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Quelques questions :
que remarquez vous concernant cet exercice ?
Le code le plus court ! Est-il meilleur ?
Comment peut-on designer le meilleur code
parmi ces quatre solutions ?
8
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Définition de la complexité
La complexité d'un problème mathématiques
P est une mesure de la quantité de ressources
nécessaires à la résolution du problème P.
Cette mesure est basée sur une estimation du
nombre d'opérations de base effectuées par
l'algorithme en fonction de la taille des
données en entrée de l'algorithme.
9
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Généralement, pour le même problème P, on
peut trouver plusieurs algorithmes (Alg1; Alg2;
::; Algn).
L'objectif de la complexité est d‘évaluer le
coût d'exécution de chaque algorithme afin de
choisir le meilleur.
10
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Types de complexité
En fonction des ressources utilisées pour
évaluer la complexité d'un algorithme, on
sera amène a distinguer deux types de
complexité : complexité temporelle et
complexité spatiale.
11
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Complexité temporelle (en temps)
La complexité temporelle d'un algorithme est
le nombre d'opérations élémentaires
(affectations, comparaisons, opérations
arithmétiques) effectuées par un algorithme.
Complexité spatiale (en espace)
La complexité en mémoire donne le nombre
d'emplacements mémoires occupés lors de
l'exécution d'un programme.
12
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
La notation O
Définition
Soit T(n) une fonction qui désigne le temps de calcul
d'un algorithme A.
On dit que T(n) est en grand O de f(n) : T(n) = O(f (n)) si
et seulement si :Ǝ(n0; c) telle que T(n) <= c f (n) pour
tout n >= n0
13
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Exemples
Exemple 1 :
si T(n) = 3n + 6 alors T(n) = O(n)
Démonstration :
En effet, pour n >= 2, on a 3n + 6 <= 9n ; la quantité
3n + 6 est donc bornée, à partir d'un certain rang,
par le produit de n et d'une constante.
14
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Exemple 2 :
si T(n) = n2 + 3n alors T(n) = O(n2)
Démonstration :
En effet, pour n >= 3, on a n2 + 3n <= 2n2 ; la
quantité n2 + 3n est donc bornée, à partir
d'un certain rang, par le produit de n2 et
d'une constante.
15
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Classes de complexité les plus usuelles
16
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Le cout des instructions élémentaires
Opération élémentaire
On appelle opération de base, ou opération élémentaire, toute :
Affectation
Test de comparaison :==; <;<=;>=; ! =
Opération de lecture (input) et écriture (print)
Opération arithmétique :+;-;* ; /;%
Opération d'incrémentation :a=a+1,(pas 1) a=a+n (pas n)
Opération de décrémentation :a=a-1,(pas 1) a=a-n (pas n)
17
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Exemple 1 : Que vaut le coût de l'algorithme A
somme = n + 1 #instr1
somme = somme * n #instr2
somme = somme/2#instr3
Cout(A)= coût(inst1)+ coût(instr2)+ coût(instr3)
18
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Le coût des instructions composées
Opération composée
On appelle opération composée, toute
instruction contenant :
L'exécution d'une instruction conditionnelle : Si P
est une instruction conditionnelle du type:
if b alors Q1 else Q2
le nombre d'opérations est :
Coût(P) <= Coût (test) + max(Coût(Q1), Coût(Q2))
19
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
L'exécution d'une boucle : le temps d'une
boucle est égal a la multiplication de nombre
d’itérations par la somme du Coût de chaque
instruction xi du corps de la boucle ;
Coût(boucle for) = Σ Coût(xi)
Coût(boucle while) =Σ (Coût(comparaison) + coût(xi))
20
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Exemple 2 : Que vaut le coût de l'algorithme B
if i%2==0 :
n=i//2
else :
i=i+1
n=i//2
Coût(B)=Coût(i%2 == 0)+ max(Coût(n = i//2),Coût(i = i + 1; n = i//2)
Exemple 3 : Que vaut le coût de l'algorithme C
while i <= n :
somme=somme+i
i=i+1
Coût(C)=Coût (i <= n)+Coût (somme = somme + i)+Coût (i = i + 1)
=n+n+n=3n
21
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
L'appel d'une fonction : Lorsqu'une fonction
ou une procédure est appelée, le coût de cette
fonction ou procédure est le nombre total
d'opérations élémentaires engendrées par
l'appel de cette fonction.
22
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Calculer La complexité
Déterminer les opérations élémentaires
(OE) à prendre en considération : coût
T(OE).
Calculer le nombre d'instructions
effectuées par les opérations composées
(OC) : coût T(OC).
Préciser les instructions a négliger.
Le coût de l'algorithme T(Alg) est :
T(Alg) = T(OE) + T(OC)
23
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
La complexité du produit matriciel ?
def ProduitMatriciel(A,B) :
prod = [[0]*len(A) for i in range(len(A))]
for i in range(len(A)) :
for j in range(len(B[0])) :
s=0
for k in range(len(B)) :
s= s + A[i][k] * B[k][j]
prod[i].append(s)
return prod
24
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
produit matriciel
On suppose que A et B sont deux matrices carrées
d'ordre n (len(A) = len(B) = n)
Coût pour calculer une valeur de s est 2 (produit et
affectation)
Le nombre d'itération de la boucle sur k pour j fixé
égal à n
Le nombre d'itération de la boucle sur j pour i fixé
égal à n
Le nombre total d'opérations est 2+n(n(2+n(2))
Complexité : O(n3)
25
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
La complexité De la Recherche dichotomique ?
def RechDichotomique(T,x) :
g,d=0,len(T)-1
while g<=d :
m=(g+d)//2
if T[m]==x :
return True
if T[m]<x :
g=m+1
else :
d=m-1
return False
26
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
La complexité De la Recherche dichotomique ?
la complexité de chaque itération de while O(1)
Nombre de fois maximum d’exécution de la
boucle while est m (c-a-d la complexité est m)
Au pire, on divise l'intervalle de recherche par 2
à chaque étape.
Donc : 2m-1 <= n <= 2m
on déduit que m <= log2(n) + 1
Complexité : O(log2(n))
27
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI
Différentes nuances de complexité
Il est fréquent que la complexité en temps soit
améliorée au prix d'une augmentation de la
complexité en espace, et vice-versa.
La complexité dépend notamment :
de la puissance de la machine sur laquelle
l'algorithme est exécute,
du langage et interpréteur (ou compilateur) utilise
pour coder l'algorithme,
du style du programmeur.
28
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
La complexité de:
Tri à bulles
Tri par sélection
Tri par insertion
Tri rapide
Tri par fusion
29
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Différentes nuances de complexité
Pour des données de même taille, un
algorithme n'effectue pas nécessairement le
même nombre d'opérations élémentaires.
Pour cela, on distingue 3 types de
complexité :
Complexité au pire des cas.
Complexité dans le meilleur des cas.
30
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Complexité au pire des cas
La complexité au pire est le plus grand
nombre d'opérations qu'aura à exécuter
l'algorithme sur un jeu de données de taille
fixée à n.
Tmax (n) = max{C(d)} avec (dϵDn)
avec Dn l'ensemble des données de taille n
C(n) est le coût d'exécution de l'algorithme
sur la donnée de taille n.
31
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Complexité au pire des cas
Exemple : Recherche d'un élément dans un tableau
def RE(T,x) :
for i in T :
if i == x :
return True
return False
On note n la longueur du tableau T (n=len(T)).
Dans le pire des cas : quand l’élément recherché (x) est le
dernier (dans la case n-1) ou est absent.
Donc la complexité dans le pire est Cmax (n) = n
32
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Complexité dans le meilleur des cas
La complexité au meilleur est le plus petit nombre
d'opérations qu'aura à exécuter l'algorithme sur un
jeu de données de taille fixée. C'est une borne
inferieure de la complexité de l'algorithme sur un
jeu de données de taille n.
Tmin(n) = min {C(d)} avec (dϵDn)
Exemple : Recherche d'un élément dans un tableau
Dans le meilleur des cas : quand l‘élément recherché
(x) se trouve en 1ere position.
Donc la complexité dans le meilleur des cas est
Cmin(n) = 1
33
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
34
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
I- Tri à bulles :
Principe :
Comparaison 2 à 2 des éléments adjacents
et échange s'ils ne sont pas ordonnés. Le
programme s'arrête lorsqu'on parcours la liste
sans faire d'échange
Comme les bulles, les plus grands éléments
remontent en fin de liste
35
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
I- Tri à bulles :
def triBulles (ls):
echange= True
while echange==True :
echange=False
for i in range(0,len(ls)-1) :
if(ls[i]>ls[i+1]):
val=ls[i]
ls[i]=ls[i+1]
ls[i+1]=val
echange=True
return ls
36
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
II- Tri par sélection :
Principe :
Recherche du plus petit élt du tableau et échange avec
le premier élt
Recherche du plus petit élt du tableau entre les
positions 2 et n-1 et échange avec le second élt
...
Recherche du plus petit élt entre les positions n-2 et n-
1 et échange avec l'élt en position n-2
37
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
II- Tri par sélection :
def triSelection (ls):
for i in range(0,len(ls)) :
indice = i
for j in range(i+1,len(ls)) :
if ls[j] < ls[indice] :
indice = j
if indice != i :
val=ls[indice]
ls[indice] = ls[i]
ls[i] = val
return ls
38
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
III- Tri par insertion :
Principe :
Il consiste à insérer successivement
chaque élément a[i] dans la portion
du tableau a[0:i] déjà triée
39
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
III- Tri par insertion :
def tri_Insertion(T) :
n=len(T)
for i in range(1,n):
x=T[i]
j=i
while j>0 and T[j-1]>x :
T[j]=T[j-1]
j=j-1
T[j]=x
return T
40
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
IV- Tri rapide :
Principe :
L’algorithme de tri rapide, "quick sort", est un algorithme
fondé sur la méthode de conception diviser pour régner;
Son principe consiste à séparer l’ensemble des éléments en
deux parties.
Pour effectuer la séparation, une valeur pivot est choisie au
hasard. Les valeurs sont réparties en deux ensembles
suivant qu’elles sont plus grandes ou plus petites que le
pivot. Ensuite, les deux ensembles sont triés séparément,
suivant la même méthode.
41
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
IV- Tri rapide :
Exemple :
Soit la liste :
L = [ 4, 23, 3, 42, 2, 14, 45, 18, 38, 16 ]
Prenons comme pivot la dernière valeur
pivot = 16
Nous obtenons donc :
L1 = [4, 14, 3, 2]
L2 = [23, 45, 18, 38, 42]
A cette étape voici l'arrangement de L :
L = L1 + pivot + L2 = [4, 14, 3, 2, 16, 23, 45, 18, 38, 42]
42
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
En appliquant la même démarche au deux sous-listes : L1 (pivot=2)
et L2 (pivot=42)
[4, 14, 3, 2, 16, 23, 45, 18, 38, 42]
nous obtenons :
L11=[ ] liste vide L21=[23, 38, 18]
L12=[3, 4, 14] L22=[45]
L1=L11 + pivot + L12 = (2,3, 4, 14) L2=L21 + pivot + L22 = (23, 38, 18, 42, 45)
43
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Etapes tri rapide sur [a..b] :
1. Partition [a..b] renvoie pivot & [a..b] =
[x .. pivot']+[pivot]+[pivot'' .. y]
2. Tri Rapide sur [pivot'' .. y]
3. Tri Rapide sur [x .. pivot']
44
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Fonction partitionner :
def partitionner(T,premier,dernier) :
p=T[dernier]
j=premier
for i in range(premier,dernier) :
if T[i]<p :
T[i],T[j]=T[j],T[i]
j=j+1
T[dernier],T[j]=T[j],T[dernier]
return j
45
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Fonction triRapide :
def triRapide(T,premier,dernier) :
if premier < dernier :
pivot=partitionner(T,premier,dernier)
triRapide(T,premier,pivot-1)
triRapide(T,pivot+1,dernier)
46
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
V- Tri par fusion :
Principe :
Le tri fusion est un algorithme de tri basé sur la technique
algorithmique diviser pour régner. L'opération principale
de l'algorithme est la fusion, qui consiste à réunir deux
listes triées en une seule.
47
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Principe :
Le principe de cet algorithme tend à adopter une
formulation récursive :
On découpe les données à trier en deux parties plus ou
moins égales
On trie les 2 sous-parties ainsi déterminées
On fusionne les deux sous-parties pour retrouver les
données de départ
48
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Implémentation :
L'implémentation de cet algorithme repose
essentiellement en 2 fonctions :
Fusion :Permet de fusionner deux listes triées de
telle sorte que la liste résultante la soit aussi.
triFusion : Une fonction récursive qui assure le
découpage de la liste et l'appel de la fonction de
fusion.
49
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Fonction fusion :
def fusion(L1, L2):
res = []
ind1, ind2 = 0, 0
while ind1 < len(L1) and ind2 < len(L2):
if L1[ind1] <= L2[ind2]:
res.append(L1[ind1])
ind1 += 1
else:
res.append(L2[ind2])
ind2 += 1
50
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Fonction fusion :
if ind1!=len(L1):
res+=L1[ind1:]
if ind2!=len(L2):
res+=L2[ind2:]
return res
51
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
Fonction triFusion :
def triFusion(ls):
if len(ls) <= 1:
return ls
moitie = len(ls) // 2
return fusion( triFusion(ls[:moitie]), triFusion(ls[moitie:]))
52
Prof: Yassine KHARCHACHI