begin process at 2010 02 10 01:11:54
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ALGO GLOUTON BASÉ SUR LA PROGRAMMATION DYNAMIQUE

ALGO GLOUTON BASÉ SUR LA PROGRAMMATION DYNAMIQUE


 Information sur la source

Note :
Aucune note
Catégorie :Maths & Algorithmes Niveau :Expert Date de création :27/01/2004 Date de mise à jour :27/01/2004 22:41:37 Vu :3 879

Auteur : Haldwin

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

La programmation dynamique permet de résoudre des problème d'optimisation mais il s'agit de méthodes assez lourde. Il existe donc les algo gloutons plus rapide. Un algo glouton fait un choix localement optimal en esperant que ce choix conduise vers une solution globalement optimale.
Dans l'exemple qui suit nous traitons le problème du choix d'activités optimale et qui ne se chevauche pas dans le temps.
Ex:                       Act1      Act2      Act3
      Heure Debut=  0           2         5
      Heure Fin    =  4           5         7
Ici la solution est Act1 suivie d'activité Act3 car ne se chevauche pas et est optimal pour ce problème bien que l'exemple est vraiment très simple.

Source

  • #include <stdio.h>
  • int tabRes[11]; // tableau contenant les activités résultats
  • int AlgoGlouton(int *s,int *f, int i, int n,int nb);
  • int main (void)
  • {
  • // tableau contenant les heures de début et fin d'activité
  • int s[12]={0,1,3,0,5,3,5,6,8,8,2,12};
  • int f[12]={0,4,5,6,7,8,9,10,11,12,13,14};
  • AlgoGlouton(s,f,0,11,0);
  • return 0L;
  • }
  • // Méthode de l'algo glouton
  • // Entrée= s etant un tableau contenant les heures de début de l'activité
  • // f etant un tableau contenant les heures de fin
  • // i,n st les indices définissant le sous problème à traiter S(i,n+1)
  • // nb est l'indice permettant d'insérer dans le tab résultat tabRes l'activité choisit
  • // Sortie= 0 ou 1 non utilisé dans cet algo
  • int AlgoGlouton(int *s,int *f, int i, int n,int nb)
  • {
  • int m = i+1;
  • while( (m<=n) && (s[m] < f[i]) )
  • m++;
  • if( m <= n )
  • {
  • tabRes[nb]=m;
  • AlgoGlouton(s,f,m,n,nb+1);
  • return 1;
  • }
  • else
  • return 0;
  • }
#include <stdio.h>

int tabRes[11]; // tableau contenant les activités résultats
int AlgoGlouton(int *s,int *f, int i, int n,int nb);

int main (void)
{
	// tableau contenant les heures de début et fin d'activité
	int s[12]={0,1,3,0,5,3,5,6,8,8,2,12};
	int f[12]={0,4,5,6,7,8,9,10,11,12,13,14};

	AlgoGlouton(s,f,0,11,0);	
	

	
	return 0L;
}

// Méthode de l'algo glouton
// Entrée= s etant un tableau contenant les heures de début de l'activité
//         f etant un tableau contenant les heures de fin
//         i,n st les indices définissant le sous problème à traiter S(i,n+1)
//         nb est l'indice permettant d'insérer dans le tab résultat tabRes l'activité choisit
// Sortie= 0 ou 1 non utilisé dans cet algo
int AlgoGlouton(int *s,int *f, int i, int n,int nb)
{
	int m = i+1;

	while( (m<=n) && (s[m] < f[i]) )
		m++;
	
	if( m <= n )
	{
		tabRes[nb]=m;
		AlgoGlouton(s,f,m,n,nb+1);
		return 1;
	}
	else
		return 0;

}

 Conclusion

Cet algo est bien evidemment pas de moi.... Si vous voulez d'avantage d'explication, il est tiré du bouquin: "Intro à l'algo"... Livre très bien fait pour comprendre tous ces algo d'optimisation en particulier.
Cette source a juste pour but de faire découvrir cette partie de l'algo aux personnes ne connaissant pas l'optimisation.
<<-- H@ldwin -->>


 Sources du même auteur

Source avec Zip Source avec une capture LANCHAT CLIENT/SERVEUR (MULTICLIENTS) (MFC)
Source avec Zip Source avec une capture CTREECTRLFX: CLASSE GÉRANT AUTOMATIQUEMENT UN CHECKBOX À TRO...
Source avec Zip CRÉATION ET CHARGEMENT D'UNE DLL GRAPHIQUE (MFC)
Source avec Zip CONTROLE DE WINAMP A PARTIR DE VOTRE APPLI...
Source avec Zip LECTEUR AUDIO LISANT LES MP3, WMA ET WAV....

 Sources de la même categorie

Source avec Zip OPERATION SUR LES MATRICES CARREES AVEC CLASSE GENERIQUE par chouhad
Source avec une capture OPÉRATIONS SUR MATRICES C++ par Minilogus
[DEV-C++] CALCUL DE LA RACINE CARRÉE D'UN RÉEL par Jhep
PROGRAMME QUI CALCUL LE PPCM ET LE PGCD par AnoSantino
EVALUER UNE EXPRESSION MATHÉMATIQUE par begueradj

Commentaires et avis

Commentaire de NicoProg le 28/01/2004 01:50:19

Niveau expert .... ca me semble un peu abuser quand même :).


mais sinon, c'est très bien, et un peu de récursivité, ca fait pas de mal :-D

Commentaire de eldered le 28/01/2004 12:33:56

Hum, peux tu commenter un peut la source, je n'y comprend pas grand chose, et pourrait tu expliquer le sens de chevaucher ? Merci ! ++

Commentaire de rawya86 le 22/05/2009 19:26:41

salut! c tré urgent j veu bien un code concernant
le dimensionnement ou l'acheminement optimal dans un réseau à commutation par paquet ou par circuit

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales