Sobes.tech
Middle

Qu'est-ce qu'un algorithme glouton et comment est-il utilisé dans la résolution de problèmes?

sobes.tech IA

Réponse de l'IA

L'algorithme glouton est une approche heuristique qui, à chaque étape, prend la décision localement optimale dans l'espoir que cela conduise à une solution globalement optimale.

Applications:

  1. Problème de sélection d'activités:

    • Problème: Choisir le maximum d'intervalles non superposés dans le temps à partir d'un ensemble donné.
    • Solution gloutonne: Trier les intervalles par ordre croissant de leur temps de fin. À chaque étape, sélectionner l'intervalle avec le temps de fin le plus petit qui ne se superpose pas avec ceux déjà sélectionnés.
    # Exemple de sélection d'activités
    # activities = [(start_time, end_time)]
    
    activities = [(1, 4), (3, 5), (0, 6), (5, 7), (3, 8), (5, 9), (6, 10), (8, 11), (8, 12), (2, 14), (12, 16)]
    activities.sort(key=lambda x: x[1]) # Trier par temps de fin
    
    selected_activities = []
    last_finish_time = -1
    
    for activity in activities:
        if activity[0] >= last_finish_time:
            selected_activities.append(activity)
            last_finish_time = activity[1]
    
    print(selected_activities) # [ (1, 4), (5, 7), (8, 11), (12, 16) ]
    
  2. Problème de rendu de monnaie (Coin Change Problem) pour des ensembles canoniques de pièces:

    • Problème: Rendre une somme donnée avec le nombre minimal de pièces.
    • Solution gloutonne: Utiliser autant que possible les plus grandes dénominations de pièces jusqu'à ce que la somme soit rendue. Ne fonctionne que pour certains ensembles de pièces (par exemple, 1, 5, 10, 25).
    # Exemple de rendu de monnaie (pour pièces canoniques)
    coins = [25, 10, 5, 1]
    amount = 67
    result = {}
    
    for coin in coins:
        while amount >= coin:
            result[coin] = result.get(coin, 0) + 1
            amount -= coin
    
    print(result) # {25: 2, 10: 1, 5: 1, 1: 2}
    
  3. Algorithme de Kruskal pour trouver l'arbre couvrant minimal:

    • Problème: Trouver un sous-ensemble d'arêtes d'un graphe non orienté pondéré connecté qui relie tous les sommets avec le poids total minimal.
    • Solution gloutonne: Trier toutes les arêtes par poids en ordre croissant. Ajouter les arêtes dans l'ordre, si elles ne forment pas un cycle avec celles déjà sélectionnées, jusqu'à ce que n-1 arêtes soient ajoutées (où n est le nombre de sommets).

Les algorithmes gloutons sont faciles à implémenter, mais ne trouvent pas toujours la solution globalement optimale pour des problèmes arbitraires. Pour certains problèmes (par exemple, rendu de monnaie avec des ensembles arbitraires, problème du sac à dos en général), l'approche gloutonne n'est pas optimale. Pour garantir l'optimalité ou une meilleure approximation, des méthodes comme la programmation dynamique ou d'autres peuvent être nécessaires. Avant d'appliquer un algorithme glouton, il faut s'assurer qu'il convient au problème donné.