IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème d'optimisation d'un programme


Sujet :

Langage Java

  1. #1
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre averti
    Homme Profil pro
    Autodidacte
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Autodidacte

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Par défaut
    Bonsoir,

    Sans prétention aucune, j'avais réalisé un petit programme qui traitait un fichier texte et le moulinait pour le convertir dans un autre format et j'utilisais des String. Ce programme s'avérait être plutôt "lent" au regard des infos à traiter et de la vitesse de nos machines actuelles...

    En parcourant la FAQ et le forum, il était fait référence aux classes StringBuilder et StringBuffer comme étant plus adaptées aux travaux de concaténation. En basculant dessus, mon programme est passé de très lent à très rapide.

    Comme je vois pas mal de String auxquelles tu concatènes d'autres chaînes, je me demandais si tu ne gagnerais pas à passer par StringBuilder....

    My 2 cents d'amateur...

  3. #3
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut Remerciments
    slt, je tient juste a te remercier pour tas réponse qui m'a été d'une très grandes utilitée, effectivement, avec la classe StringBuilder, l'opération de concatination de chaines de caracteres est plus rapide, et comme j'ai fait beaucoup de concatination pour l'affichage, le programme est devenu lent
    Encore merci pour ton coup de pouce

  4. #4
    Invité de passage
    Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Par défaut
    les gars bn je suis pas si sûr que vous allez me rependre sur ce Forum mais bn je n'ai pas bcp d'amis pour me renseigner alors.......
    bn j'essaye de développer un programme en java qui effectue le Calcul MRP mais bn j'ai besoin d'un peu d'aide car je dois le rendre demain alors si qlq'un pour me donner un coup de main je serais vraiment très reconnaissant.
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'optimisation
    Par jozes dans le forum Langage
    Réponses: 8
    Dernier message: 15/02/2006, 15h41
  2. Optimisation d'un programme d'échecs
    Par Erickann dans le forum x86 32-bits / 64-bits
    Réponses: 8
    Dernier message: 23/11/2005, 20h23
  3. [Debutant] Problème de fraction dans un programme
    Par SAKDOSS dans le forum Débuter
    Réponses: 4
    Dernier message: 22/10/2005, 18h38
  4. Recherche de pistes pour un problème d'optimisation
    Par TiKeuj dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 15/08/2005, 15h50
  5. Problème installation SQL Server 2000 (programme antérieur)
    Par 404Found dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/04/2005, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo