Académique Documents
Professionnel Documents
Culture Documents
complexité
Binôme :
Aberkane Nazim
Matricule : 202031043786
Izerrouken Tarek
Matricule : 202031080904
Algorithme existence
Variable Tableau[n] : du taille n d’entier
i,n,x: entier
Debut
Pour i1 a n faire :
Lire(T[i]) ;
Finpour //2*n
FIN
b. Calculer la complexité théorique au meilleur cas et au pire cas :
Complexité au meilleur cas : Le meilleur cas se produit lorsque l'élément
recherché est situé au début du tableau ou est l'élément actuel que nous
vérifionsen premier. Dans ce scénario, l'algorithme nécessitera un minimum
d'itérations pour trouver l'élément. Dans ce cas, la complexité temporelle serait
O(1), car nous allons trouver cet élément dès le premier test sans parcourir tout
le tableau.
Complexité au pire cas : Le pire cas se produit lorsque l'élément recherché est
soit à la fin du tableau, soit qu'il n'existe pas du tout dans le tableau. Dans ce cas,
l'algorithme devra parcourir tous les éléments du tableau pour confirmer
l'absence de l'élément recherché. La complexité temporelle serait de O(n) (où
"n" est la taille du tableau). Ainsi, on trouve O(n)=5*n+3
Voici le programme correspendant écrit en Python
2. Soit un tableau de n (n>=2) valeurs entières triées :
2.1 recherche sequentielle
a.Écrire une fonction rechElets_TabTriés permettant de vérifier l’existence
d’une valeur x donnée.
Def rechElets_TabTriés(tableau,x) :
Algorithme existence
Debut
FIN
debut = 0
fin = length(tableau) - 1
tant que debut < fin :
milieu = (debut + fin) // 2
Si tableau[milieu] == x:
Return vrai
Sinon :
Si tableau[milieu] > x:
fin = milieu - 1
Sinon
gauche = milieu + 1
return False
Pour i1 a n faire :
Lire(T[i]) ;
Finpour
Si rechElets_Dicho(tableau_trie, valeur_recherchee):
ecirre("La valeur",valeur_recherchee, a été trouvée dans le tableau.")
Sinon :
Ecrire("La valeur ,valeur_recherchee, n a pas été trouvée dans le tableau.")
Fsi ;
FIN
Elets Meilleur 0.00022 0.00014 0.00014 0.00014 0.00015 0.00015 0.00015 0.00015 0.00015 0.00015
3
triés cas
Pire cas 0.01 0.012 0.016 0.025 0.03 0.044 0.05 0.061 0.075 0.09
Elets Meilleur 0.00011 0.00013 0.00013 0.00015 0.00015 0.00015 0.00016 0.00016 0.00017 0.00017
triés cas
decho Pire cas 0.00013 0.00014 0.000150 0.00015 0.000159 0.000167 0.000177 0.00018 0.0002 0.00022
8
3.
Conclusion : la recherche dans un tableau non trié est moins efficace que la
recherche dans un tableau trié, en raison de la complexité de l'algorithme. De plus,
la recherche dichotomique dans un tableau trié est souvent la méthode la plus
efficace pour trouver un élément, car elle divise de manière itérative le domaine de
recherche par deux, réduisant considérablement le nombre d'opérations nécessaires
pour trouver l'élément recherché.
Algorihtme MAX_MIN
Def calculerMaxMin(tableau)
max ←tableau[0] //1u
min ←tableau[0] //1u
Pour i1 à n faire : 1u
Si (tableau[i] > max)alors 1u
max ← tableau[i] ; 1u
Finsi ;
Si (tableau[i] < min) alors 1u
min ← tableau[i] ;1u
FinSi ;
FinPour ; //n*(1+2+2)+1
Afficher("Le maximum est ", max) ; //1u
Afficher("Le minimum est ", min) ; //1u
Debut
Tableau T[i] : tableau d’entier
I,n,entier ;
Pour i1 a n faire : //1u
Lire(T[i]) ; //1u
Finpour ; //2*n+1
MaxetMinA(Tableau) ; //5*n+5
Fin ;
Au départ, l'algorithme suppose que le premier élément est à la fois le maximum
et le minimum. Cependant, si le véritable maximum est à l'autre bout du tableau
et le véritable minimum est aussi à un autre endroit, l'algorithme devra parcourir
tout le tableau pour les découvrir. Sinon le meilleur cas survient lorsque le
maximum et le minimum se trouvent aux premiers indices du tableau. Ainsi, le
nombre minimum de comparaisons est nécessaire pour trouver les valeurs.
Sa complexité est de O(n) car la somme des cout est 5*n+5+2*n+1=7*n+6
Voici le programme correspendant en Python :
Dans notre cas, nous avons fais la difference entre le nombre de comparaison
pour trouver le max independamenet que cel pour touver le min pour avoir plus
de precision donc le nombre de comparaison total = cmpmax+cmpmin.
2. Algorithme plus efficace :
a. Ecrire la fonction MaxEtMinB de recherche du maximum et du
minimum d’un ensemble non trié de n éléments selon un principe donné en TP
FIN
Algorithme MaxEtMin(tableau) Ecrire ("Donnez la taille du
ind_min ← 1 ; 1u tableau :") ; 1u
min ← tableau[ind_min] ; 1u Lire(n) ; 1u
ind_max ← 0 ; 1u
max ← tableau[ind_max] ; 1u SI (n MOD 2 = 0) 2u ALORS :
// n ← longueur(tableau) ; POUR i←0 A n-1 //2u FAIRE :
SI (n MOD 2 != 0) ALORS : 2u SI (i MOD 2 = 0) 2u ALORS :
POUR i←0 A n-2 PAS DE 2 2u
FAIRE n/2 u AJOUTER grand_valeur[i DIV 2]
SI (max < tableau[i+2]) 2u DANS tableau ;
ALORS : SINON :
max ← tableau[i+2] 2u
FINSI ; AJOUTER petite_valeur[i DIV 2]
FINPOUR ; 6*n/2+3 DANS tableau ;
POUR i←1 A n-3 PAS DE 2 //2u
FAIRE FINSI ; 2u
SI (min > tableau[i+2]) 2u FINPOUR ; 6n
ALORS
min ← tableau[i+2] ; 2u SINON :
FINSI ; 4u POUR i←0 A n-1 FAIRE : 2u
FINPOUR ; 6*(n-2)/2+1
(SI min > tableau[n-1] ) ALORS : SI (i MOD 2 = 0) ALORS : 2u
min ← tableau[n-1] ; AJOUTER grand_valeur[i DIV 2]
FINSI ; 3u DANS tableau ;
SINON : SINON :
POUR i←0 A n-3 PAS DE 2 FAIRE
SI (max < tableau[i+2]) 1u AJOUTER petite_valeur[i DIV 2]
ALORS : DANS tableau ;
max ← tableau[i+2] ; 1u
FINSI ; 2u FINSI ;
FINPOUR ; 4*(n-1)/2 FINPOUR :
POUR i←1 A n-2 PAS DE 2 FAIRE FINSI ;
SI (min > tableau[i+2] ) 1u
ALORS : x ← MaxEtMin(tableau) ;
min ← tableau[i+2] ; 1u
FINSI ; 2u Ecrire(‘le max de ce tableau est
FINPOUR ;4(n-1)/2 ‘,max,’et le min est ‘,min); 1u
SI (max < tableau[n-1]) ALORS :
max ← tableau[n-1] ;FINSI ; 2u
RETOURNER max, min
#1 #2
b. Sa complexité theorique : Dans cet algorithme, le pire des cas se produit
lorsque le nombre d'éléments du tableau est impair et les valeurs du maximum et
du minimum sont situées à l'opposé l'une de l'autre.
La complexité au pire des cas de cet algorithme est de l'ordre de O(n), car
l'algorithme doit parcourir tous les éléments du tableau pour déterminer le
maximum et le minimum. Cela implique deux boucles qui parcourent
respectivement les éléments pairs et impairs du tableau, suivies de conditions
supplémentaires pour s'assurer que les derniers éléments impairs sont bien
comparés pour le maximum et le minimum.
Voici le programme correspendant ecrit en python :
n 100000 200000 400000 600000 800000 1000000 1200000 1400000 1600000 1800000
Algo
0.017 0.035 0. 068 0.1 0.13 0.18 0.19 0.21 0.29 0.32
MaxetMinA
MaxetMinB 0.011 0.022 0.05 0.087 0.11 0.16 0.18 0.23 0.26 0.29
Apres avoir comparer le temps d’exécution des 2 algorithmes qui sont différents
mais qui traitent le même problème, nous avons retrouvé que B2 fonctionne
mieux que B1 car il met moins de temps pour trouver les valeurs de max et du
min. En plus, en termes de nombre de comparaisons, B2 fais moins de
comparaison par rapport à B1 mémé en augmentant la taille du tableau, donc
nous constatons que B2 et moins complexe que B1.