Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2348 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Pb d'utilisation des classes enveloppes + algo de tri

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb d'utilisation des classes enveloppes + algo de tri

n°257480
Roco
Posté le 29-11-2002 à 23:07:54  profilanswer
 

Salut :hello:  
 
Voilà mon pb. J'ai tenté de "convertir" un algo de tri rapide (version à pile) de C++ vers Java.
 
Ma contrainte m'imposait d'utiliser une pile standard de Java (java.util.Stack). Mais voilà, il faut bien évidemment remplir cette pile avec des objets, j'ai du me servir (mal) de la classe enveloppe Integer car cette algo sensé être plus rapide que le tri rapide (version récursive) me donne un temps pourtant nettement moins bon.
 
Bon je n'utilise pas du tout la même base d'algo dans les deux. Donc il faudra que pour bien pouvoir les comparer que je les harmonise. Mais en attendant je soupsonne quand même ma conversion de code et mes conversions de type.
 
Voilà la source en C++ :
 

Code :
  1. void tritab :: tri_rapide() {
  2.     std::stack<int> stack1;
  3.     int p;
  4.     int d = 0;
  5.     int f = taille - 1;
  6.     while(true) {
  7.         while(f-d>0) { 
  8.     p = repartition(d, f);
  9.     if( (p - d) < (f - p) ) {
  10.         stack1.push(p+1);
  11.  stack1.push(f);
  12.  f = p - 1;
  13.     }
  14.     else {
  15.  stack1.push(d);
  16.  stack1.push(p-1);
  17.  d = p + 1;
  18.     }
  19. }
  20. if(stack1.empty()) {
  21.             break;
  22.         }
  23.         f = stack1.top();
  24.         stack1.pop();
  25. d = stack1.top();
  26. stack1.pop();
  27.     }
  28. }


 
Et ma conversion en Java
 

Code :
  1. public void triRapide2() {
  2.     Stack maPile = new Stack() ;
  3.     Object objet;
  4.     int p;
  5.     int d = 0;
  6.     int f = dimension - 1;
  7.     while(true) {
  8.         while(f - d > 0) { 
  9.     p = repartition(d, f);
  10.     if( (p - d) < (f - p) ) {
  11.         maPile.push( new Integer(p+1));
  12.  maPile.push(new Integer(f));
  13.  f = p - 1;
  14.     }
  15.     else {
  16.  maPile.push(new Integer(d));
  17.  maPile.push(new Integer(p-1));
  18.  d = p + 1;
  19.     }
  20. }
  21. if( maPile.empty() ) {
  22.     break;
  23. }
  24. objet = maPile.pop();
  25. f = ((Integer)objet).intValue();
  26. objet = maPile.pop();
  27. d = ((Integer)objet).intValue();
  28.     }
  29. }


 
Bon donc ça marche bien (encore heureux) mais nivo perfs c à chier.
 
EDIT : put1 fais chier mon indentation a merdé. Tant pis flemme de remettre ça au propre :sweat:


Message édité par Roco le 29-11-2002 à 23:09:50

---------------
[:roco] Un chtit café et hop ça repart !
mood
Publicité
Posté le 29-11-2002 à 23:07:54  profilanswer
 

n°257482
kadreg
profil: Utilisateur
Posté le 29-11-2002 à 23:10:14  profilanswer
 

Roco a écrit a écrit :

Salut :hello:  
Bon donc ça marche bien (encore heureux) mais nivo perfs c à chier.




 
Tout java défini en une phrase  :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°257484
Roco
Posté le 29-11-2002 à 23:13:22  profilanswer
 

kadreg a écrit a écrit :

 
Tout java défini en une phrase  :o  




 
Tu peux sortir [:xmamatx]  
 
Nan sérieux. Algorithmiquement ce code devrait être le plus rapide de mes tris (tous codé en Java :fou: ) or ce n'est pas le cas. Donc soit mon algo est faux (je vérifie cela ce WE), soit mes conversions sont vraiment mal faites (et je pense que c'est le cas).
 
