kd-tree

kd-tree - Algo - Programmation

Marsh Posté le 21-06-2005 à 13:03:33    

:hello: Salut tous le monde
j' ai un espace de données, je veux le subdiviser en utilisant la meme démarche que le kd-tree,mais sans passer par une structure arborescente.
 :bounce: est ce que quelqu'un à une idée?

Reply

Marsh Posté le 21-06-2005 à 13:03:33   

Reply

Marsh Posté le 21-06-2005 à 13:34:06    

Incrémente ta verbosité, merci :)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 21-06-2005 à 14:09:59    

ok, je vais eéclaircir un peu plus le problème, kd-tree est une structure de données baseée sur la subdivision récursive de l'espace de données en des régions hyper-rectangles disjoites,parmis les statéges de division, la division standard, elle subdivise l'espace de données suivant la médiane des coordonnés de S (S ensemble de donnée).
je cherche à implémenter cette structure sans passer par une structure arborescente, j'ai fait un premier essai et je veux l'améliorer, voici la fonction utiliser:

Code :
  1. RegionApprox* Region::SplitRegion(char *fich,float xmin,float xmax,float ymin,float ymax,int Dimbase, int comp, int niv,int *nbreg,float *X)
  2. {// la condition d'arret au min une donnée par region
  3. RegionApprox *reg;
  4. float xma=0,yma=0;
  5.  cout<<"niv= "<<niv<<endl;
  6. if (comp>=3)
  7. {  
  8.      cout<<"nbrereg= "<<*nbreg<<endl;
  9.   niv++;//le niveau
  10.   cout<<"niv= "<<niv<<endl;
  11.   if (niv%2!=0)// on traite les x
  12.   {
  13.     
  14.      reg=new RegionApprox[*nbreg];
  15.  cout<<"test00:0: "<<(*nbreg)<<endl;
  16.   reg[(*nbreg)].rect[0]=xmin;
  17.   //cout<<"vvvvvvvvvxxxxxxxxxxx"<<(*nbreg)<<endl;
  18.   xma=xmax;
  19.   xmax=Subdivisionx(fich,Dimbase,X,xmin,xmax,ymin,ymax,8);
  20.   cout<<"subx= "<<xmax<<endl;
  21.   reg[(*nbreg)].rect[1]=xmax;
  22.   if(yma==0)
  23.    {
  24.      reg[(*nbreg)].rect[2]=ymin;
  25.         reg[(*nbreg)].rect[3]=ymax;
  26.    }
  27.   (*nbreg)++;
  28.  cout<<"test01:1: "<<(*nbreg)<<endl;
  29.   reg[(*nbreg)].rect[0]=xmax;
  30.   reg[(*nbreg)].rect[1]=xma;
  31.   if(yma==0)
  32.    {
  33.      reg[(*nbreg)].rect[2]=ymin;
  34.         reg[(*nbreg)].rect[3]=ymax;
  35.    }
  36.   //(*nbreg)++;
  37.        comp=NumberDataperRegionx(Dimbase,xmin,xmax,ymin,ymax,8,fich,X);
  38.   cout<<"NumberDataperRegionxgauche= "<<comp<<endl;
  39.   cout<<"*************la region de gauche*********** "<<endl;
  40.   SplitRegion(fich,xmin,xmax,ymin,ymax,Dimbase,comp,niv,nbreg,X);
  41.   cout<<"**********la region de droite************** "<<endl;
  42.   comp=NumberDataperRegionx(Dimbase,xmax,xma,ymin,ymax,8,fich,X);
  43.   cout<<"NumberDataperRegionxdroite= "<<comp<<endl;
  44.   SplitRegion(fich,xmax,xma,ymin,ymax,Dimbase,comp,niv,nbreg,X);
  45.   }
  46. else
  47. {
  48.    cout<<"**********on traite les y************"<<endl;
  49.    (*nbreg)--;
  50.  cout<<"test10: "<<(*nbreg)<<endl;
  51.    reg=new RegionApprox[*nbreg];
  52.    yma=ymax;
  53.    ymax=Subdivisiony(fich,Dimbase,X,xmin,xmax,ymin,ymax,8);cout<<"suby= "<<ymax<<endl;
  54.    reg[(*nbreg)].rect[2]=ymin;
  55.       reg[(*nbreg)].rect[3]=ymax;
  56.    (*nbreg)++;
  57.       reg[(*nbreg)].rect[2]=yma;
  58.    reg[(*nbreg)].rect[3]=yma;
  59.    (*nbreg)++;
  60.         comp=NumberDataperRegiony(Dimbase,xmin,xmax,ymin,ymax,8,fich,X);
  61.    cout<<"comptg= "<<comp<<endl;
  62.    cout<<"*************la region de gauche*********** "<<endl;
  63.    SplitRegion(fich,xmin,xmax,ymin,ymax,Dimbase,comp,niv,nbreg,X);
  64.    cout<<"**********la region de droite************** "<<endl;
  65.    comp=NumberDataperRegiony(Dimbase,xmin,xmax,ymax,yma,8,fich,X);
  66.    cout<<"comptd= "<<comp<<endl;
  67.    SplitRegion(fich,xmin,xmax,ymax,yma,Dimbase,comp,niv,nbreg,X);
  68.    niv++;
  69.    *nbreg++;
  70.   
  71. }
  72. }
  73. return reg;
  74. }

 
remarque: je suppose que la subdivision aura lieu si le nombre de données est >=3(on aura des région de 3 données)
 

Reply

Marsh Posté le 21-06-2005 à 14:16:04    

(detail : ton indentation est foireuse :/)
 
Je vois ce qu'est un Kd-tree, mais je capte pas vraiment ce que tu veut faire :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 21-06-2005 à 14:28:16    

je veux éaiser une fonction qui  
1.lit les données d'un fichier(les données sont référencées par leurs coordonnées)
2.subdiviser l'espace de données suivant la distribution des données dans l'espace)
donc en entree on a le fichier de données, l'espace de données.
en sortie on a des régions disjointes bien référencés.

Reply

Marsh Posté le 04-07-2005 à 21:56:33    

Tu peux me dire quel est l'intérêt de ne pas utiliser une structure arborescente ?  [:figti]


Message édité par Giz le 04-07-2005 à 21:56:47
Reply

Marsh Posté le 27-07-2005 à 21:55:22    

ca c'est une trés bonne question!!
dans mon implémentation j'utilise une structure d'index basée sur liste triées, si j'utilise les arbres je dois passer par une structure intermédiaire pour exlpoiter la stucture d'index en question voila c ca.
c convainquant ou non?????????

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed