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

  FORUM HardWare.fr
  Programmation
  Algo

  kd-tree

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

kd-tree

n°1126209
d_imane
Posté le 21-06-2005 à 13:03:33  profilanswer
 

: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?

mood
Publicité
Posté le 21-06-2005 à 13:03:33  profilanswer
 

n°1126243
0x90
Posté le 21-06-2005 à 13:34:06  profilanswer
 

Incrémente ta verbosité, merci :)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1126286
d_imane
Posté le 21-06-2005 à 14:09:59  profilanswer
 

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)
 

n°1126294
0x90
Posté le 21-06-2005 à 14:16:04  profilanswer
 

(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.
n°1126310
d_imane
Posté le 21-06-2005 à 14:28:16  profilanswer
 

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.

n°1139799
Giz
Posté le 04-07-2005 à 21:56:33  profilanswer
 

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
n°1162247
d_imane
Posté le 27-07-2005 à 21:55:22  profilanswer
 

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?????????


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

  kd-tree

 

Sujets relatifs
Perte de puissance avec Tk::Treealgorithme de subdivision k-D-B tree
implémentation du VA_FILE et Pyramid-Tree[VB6] Pbe sur Tree View
menu arborescence (tree)Tree [JS + CSS]
b-arbre (b-tree)Algorithme de B-Tree
red black tree song[3D] BSP Tree
Plus de sujets relatifs à : kd-tree


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)