++


---------------
[:roco] Un chtit café et hop ça repart !
n°257495
charlene
Verba volant, scripta manent
Posté le 29-11-2002 à 23:32:32  profilanswer
 

Roco a écrit a écrit :

 
 
Tu peux sortir [:xmamatx]  
 
Nan sérieux. Algorithmiquement ce code devrait être le plus rapide de mes tris (tous codé en Java :fou: ) or ce n'est pas le cas. Donc soit mon algo est faux (je vérifie cela ce WE), soit mes conversions sont vraiment mal faites (et je pense que c'est le cas).
 
++




on peut avoir des exemples de performance qu'on puisse juger


---------------
Défiance (ou méfiance) est mère de sûreté  
n°257509
leirn
A.D.I.D.A.S.
Posté le 29-11-2002 à 23:42:52  profilanswer
 

algorithmikement c pas comme ca kon ecrit un tri :/  
 
recherche dicotomik power: N log (N), normalement le plus rapide
 
tri a bulles (celebre N²)
 
la complexité du tien c koi? (pas envi de la calculer)


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
n°257511
leirn
A.D.I.D.A.S.
Posté le 29-11-2002 à 23:43:54  profilanswer
 

charlene a écrit a écrit :

 
on peut avoir des exemples de performance qu'on puisse juger




 
une perf ca se fais pas au juger comme ca... suivant ce ke fais la machine ailleurs, ce kya en ram, etc... ya des variations... normalement fo relancer la machine entre chak bench sur un algo...
 
 
mais une complexité ca se mesure normalement, saf ke la, je suis en week end :D


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
n°257516
Roco
Posté le 29-11-2002 à 23:46:22  profilanswer
 

charlene a écrit a écrit :

 
on peut avoir des exemples de performance qu'on puisse juger




 
Volontiers voilà mes sources mais bon jvois pas trop l'intérêt par rapport à ma question...
 
http://algorithmique.free.fr/sources/


---------------
[:roco] Un chtit café et hop ça repart !
n°257517
charlene
Verba volant, scripta manent
Posté le 29-11-2002 à 23:47:42  profilanswer
 

Leirn a écrit a écrit :

 
 
une perf ca se fais pas au juger comme ca... suivant ce ke fais la machine ailleurs, ce kya en ram, etc... ya des variations... normalement fo relancer la machine entre chak bench sur un algo...
 
 
mais une complexité ca se mesure normalement, saf ke la, je suis en week end :D  



oui merci je suis au courant !
Mais le monsieur dit qu'il est pas content des performances, sans aucun chiffre pour appuyer son propos. alors bon, c'est dur de se faire une idée


Message édité par charlene le 29-11-2002 à 23:48:22

---------------
Défiance (ou méfiance) est mère de sûreté  
n°257519
leirn
A.D.I.D.A.S.
Posté le 29-11-2002 à 23:49:04  profilanswer
 

charlene a écrit a écrit :

oui merci je suis au courant !
Mais le monsieur dit qu'il est pas content des performances, sans aucun chiffre pour appuyer son propos. alors bon, c'est dur de se faire une idée




 
vi, d'ailleurs ta vu, je lui ai reclamé dess chiffres


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
n°257521
leirn
A.D.I.D.A.S.
Posté le 29-11-2002 à 23:50:11  profilanswer
 

Roco a écrit a écrit :

 
 
Volontiers voilà mes sources mais bon jvois pas trop l'intérêt par rapport à ma question...
 
http://algorithmique.free.fr/sources/




 
tu veux pas plutot nous donenr la complexité directement au lieu des sources?
 
fais une recherche sur des algo de tri par dichotomie sinon, je pens epas kil y ait mieux ke O(N*log(N)) (remark, si kkun a je suis tres interressé)


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
mood
Publicité
Posté le 29-11-2002 à 23:50:11  profilanswer
 

n°257526
Roco
Posté le 29-11-2002 à 23:53:25  profilanswer
 

Leirn a écrit a écrit :

 
 
