diff --git a/TD4.md b/TD4.md new file mode 100644 index 0000000..acb2cc2 --- /dev/null +++ b/TD4.md @@ -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 : + +**function1 : ** + +- _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. + +**function2 : ** + +- _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. + +**function3 : ** + +- _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 . + +**tri_tableaux.c : ** + +- _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. + + diff --git a/tri_tableau.c b/tri_tableau.c new file mode 100644 index 0000000..64f787b --- /dev/null +++ b/tri_tableau.c @@ -0,0 +1,52 @@ +#include +#include + +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; +}