Problème de stockage des objets:Vector
Bonjour,
j'ai un problemme de mise a jour a chaque iteration:
mon programme permet de parcourir un vecteur des documents(chaque document est un composant du vectuer): j'appelle ce vecteur vecteur classes dans mon programme.
je fais une classification hierarchique entre ces document. chaque document au depart est une classe:(une classe est definie par un ensemble de documents: 1 ou plusieurs documents)
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| class Classe
{
Vector points;
public Classe()
{}
public Classe(String ch)
{
points=new Vector();
points.addElement(ch);
}
} |
Principe de classification :
- a chaque iteration je regroupe les deux classes qui ont la distance maximale :imax et jmax les deux classes a regrouper.
- ensuite je copie le vecteur points de la classes jmax dans le vecteur points de la classe imax
- et je supprime la classe jmax.
ce principe et retirer jusqu'a que toutes les classses sont reuni dans une seule classe;
jusqu'a ici le programme fonctionne correctement: Voici le code
.
.......
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
| Vector Regroupement=new Vector();//permet d'enregistrer tous les regropement
public Vector Test(Vector classes,float [][]matriceDisDoc, Vector globale)
{
Vector regroupement=new Vector();
int i=0;
int j=0;
int imax=-1;// pour la suppresion de elements regrouper dans le vecteur
int jmax=-1;// pour la suppresion de elements regrouper dans le vecteur
float dismax=0;
float []tabdis=new float[4];
float Inertie_Intra=0;
float Inertie_Inter=0;
float InertieTotale=0;
// boolean trouve=false;
matricedistanceclasse=new float[classes.size()][classes.size()];
for(i=0;i<classes.size()-1;i++)
{
for(j=i+1;j<classes.size();j++)
{
Classe e1=new Classe();
e1=(Classe)classes.elementAt(i);
Classe e2=new Classe();
e2=(Classe)classes.elementAt(j);
tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
float d=tabdis[0];
matricedistanceclasse[i][j]=d;//distance entre deux classe
// calcul de l'inerite
if(d>dismax)
{
dismax=d;
imax=i;
jmax=j; }
}
}
System.out.println();
if(jmax!=-1)
{
Classe dc=new Classe();
dc=(Classe)(classes.elementAt(jmax));
//regrouper jmax a imax et supprimmer jmax
for(int h1=0;h1<dc.points.size();h1++)
((Classe)(classes.elementAt(imax))).points.add(((Classe) (classes.elementAt(jmax))).points.elementAt(h1)); classes.remove(jmax);
Regroupement.add(classes)//Pb: dans le vecteur Regroupement je trouve toujous la mise ajour de classes }
if(classes.size()>1)
Test(classes,matriceDisDoc,globale);
return classes;
} |
MOn problemme c'est tous les composantes du vecteur regroupement ont les memes: Le truc c'est que la modofication sefait sur la le vecteur classes et classes toujours prend la derniere modification: Est ce qu'il une solution.
Merci
Explication de mon problemme
salut,
Mon programme permet de faire une classification hierarchique d'un ensemble de documents.
-ces documents sont stockes dans un vecteur de je nomme classes
-au debut de mon programme je considere un documents comme une classes.
Voici le code
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
|
class Classe
{
Vector points;
public Classe()
{}
public Classe(String ch)
{
points=new Vector();
points.addElement(ch);
}
}
- le processus tourne en regroupement les deux classes qui ont une distance maximale.
Code:
1234567891011121314151617181920 |
for(i=0;i<classes.size()-1;i++)
{
for(j=i+1;j<classes.size();j++)
{
Classe e1=new Classe();
e1=(Classe)classes.elementAt(i);
Classe e2=new Classe();
e2=(Classe)classes.elementAt(j);
tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
float d=tabdis[0];
matricedistanceclasse[i][j]=d;//distance entre deux classe
// calcul de l'inerite
if(d>dismax)
{
dismax=d;
imax=i;
jmax=j; }
}
} |
- le processus s'arrete lorsque tous les documents sont regrouper dans la meme classe: voici le code qui nous permet de determiner les deux classes a regrouper imax et jmax.
for(i=0;i<classes.size()-1;i++)
{
for(j=i+1;j<classes.size();j++)
{
Classe e1=new Classe();
e1=(Classe)classes.elementAt(i);
Classe e2=new Classe();
e2=(Classe)classes.elementAt(j);
tabdis=distanceEntreDeuxClasses(e1,e2,matriceDisDoc,globale);
float d=tabdis[0];
matricedistanceclasse[i][j]=d;//distance entre deux classe
// calcul de l'inerite
if(d>dismax)
{
dismax=d;
imax=i;
jmax=j; }
}
}
le code qui permet de copier les elements de la classes jmax dans la classe imax et suppression de jmax. |
Code:
1 2 3 4 5 6 7
|
Classe dc=new Classe();
dc=(Classe)(classes.elementAt(jmax));
//regrouper jmax a imax et supprimmer jmax
for(int h1=0;h1<dc.points.size();h1++)
((Classe)(classes.elementAt(imax))).points.add(((Classe) (classes.elementAt(jmax))).points.elementAt(h1));
classes.remove(jmax); |
- mon but c'est de stocker a chaque iteration le regroupement faite par le programme et a la fin de programme je doit avoir tous les regroupement : mais c'est ici que je trouve le problemme le meme regroupement a la fin
Execution de mon prog : Exemple
bonjour,
C=correspond au classe
d=correspond au document
Vector classes :
Code:
1 2
|
[C1(d1), C2(d2), C3(d3) ,C4(d4), C5(d5), C6(d6), C7(d7),....] |
iteration 1= je vais regrouper C1 et C3
le vecteur devient :
Code:
1 2
|
[C1(d1,d3), C2(d2), C4(d4), C5(d5), C6(d6), C7(d7),....] |
- et je stocke dans regroupement
- le processus s'arrecte lorsque le nombre de classes =1.
j'espere que mnt le problemme est un peu clair