tu veux pas plutot nous donenr la complexité directement au lieu des sources?
 
fais une recherche sur des algo de tri par dichotomie sinon, je pens epas kil y ait mieux ke O(N*log(N)) (remark, si kkun a je suis tres interressé)




 
Jpeux vous donner la complexité bien sûr mais c po mon problème!
 
Mon problème c que sur papier, mon algo tri rapide à pile devrait être plus rapide que mon algo tri rapide récursif et que là c po le cas. D'ailleurs si vous voulez rentrer à fond dans les détails, mon algo de tri par tas devrait être le meilleur de tous, or il se fait battre par mon algo de tri rapide. Sinon l'insertion dichotomique c le meilleur tri pour un faible nombre d'éléments (<100000) .Après c les tri rapides et par tas (voire ptet fusion) qui remportent.


---------------
[:roco] Un chtit café et hop ça repart !
n°257529
leirn
A.D.I.D.A.S.
Posté le 29-11-2002 à 23:56:04  profilanswer
 

Roco a écrit a écrit :

 
 
Jpeux vous donner la complexité bien sûr mais c po mon problème!
 
Mon problème c que sur papier, mon algo tri rapide à pile devrait être plus rapide que mon algo tri rapide récursif et que là c po le cas. D'ailleurs si vous voulez rentrer à fond dans les détails, mon algo de tri par tas devrait être le meilleur de tous, or il se fait battre par mon algo de tri rapide. Sinon l'insertion dichotomique c le meilleur tri pour un faible nombre d'éléments (<100000) .Après c les tri rapides et par tas (voire ptet fusion) qui remportent.




 
dichotomik perd en desosu de 4 aussi je kroi
sur papier avec les memes actions? pit etre ya des choses kil fait plus lentement ke d'autres? (je cherche hein)


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
n°257654
souk
Tourist
Posté le 30-11-2002 à 09:02:07  profilanswer
 

juste pour dire qu'effectivement le tri en tas est le meilleur en moyenne, mais le tri rapide est meilleur sur les cas usuels d'utilisation...
et puis il y a des tris en complexite O(n), mais y a des contraintes sur les elements a trier bien sur (genre trier un tableau de n entiers distincts deux a deux strictement positifs inferieurs a p (avec p>n cela va de soi)
 
ok je sors :bounce:

n°257664
benou
Posté le 30-11-2002 à 10:59:55  profilanswer
 

à mon avis, le problème vient du fait que tu utilises des Integer : tu n'arrêtes pas d'instancier des Integer tout au long de ton algo. Quand on veut gagner en perfs en java, on essaye de limiter le nomber de création d'objet

n°257665
benou
Posté le 30-11-2002 à 11:02:50  profilanswer
 

et puis moi si je cherchais des perfs, j'utiliserai pas une Stack : ca hérite de Vector, et donc, c'est un objet synchronizé => pas performant !
 
je sais que tu as dit que c'était une de tes contraintes mais bon ...

n°257683
Roco
Posté le 30-11-2002 à 12:02:53  profilanswer
 

benou a écrit a écrit :

à mon avis, le problème vient du fait que tu utilises des Integer : tu n'arrêtes pas d'instancier des Integer tout au long de ton algo. Quand on veut gagner en perfs en java, on essaye de limiter le nomber de création d'objet




 
C'est à mon avis aussi le gros problème...


---------------
[:roco] Un chtit café et hop ça repart !
n°257684
Roco
Posté le 30-11-2002 à 12:04:17  profilanswer
 

benou a écrit a écrit :

et puis moi si je cherchais des perfs, j'utiliserai pas une Stack : ca hérite de Vector, et donc, c'est un objet synchronizé => pas performant !
 
je sais que tu as dit que c'était une de tes contraintes mais bon ...




 
Je fais quoi alors. Bon je peux éventuellement implémenter moi-même une pile d'entiers (si j'explique bien mes raisons, ça devrait passer). A ton avis c la meilleur solution?


