ajout TD4 complet

This commit is contained in:
James Boutaric
2025-10-15 10:34:15 +02:00
parent 80cb738b02
commit 56cb2d6e54
2 changed files with 95 additions and 0 deletions

43
TD4.md Normal file
View 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 sarrê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 **lalgorithme** é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 lordre croissant, aucun reclassement nest 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
View 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;
}