Académique Documents
Professionnel Documents
Culture Documents
Rendu de la monnaie:
1. Trier les valeurs des pièces de monnaie (ou des billets) disponibles de la plus grande à la plus petite.
3. Parcourir les valeurs des pièces de monnaie de la plus grande à la plus petite:
Complexité de l'algorithme: La complexité de cet algorithme glouton est linéaire, c'est-à-dire O(n), où n
est le nombre de valeurs de pièces de monnaie disponibles.
2. Sac à dos:
Description du problème: Le problème du sac à dos consiste à déterminer comment remplir un sac à dos
avec des objets de différentes valeurs et poids, de manière à maximiser la valeur totale des objets sans
dépasser la capacité maximale du sac à dos.
2. Trier les objets en fonction du ratio valeur/poids, du plus grand au plus petit.
- Si l'objet peut être entièrement placé dans le sac à dos sans dépasser la capacité:
3. Location de véhicule:
1. Trier les véhicules disponibles en fonction de leur coût par unité de capacité (coût / capacité).
Description du problème: Le problème de l'arbre couvrant de poids minimal consiste à trouver un sous-
ensemble des arêtes d'un graphe pondéré qui connecte tous les sommets du graphe avec un poids total
minimal.
Algorithme glouton pour le problème de l'arbre couvrant de poids minimal (Algorithme de Kruskal):
2. Initialiser un ensemble vide d'arêtes sélectionnées pour former l'arbre couvrant de poids minimal.
- Si l'ajout de l'arête ne crée pas de cycle dans l'ensemble des arêtes sélectionnées:
Voici une implémentation en C des trois versions du tri fusion (scindé en 2, en 3 et en 4) et la mesure des
temps d'exécution :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
i = 0;
j = 0;
k = l;
arr[k] = L[i];
i++;
else {
arr[k] = R[j];
j++;
k++;
arr[k] = L[i];
i++;
k++;
arr[k] = R[j];
j++;
k++;
if (l < r) {
int m = l + (r - l) / 2;
tri_fusion(arr, l, m);
tri_fusion(arr, m + 1, r);
fusion(arr, l, m, r);
if (l < r) {
int m1 = l + (r - l) / 3; int m2 = l + 2 * (r - l) / 3;
tri_fusion_2(arr, l, m1);
tri_fusion_2(arr, m1 + 1, m2);
tri_fusion_2(arr, m2 + 1, r);
if (l < r) {
tri_fusion_3(arr, l, m1);
tri_fusion_3(arr, m1 + 1, m2);
tri_fusion_3(arr, m2 + 1, m3);
tri_fusion_3(arr, m3 + 1, r);
srand(time(NULL));
}
void print_array(int arr[], int n) {
printf(" ");
int main() {
// Version 1: scindé en 2
int arr1[size];
random_array(arr1, size);
// Version 2: scindé en 3
int arr2[size];
random_array(arr2, size);
start = clock();
end = clock();
time_taken = ((double) (end - start)) / CLOCKS_PER_SEC;
// Version 3: scindé en 4
int arr3[size];
random_array(arr3, size);
start = clock();
end = clock();
return 0;
Cet exemple génère des tableaux aléatoires de tailles différentes (1000, 5000, 10000, 50000 et 100000)
et mesure le temps d'exécution des trois versions du tri fusion sur chaque tableau. Les résultats sont
affichés à la fin de l'exécution du programme.
Notez que la fonction `random_array` génère des entiers aléatoires compris entre 0 et 999 inclus pour
remplir les tableaux. Vous pouvez modifier cette fonction pour utiliser une plage de valeurs différentes si
nécessaire.