---------------
[:roco] Un chtit café et hop ça repart !
n°257687
benou
Posté le 30-11-2002 à 12:08:11  profilanswer
 

si tu cherche les perfs, sert toi d'un bête tableau et d'un entier pour connaitre l'index du sommet de la pile : en plus tu connais la taille du tableau à instancier => c'est ce qu'il y a de plus efficace. Et puis c'est pas bien compliqué en plus ...

n°257693
Roco
Posté le 30-11-2002 à 12:20:58  profilanswer
 

benou a écrit a écrit :

si tu cherche les perfs, sert toi d'un bête tableau et d'un entier pour connaitre l'index du sommet de la pile : en plus tu connais la taille du tableau à instancier => c'est ce qu'il y a de plus efficace. Et puis c'est pas bien compliqué en plus ...




 
Tu pourrais m'expliquer (si tu avais deux ou trois liens en plus ça serait pas mal aussi) pkoi ces implémentations sont si peu performantes


---------------
[:roco] Un chtit café et hop ça repart !
n°257697
LeGreg
Posté le 30-11-2002 à 12:30:46  profilanswer
 

Roco a écrit a écrit :

 
Tu pourrais m'expliquer (si tu avais deux ou trois liens en plus ça serait pas mal aussi) pkoi ces implémentations sont si peu performantes




 
ben c'est pas dur a deviner, a chaque ligne de ta fonction, il y a un "new quelquechose"
 
je rappelle que new c'est equivalent a l'appel d'un malloc suivi d'un appel de fonction constructeur..
 
Bref dans une fonction de tri, my guess c'est que c'est tres mauvais (pour le moins)..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°257767
phenixl
Posté le 30-11-2002 à 15:15:04  profilanswer
 

T'as code comment ta pile ?
 
Edit :  
 
Si c'est une stack java oublie les perfs... De meme reutilise tes objets au lieu de les instancier non stop.
 
Edit bis :
 
Oublie les perfs si tu utilises java.util.* (tout court)


Message édité par phenixl le 30-11-2002 à 15:18:04
n°257951
darklord
You're welcome
Posté le 30-11-2002 à 21:59:42  profilanswer
 

kadreg a écrit a écrit :

 
 
Tout java défini en une phrase  :o  




 
troll de movaise kalyté :o


---------------
Just because you feel good does not make you right
n°257961
HappyHarry
Posté le 30-11-2002 à 22:35:57  profilanswer
 

DarkLord a écrit a écrit :

 
 
troll de movaise kalyté :o




 
bah c kadreg hein, on peut pas lui demander d'avoir la quantité ET la qualité [:spamafote]

n°257962
darklord
You're welcome
Posté le 30-11-2002 à 22:37:05  profilanswer
 

HappyHarry a écrit a écrit :

 
 
bah c kadreg hein, on peut pas lui demander d'avoir la quantité ET la qualité [:spamafote]




 
bin vi [:spamafote]
 
 


---------------
Just because you feel good does not make you right
n°257965
kadreg
profil: Utilisateur
Posté le 30-11-2002 à 22:39:01  profilanswer
 

Je me disais bien que mon nez me grattait ...  :hello:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°257966
darklord
You're welcome
Posté le 30-11-2002 à 22:39:20  profilanswer
 

kadreg a écrit a écrit :

Je me disais bien que mon nez me grattait ...  :hello:  




 
 :lol:  :lol:  :lol:  :lol:  
 
 :hello:


---------------
Just because you feel good does not make you right
n°257969
HappyHarry
Posté le 30-11-2002 à 22:42:06  profilanswer
 

kadreg a écrit a écrit :

Je me disais bien que mon nez me grattait ...  :hello:  




 
tu parles avec tes multis t'as les moyens de surveiller tous les topics

n°258794
BifaceMcLe​OD
The HighGlandeur
Posté le 02-12-2002 à 12:01:22  profilanswer
 

Pourtant pas sorcier...  :sarcastic:  

