Maison  >  Article  >  développement back-end  >  Comment utiliser l'algorithme glouton en C++

Comment utiliser l'algorithme glouton en C++

王林
王林original
2023-09-19 14:16:411478parcourir

Comment utiliser lalgorithme glouton en C++

Comment utiliser l'algorithme glouton en C++

L'algorithme glouton est un algorithme basé sur le principe de sélection glouton. Il fait le choix actuellement optimal à chaque étape, dans l'espoir d'obtenir éventuellement la solution optimale globale. En C++, nous pouvons utiliser des algorithmes gloutons pour résoudre de nombreux problèmes pratiques. Ce qui suit présentera comment utiliser l'algorithme glouton en C++ et donnera des exemples de code spécifiques.

1. Le principe de base de l'algorithme glouton
L'algorithme glouton est un algorithme heuristique. Son principe de base est de sélectionner à chaque fois la solution actuellement optimale et d'itérer successivement jusqu'à ce que la solution optimale globale soit obtenue. L'algorithme glouton a les caractéristiques suivantes :
1. Il n'est pas garanti d'obtenir la solution optimale, mais il peut souvent obtenir une solution approximativement optimale ;
2 Il est généralement plus efficace que d'autres algorithmes tels que la programmation dynamique ; Il peut résoudre certains types de problèmes particuliers, tels que le problème de sélection d'activité, le problème de sac à dos, etc.

2. Application de l'algorithme glouton

L'algorithme glouton peut être appliqué à de nombreux domaines. Les problèmes courants sont :
1 Problème de sélection d'activité : supposons qu'il y ait n activités, chaque activité a une heure de début et une heure de fin, comment organiser ses activités. afin que le plus d'activités possible puissent être réalisées ?
2. Problème de sac à dos : Étant donné la capacité d'un sac à dos et de plusieurs articles, chaque article a son propre poids et sa propre valeur. Comment choisir les articles à mettre dans le sac à dos afin que la valeur totale des articles dans le sac à dos soit maximisée ?
3. Problème de couverture d'intervalle : étant donné certains intervalles fermés, sélectionnez le moins d'intervalles possible pour couvrir l'intégralité de l'intervalle cible.

3. Implémentation de l'algorithme glouton

Ce qui suit prend le problème de sélection d'activité comme exemple pour expliquer en détail comment utiliser l'algorithme glouton en C++.

Description du problème :

Supposons qu'il y ait n activités, chaque activité a une heure de début et une heure de fin. Il est nécessaire de sélectionner autant d'activités que possible afin que ces activités n'entrent pas en conflit, c'est-à-dire que les périodes de temps de deux activités ne puissent pas se chevaucher.

Idées de résolution de problèmes :

1. Triez les activités en fonction de l'heure de fin, en donnant la priorité aux activités avec une heure de fin anticipée ;
2. Sélectionnez d'abord la première activité, puis sélectionnez l'heure de fin suivante qui n'est pas en conflit ; avec l'heure de fin de l'activité précédente.

Implémentation du code :

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

//定义活动结构体
struct activity{
    int start;
    int end;
};

//比较函数,按照结束时间从小到大排序
bool compare(activity a1, activity a2){
    return a1.end < a2.end;
}

//贪心算法求解活动选择问题
int greedyActivitySelector(vector<activity>& activities){
    //按照结束时间从小到大排序
    sort(activities.begin(), activities.end(), compare);
    
    int result = 1;  //记录最终选择的活动数量
    int preEnd = activities[0].end;  //记录前一个活动的结束时间
    
    for(int i = 1; i < activities.size(); i++){
        if(activities[i].start >= preEnd){
            result++;
            preEnd = activities[i].end;
        }
    }
    
    return result;
}

int main(){
    vector<activity> activities;
    int n;
    cout << "请输入活动个数:" << endl;
    cin >> n;
    
    cout << "请输入每个活动的开始时间和结束时间:" << endl;
    for(int i = 0; i < n; i++){
        activity act;
        cin >> act.start >> act.end;
        activities.push_back(act);
    }
    
    int result = greedyActivitySelector(activities);
    cout << "可以选择的活动数量为:" << result << endl;
    
    return 0;
}

Le code ci-dessus implémente l'algorithme glouton pour le problème de sélection d'activité. Le programme trie d'abord les activités d'entrée de petite à grande par heure de fin. Puis à partir de la première activité, sélectionnez l'activité suivante qui n'entre pas en conflit avec l'activité précédente, et obtenez enfin le nombre d'activités pouvant être sélectionnées.

4. Résumé

L'algorithme glouton est un algorithme simple et efficace qui est souvent utilisé pour résoudre des problèmes pratiques. Nous pouvons facilement utiliser des conteneurs C++ et des bibliothèques d'algorithmes pour implémenter des algorithmes gloutons, tels que des conteneurs vectoriels, des algorithmes de tri, etc. Cependant, il convient de noter que l’algorithme glouton ne convient pas à tous les problèmes et qu’un algorithme approprié doit être sélectionné en fonction des caractéristiques du problème spécifique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn