forked from menault/TD4_DEV51_Qualite_Algo
ajout TD4 complet
This commit is contained in:
43
TD4.md
Normal file
43
TD4.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# TD4 - DEV5.1 : Qualité algorithmique
|
||||||
|
|
||||||
|
## Objectifs
|
||||||
|
Ce TD vise à travailler sur la **complexité algorithmique** et à améliorer la **qualité des algorithmes**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exercice 2 — Calculs de complexité de fonctions
|
||||||
|
|
||||||
|
### Calculez la complexité des fonctions suivantes :
|
||||||
|
|
||||||
|
**<ins>function1 : </ins>**
|
||||||
|
|
||||||
|
- _Meilleur cas_ : `O(n)` → quand chaque élément de tableau1 est trouvé immédiatement dans tableau2 (grâce au break).
|
||||||
|
|
||||||
|
- _Pire cas_ : `0(n × m)` → quand aucun élément ne correspond, on parcourt entièrement les deux tableaux.
|
||||||
|
|
||||||
|
**<ins>function2 : </ins>**
|
||||||
|
|
||||||
|
- _Meilleur cas_ : `O(1)` → si la boucle s’arrête directement (ex. première condition vraie).
|
||||||
|
|
||||||
|
- _Pire cas_ : `O(x)` → si la boucle parcourt tous les éléments jusqu’à la fin.
|
||||||
|
|
||||||
|
**<ins>function3 : </ins>**
|
||||||
|
|
||||||
|
- _Meilleur cas_ : `O(1)`
|
||||||
|
|
||||||
|
- _Pire cas_ : `O(1)`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Exercice 3 — Algorithme de tri
|
||||||
|
|
||||||
|
### Énoncé
|
||||||
|
Créer un **algorithme** permettant de trier un **tableau à N dimensions** contenant **M valeurs** puis Calculer la **complexité algorithmique** de **l’algorithme** écrit .
|
||||||
|
|
||||||
|
**<ins>tri_tableaux.c : </ins>**
|
||||||
|
|
||||||
|
- _Meilleur cas_ : `O(N × M)` → si chaque sous-tableau est déjà trié et que les sommes sont déjà dans l’ordre croissant, aucun reclassement n’est nécessaire.
|
||||||
|
|
||||||
|
- _Pire cas_ : `O(N × M (log M + log N))` → si chaque sous-tableau est totalement désordonné et que les sommes doivent être recalculées à chaque comparaison pendant le tri principal.
|
||||||
|
|
||||||
|
|
52
tri_tableau.c
Normal file
52
tri_tableau.c
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int comparer(const void *a, const void *b) {
|
||||||
|
return (*(int*)a - *(int*)b);
|
||||||
|
}
|
||||||
|
|
||||||
|
int somme(int *tab, int taille) {
|
||||||
|
int s = 0;
|
||||||
|
for (int i = 0; i < taille; i++) {
|
||||||
|
s += tab[i];
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tri principal selon la somme des sous-tableaux
|
||||||
|
void trierTableau(int **tab, int n, int m) {
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
qsort(tab[i], m, sizeof(int), comparer);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < n - 1; i++) {
|
||||||
|
for (int j = i + 1; j < n; j++) {
|
||||||
|
if (somme(tab[i], m) > somme(tab[j], m)) {
|
||||||
|
int *temp = tab[i];
|
||||||
|
tab[i] = tab[j];
|
||||||
|
tab[j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int n = 3, m = 3;
|
||||||
|
|
||||||
|
int ligne1[] = {0, 3, 2};
|
||||||
|
int ligne2[] = {9, 4, 5};
|
||||||
|
int ligne3[] = {4, 1, 3};
|
||||||
|
|
||||||
|
int *tableau[] = {ligne1, ligne2, ligne3};
|
||||||
|
|
||||||
|
trierTableau(tableau, n, m);
|
||||||
|
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
for (int j = 0; j < m; j++) {
|
||||||
|
printf("%d ", tableau[i][j]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue
Block a user