Code :
  1. import java.util.EmptyStackException;
  2. public class IntegerArrayStack {
  3.   /**
  4.    * Creates an empty <tt>IntegerArrayStack</tt>.
  5.    */
  6.   public IntegerArrayStack() {
  7.     this(10);
  8.   }
  9.   /**
  10.    * Creates an empty <tt>IntegerArrayStack</tt> with a default size.
  11.    */
  12.   public IntegerArrayStack(int initialSize) {
  13.       this.size        = 0;
  14.       this.elementData = new int[initialSize];
  15.   }
  16.   /**
  17.    * Pushes an item onto the top of this stack.
  18.    *
  19.    * @param   item   the item to be pushed onto this stack.
  20.    * @return  the <tt>item</tt> argument.
  21.    */
  22.   public int push(int item) {
  23.     if (this.size >= this.elementData.length) {
  24.       this.ensureCapacity(this.size);
  25.     }
  26.     this.elementData[this.size] = item;
  27.     this.size++;
  28.     return item;
  29.   }
  30.   /**
  31.    * Removes the item at the top of this stack and returns that
  32.    * item as the value of this function.
  33.    *
  34.    * @return  The item at the top of this stack.
  35.    * @throws  EmptyStackException  if this stack is empty.
  36.    */
  37.   public int pop() {
  38.     if (this.size == 0) {
  39.       throw new EmptyStackException();
  40.     }
  41.     this.size--;
  42.     return this.elementData[this.size];
  43.   }
  44.   /**
  45.    * Looks at the item at the top of this stack without removing  
  46.    * it from the stack.
  47.    *
  48.    * @return  the item at the top of this stack.
  49.    * @throws  EmptyStackException  if this stack is empty.
  50.    */
  51.   public int peek() {
  52.     if (this.size == 0) {
  53.       throw new EmptyStackException();
  54.     }
  55.     return this.elementData[this.size - 1];
  56.   }
  57.   /**
  58.    * Tests if this stack is empty.
  59.    *
  60.    * @return  <tt>true</tt> if and only if this stack contains
  61.    *          no items; <tt>false</tt> otherwise.
  62.    */
  63.   public boolean empty() {
  64.     return (this.size == 0);
  65.   }
  66.   /**
  67.    * Increases the capacity of this <tt>IntegerArrayStack</tt>  
  68.    * instance, if necessary, to ensure  that it can hold at  
  69.    * least the number of elements specified by the minimum
  70.    * capacity argument.  
  71.    *
  72.    * @param   minCapacity   the desired minimum capacity.
  73.    */
  74.   public void ensureCapacity(int minCapacity) {
  75.     int  oldCapacity = this.elementData.length;
  76.     if (minCapacity > oldCapacity) {
  77.       int[]  oldData     = this.elementData;
  78.       int    newCapacity = (oldCapacity * 3) / 2 + 1;
  79.       if (newCapacity < minCapacity) {
  80.         newCapacity = minCapacity;
  81.       }
  82.       this.elementData = new int[newCapacity];
  83.       System.arraycopy(oldData,          0,
  84.                        this.elementData, 0, this.size);
  85.     }
  86.   }
  87.   private int[]  elementData;
  88.   private int    size;
  89. }


Bon, à vue de nez, ça compile, mais je n'ai pas testé.


Message édité par BifaceMcLeOD le 02-12-2002 à 12:04:32
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Pb d'utilisation des classes enveloppes + algo de tri

 

Sujets relatifs
[Algo] Zetes daccord avec moi ? (truc hyper facile) :DAlgo dont work ?!
Recherche infos sur algo d'encodage MPEG, et autres ...Tomcat 4 - Paramétrage pour une utilisation en production
Utilisation de javax.comm (accès au port série, //, ...) + DEPRECATEutilisation d un formulaire avec interaction d une base odb
[algo/C/C++/java/php/...]fct recursive de permutation ?utilisation de sscanf: :/
classes et threadsUtilisation de valgrind : comprendre les messages
Plus de sujets relatifs à : Pb d'utilisation des classes enveloppes + algo de tri


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR