Problème d'optimisation d'un programme
slt, je suis un etudiant en informatique, j'ai deja travaillé en c++, en m'a demander de faire un programme qui modélise un probleme, en simulant les différants etats que peut prendre ce dernier par un graphe, voici les structures que j'ai utilisée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public class Tr {//represente les arbres du graphe
private ArrayList <noeud> ens_noeud = new ArrayList <noeud> ();
private ArrayList <SuccesseurTr> suivant = new ArrayList <SuccesseurTr> ();
}
//------------------------------------------------------------------------
public class SuccesseurTr {
private String nom_transition_franchissable;
private int indice_suivant;
private String nom_marquage;
}
//------------------------------------------------------------------------
public class noeud {
private String nom_marq;
private int [] marq;
private ArrayList <SuccesseurNoeud> successeur = new ArrayList <SuccesseurNoeud> ();
}
//------------------------------------------------------------------------
public class SuccesseurNoeud {
private String nom_transition_franchissable;
private int indice_suivant;
} |
J'ai implémenté mon programme, il fonctionne, mais pour des probleme qui sont plus au moins grands, il prend une éternité avant de m'afficher un resultat, j'ai tenté de l’exécuter pas a pas, la generation du graphe ne prend que quelques milisecondes, le probleme est donc dans la méthode d'affichage du graphe qui est beaucoup trop lourde, voici une partie de la méthode
Remarque : Un graphe est un ensemble d'arbre, et un arbre est un ensemble de noeud.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
ArrayList <Tr> graphe;
Tr t = this.graphe.get (0);
int nb = this.graphe.size (), nbs = 0;
this.texte_a_afficher = "e" + 0;
ArrayList <noeud> ens = t.ens_noeud ();
noeud nd = ens.get (0);
affichage_marquage (nd.marquage ());
ArrayList <Integer> pile = new ArrayList <Integer> ();
ArrayList <String> pile1 = new ArrayList <String> ();
ArrayList <SuccesseurTr> list_succ = t.liste_suivant ();
ArrayList <SuccesseurNoeud> list_succ1;
SuccesseurTr succ;
SuccesseurNoeud succ1;
int taille_succ = list_succ.size ();
this.texte_a_afficher += "null,null] Successeurs : ";
nbs += taille_succ;
int i;
for (i = 0; i < taille_succ; i++)
{//for
succ = list_succ.get (i);
this.texte_a_afficher += "<" + succ.nom_marquage() + "," + succ.nom_transition_franchissable () + ",e" + succ.indice_suivant () + "> ";
}//for
for (i = 1; i < nb; i++)
{//for
t = this.graphe.get (i);
ens = t.ens_noeud ();
this.texte_a_afficher += "\ne" + i;
if (ens.size () == 0)
this.texte_a_afficher += " = [vide]";
else
{//else
pile.add (0, 0);
pile1.add (0, null);
while (!pile.isEmpty ())
{//while
nd = ens.get (pile.get (0));
pile.remove (0);
affichage_marquage (nd.marquage ());
this.texte_a_afficher += pile1.get (0);
pile1.remove (0);
list_succ1 = nd.obtenir_liste_successeurs ();
taille_succ = list_succ1.size ();
nbs += taille_succ;
for (int z = 0; z < taille_succ; z++)
{//for
succ1 = list_succ1.get (z);
pile.add (0, succ1.indice_suivant ());
pile1.add (0, succ1.nom_transition_franchissable ());
}//for
}//while
this.texte_a_afficher += ",null] Successeurs : ";
list_succ = t.liste_suivant ();
for (int j = 0; j < list_succ.size (); j++)
{//for
succ = list_succ.get (j);
this.texte_a_afficher += "<" + succ.nom_marquage() + "," + succ.nom_transition_franchissable () + ",e" + succ.indice_suivant () + "> ";
}//for
}//else
}//for
pile = null;
pile1 = null;
this.texte_a_afficher += "\n\nStatistiques\n/-------------------------------------------/\n" + "Nombre de noeud etondu = " + nb + "\nNombre de transition = " + nbs + "\n"; |
Vous l'aurez peut etre remarqués, je cherche un affichage du type
ei , [<int []>, SuccesseurNoeud.nom_transition_franchissable, SuccesseurNoeud.indice_suivant..., null] SuccesseurTr : <...>
Es-que quelqu'un aurai une idée qui permetrai un affichage plus rapide (méthode plus optimisée), meme si elle est couteuse en memoire?
Mes remercimants d'avance;)