Académique Documents
Professionnel Documents
Culture Documents
Algorithmique et programmation 2
Introduction aux Bases de Données
Présenté par :
Mr. YASSINE KHARCHACHI
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
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
10
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Types de complexité
11
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
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
16
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
17
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
18
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
19
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
20
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
21
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
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
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
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
27
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI
28
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
29
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
30
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
31
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
32
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 :
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
43
Prof: Yassine KHARCHACHI
CPGE TETOUAN Filière : MP/TSI Année Scolaire: 2020/2021
Méthodes de tri
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 :
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 :
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