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 :

Optimisation de code


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 7
    Par défaut Optimisation de code
    Bonjour tout le monde,
    Ayant quelques difficultés en anglais, et donc moi, comprendre en gros la javadoc, mais pas ces subtilités, je me rabbat vers une communaute francophone pour eclaircire quelques détails....

    Je traivail actuellement sur un projet où la première partie consiste à générer des tableau d'entier allant de 1 à 50. Je dois dans un premier temps, générer tout les arrangement possible de se tableau d'entier (soit 50! = 3*10^64 résultats !! et oui, ca commence à faire beaucoup !)

    J'ai réaliser un petit algo qui marche très bien pour des tableaux plus petits mais pour des tableaux de 50 elements, je ne vous explique meme pas le temps qu'il faut !!!

    Je me suis basé sur des vecteurs pour réaliser mon algo et c'est là qu'intervient mes petites difficultés en anglais....

    J'ai testé 2 chose qui marche très bien... Mais qu'est qui prend le plus de ressource (en memoire et en temps d'execution) :
    Faire : Vector v = new Vector((Vector)vTmp);
    ou bien : v.clear(); v=vTmp.clone();
    Je souhaiterai savoir, si dans la premiere solution, les anciens elements en memoire disparraisse une fois le nouveau vecteur créé....
    Ou bien si la deuxieme solution est plus efficace... sachant que le v.clear() est optionnel car mon algo marche aussi sans v.clear();
    Parceque finalement, les deux methodes fonctionnant, je suppose qu'il y'en a une qui est plus performante que l'autre, mais laquelle????

    Si d'ailleur quelqu'un à une piste pour réaliser tous ces arrengements de facon moins couteuse, je suis tout Ouie !!!

    Merci de me tenir au courant,

    bonne journee à tous !

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Bonjour,
    euh 10^64 combinaisons possibles, tu auras beau optimiser ton code, tu n'arriveras jamais au bout ! un petit calcul rapide montre qu'il te faudrait 10^50 années à raison d'1 millions de combinaisons par seconde...
    Pour le reste, utiliser plutôt ArrayList que Vector : ArrayList est non synchronisé, donc plus rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v.clear(); v=vTmp.clone();
    Le v.clear est inutile puisque tu lui affectes vTmp.clone().
    Sinon, dis en un peu plus sur le besoin pour qu'on puisse te conseiller un algorithme.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 7
    Par défaut
    lol

    C'est vrai que j'aurai pu prendre la peine de faire le calcul (parfois, partis dans un algo, on ne pense pas à se genre de chose, j'me disait bien que j'allais avoir quelques problèmes de mémoire, mais k'avec un peu de chance ca pouvait passer )

    Du coup, j'me suis amusé à faire le calcul, en m'imaginant dans le monde de "Oui-Oui" : genre, il faut 1 instruction processeur pour creer un tableau (et il me les sorts les uns apres les autres de facons magiques sans qu'il n'y ai jamais de doublons... ou ce genre de chose....), on travail avec un processeur Core 2 Duo 10 Ghz entiere dédié à mon petit programme (ca a pas l'air si terrible que ca pourtant, créer tous les arrengements possible d'un tableau d'entier allant de 1 à 50 ) et pourtant, même dans ces conditions, il faudra attendre : 7,5*10^45 ANNEES !!!!!! C'est bon ca !!!! Du coup, si tu as un algorithme à me conseiller pour realiser tous les arrengement possible d'un tableau de 50 éléments, en un peu moins de temps, JE SUIS PRENEUR !!!!

    Donc finalement, utiliser des ArrayList plutot que des Vector.... j'gagnerai qu'un siècle ou deux.... j'avoue, ke je suis plus trop a ca pret !

    En tout cas, herve91, merci de ta réponse aussi rapide et surtout si pertinente !!!! ca m'a bien rendu service !!! J'aurai pu me prendre la tete quelques temps en attendant un resultat qui n'etait pas prêt d'arriver !!!

    En ce qui concerne le v.clear(); comme je le disait dans mon premier message, je savais k'il etait inutile, mais par contre, ca m'interesse toujours de savoir, si il permet bien de supprimer les éléments du vecteur en mémoire ou si la le fait seulement pointer vers une autre adresse??
    Est-ce que v=vTmp.clone() efface également tous les éléments de v en mémoire???
    Et finalement, meme si ca fait la meme chose, est-ce qu'il vaut mieux faire :
    v=vTmp.Clone() ou bien v=new Vector(vTmp)????
    Ca me permettrai d''optimiser un petit peu mes programmes à venir et surtout de comprendre un peu mieux comment ses méthodes fonctionnent....

    En tout cas, vraiment merci !

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    synthétise ton probleme a la place de 50 tu en prends 5 ...tu as plusieurs SD qui sont possibles pour t aider à décomposé ton pb ...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 7
    Par défaut
    he he
    J'aurais bien voulu mais comme je l'ai dis dans mon premier message mon algo fonctionne tres bien avec de petite valeur comme 5, mon probleme c'est de reussir à le gérer avec 50 !!! et ca po le choix, c'est mon sujet de TP (y'a vraiment des profs qui trip parfois...) Mais c'est peut etre une mauvaise blague... faut ke je me renseigne de toute facon, je doute qu'il existe une solution à se problème pour l'instant, donc, je pencherai plus pour la mauvaise blague .

    Du coup, maintenant, je suis plus interesse par les questions que j'ai posé a propos des vecteurs plutot que de reussir à ameliorer mon algorithme....
    si v.clear(); permet bien de supprimer les éléments du vecteur en mémoire ou si la le fait seulement pointer vers une autre adresse??
    Est-ce que v=vTmp.clone() efface également tous les éléments de v en mémoire???
    Et finalement, meme si ca fait la meme chose, est-ce qu'il vaut mieux faire :
    v=vTmp.Clone() ou bien v=new Vector(vTmp)????
    Desole pour le titre du post, qui du coup, est devenu un peu errone...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Citation Envoyé par champalaune
    lol

    Est-ce que v=vTmp.clone() efface également tous les éléments de v en mémoire???
    Et finalement, meme si ca fait la meme chose, est-ce qu'il vaut mieux faire :
    v=vTmp.Clone() ou bien v=new Vector(vTmp)????
    Ca me permettrai d''optimiser un petit peu mes programmes à venir et surtout de comprendre un peu mieux comment ses méthodes fonctionnent....
    Si tu écris v = vTmp.clone(), tu fais pointer v vers une copie du vecteur pointé par vTmp. Du coup le vecteur qui était référencé par v avant cette instruction n'est plus utilisé, il sera effacé par le ramasse-miette.

    Pour ta deuxième question je ne sais pas trop. Dans les deux cas un nouvel espace mémoire est alloué, après...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Citation Envoyé par champalaune
    lol

    Est-ce que v=vTmp.clone() efface également tous les éléments de v en mémoire???
    Et finalement, meme si ca fait la meme chose, est-ce qu'il vaut mieux faire :
    v=vTmp.Clone() ou bien v=new Vector(vTmp)????
    Ca me permettrai d''optimiser un petit peu mes programmes à venir et surtout de comprendre un peu mieux comment ses méthodes fonctionnent....
    Si tu écris v = vTmp.clone(), tu fais pointer v vers une copie du vecteur pointé par vTmp. Du coup le vecteur qui était référencé par v avant cette instruction n'est plus utilisé, il sera effacé par le ramasse-miette.

    Pour ta deuxième question je ne sais pas. Dans les deux cas un nouvel espace mémoire est alloué, après...

Discussions similaires

  1. optimiser le code d'une fonction
    Par yanis97 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/07/2005, 08h41
  2. Optimiser mon code ASP/HTML
    Par ahage4x4 dans le forum ASP
    Réponses: 7
    Dernier message: 30/05/2005, 10h29
  3. optimiser le code
    Par bibi2607 dans le forum ASP
    Réponses: 3
    Dernier message: 03/02/2005, 14h30
  4. syntaxe et optimisation de codes
    Par elitol dans le forum Langage SQL
    Réponses: 18
    Dernier message: 12/08/2004, 11h54
  5. optimisation du code et var globales
    Par tigrou2405 dans le forum ASP
    Réponses: 2
    Dernier message: 23/01/2004, 10h59

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