forked from menault/2026_TD3_DEV51_Qualite_Algo
Optimiser F2 avec un tableau de clients rencontrés
This commit is contained in:
@@ -254,3 +254,13 @@ La complexité cyclomatique de F1 passe de **6 à 3** ; les auxiliaires
|
||||
et **M = 6**. Les tests comparent le résultat à un tri de référence pour
|
||||
les tailles 0 à 128, des doublons, des entrées déjà triées ou inversées,
|
||||
et les bornes des types `int` et `long`.
|
||||
|
||||
### F2 — Tableau des clients rencontrés
|
||||
|
||||
Un tableau de `C` indicateurs, initialisé à zéro, remplace la recherche
|
||||
dans les transactions précédentes. Une transaction marque son client à son
|
||||
premier passage et incrémente le compteur. Le coût devient **`O(n + C)`**
|
||||
au lieu de `O(n²)`, avec `O(C)` de mémoire. Les identifiants de clients sont
|
||||
densement compris entre 0 et `C - 1`, comme le garantit le générateur.
|
||||
La complexité cyclomatique passe de **5 à 3**. Les tests couvrent l'absence
|
||||
de transactions, les doublons, les identifiants extrêmes et tous les clients.
|
||||
|
||||
@@ -116,17 +116,13 @@ void trier_par_montant(Transaction *t, int n)
|
||||
/* F2 : nombre de clients ayant au moins une transaction */
|
||||
int nb_clients_distincts(const Transaction *t, int n)
|
||||
{
|
||||
unsigned char vus[NB_CLIENTS] = {0};
|
||||
int nb = 0;
|
||||
for (int i = 0; i < n; i++) {
|
||||
int deja_vu = 0;
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (t[j].client == t[i].client) {
|
||||
deja_vu = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!deja_vu)
|
||||
if (!vus[t[i].client]) {
|
||||
vus[t[i].client] = 1;
|
||||
nb++;
|
||||
}
|
||||
}
|
||||
return nb;
|
||||
}
|
||||
|
||||
@@ -54,9 +54,25 @@ static void tester_tri(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void tester_clients_distincts(void)
|
||||
{
|
||||
assert(nb_clients_distincts(NULL, 0) == 0);
|
||||
Transaction t[NB_CLIENTS];
|
||||
for (int i = 0; i < NB_CLIENTS; i++)
|
||||
t[i] = (Transaction){i, NB_CLIENTS - 1, 0, 0};
|
||||
assert(nb_clients_distincts(t, NB_CLIENTS) == 1);
|
||||
t[0].client = 0;
|
||||
assert(nb_clients_distincts(t, NB_CLIENTS) == 2);
|
||||
for (int i = 0; i < NB_CLIENTS; i++)
|
||||
t[i].client = i;
|
||||
assert(nb_clients_distincts(t, NB_CLIENTS) == NB_CLIENTS);
|
||||
assert(nb_clients_distincts(t, 1) == 1);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
tester_tri();
|
||||
tester_clients_distincts();
|
||||
puts("Tests banque : OK");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user