Changeset 923 for XIOS/trunk/extern/remap/src/tree.cpp
- Timestamp:
- 08/26/16 15:07:20 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/extern/remap/src/tree.cpp
r694 r923 8 8 #include <time.h> /* time */ 9 9 #include <vector> 10 #include <list> 10 11 #include <set> 11 12 … … 20 21 using namespace std; 21 22 23 /* 22 24 CBasicTree::CBasicTree() : ri(0), levelSize(MAX_LEVEL_SIZE), root(NULL) 23 25 { 24 26 } 27 */ 25 28 26 29 void CBasicTree::routeNodes(vector<int>& route, vector<Node>& nodes, int assignLevel) … … 51 54 void CBasicTree::slim(int nbIts) 52 55 { 53 //if (!isSampleTree)54 56 for (int i = 0; i < nbIts; i++) 55 57 { 56 58 for (int level = root->level - 1; level > 0; level--) 57 59 { 58 cout<<"before Slim2 Level "<<level<< " levelSize[assignLevel] :"<<levelSize[2]<<endl ;59 60 slim2(root, level); 60 cout<<"after Slim2 Level "<<level<< " levelSize[assignLevel] :"<<levelSize[2]<<endl ;61 61 ri = 0; 62 62 emptyPool(); 63 cout<<"after empty pool "<<level<< " levelSize[assignLevel] :"<<levelSize[2]<<endl ;64 65 63 } 66 64 67 65 for (int level = 2; level < root->level; level++) 68 66 { 69 cout<<"before Slim2 Level "<<level<< " levelSize[assignLevel] :"<<levelSize[2]<<endl ;70 67 slim2(root, level); 71 cout<<"after Slim2 Level "<<level<< " levelSize[assignLevel] :"<<levelSize[2]<<endl ;72 68 ri = 0; 73 69 emptyPool(); 74 cout<<"after empty pool "<<level<< " levelSize[assignLevel] :"<<levelSize[2]<<endl ; 75 } 76 } 77 } 70 } 71 } 72 } 73 74 78 75 79 76 void CBasicTree::insertNode(NodePtr node) … … 141 138 { 142 139 root = new Node; 143 if (level > 1) cout << " newRoot level " << level << endl;140 // if (level > 1) cout << " newRoot level " << level << endl; 144 141 root->level = level; 145 142 root->parent = 0; … … 186 183 int i ; 187 184 188 cout<<"CSampleTree::insertNodes : nb node to be inserted : "<<nodes.size()<<endl ;185 // cout<<"CSampleTree::insertNodes : nb node to be inserted : "<<nodes.size()<<endl ; 189 186 for (i = 0; i < nodes.size(); i++) 190 187 { 191 // cout<<"insert new node"<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;192 188 insertNode(&nodes[i]); 193 // cout<<"new node inserted"<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;194 189 195 190 if (root->leafCount > stepSlim && levelSize[assignLevel] < keepNodes-2) // time for slim down … … 202 197 if (levelSize[assignLevel] == keepNodes-2 && first1) 203 198 { 204 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;205 199 slim(); 206 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ; 200 first1 = false; 201 } 202 203 if (levelSize[assignLevel] == keepNodes-1 && first2) 204 { 207 205 slim(); 208 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;209 slim();210 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;211 first1 = false;212 }213 214 if (levelSize[assignLevel] == keepNodes-1 && first2)215 {216 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;217 slim();218 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ;219 206 first2=false ; 220 207 } 221 208 222 if (levelSize[assignLevel] > keepNodes) 223 { 224 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ; 225 slim(); 226 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ; 227 } 228 if (levelSize[assignLevel] >= keepNodes) 229 { 230 cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ; 209 if (levelSize[assignLevel] >= keepNodes) slim(); 210 if (levelSize[assignLevel] > keepNodes) slim(); 211 if (levelSize[assignLevel] > keepNodes) slimAssignedLevel() ; 212 213 if (levelSize[assignLevel] >= keepNodes) 214 { 215 if (levelSize[assignLevel] > keepNodes) 216 { 217 // cout<<"assign Level : "<<assignLevel<< " levelSize[assignLevel] :"<<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<endl ; 218 removeExtraNode() ; 219 } 231 220 break ; 232 221 } 233 222 } 234 cout << "SampleTree build : nb Node inserted : " << i << endl; 235 236 } 237 238 } 223 // cout << "SampleTree build : nb Node inserted : " << i << endl; 224 225 } 226 227 void CSampleTree::slimAssignedLevel() 228 { 229 for(int i=MIN_NODE_SZ;i<=MAX_NODE_SZ;i++) 230 { 231 int levelSizeOrigin=levelSize[assignLevel] ; 232 slim2(root, assignLevel,i); 233 ri = 0; 234 int levelSizeBefore=levelSize[assignLevel] ; 235 isActiveOkSplit=true ; 236 emptyPool(); 237 // cout<<"assign Level : "<<assignLevel<<" MinNodeSize :"<<i<< " levelSize[assignLevel] : "<<levelSizeOrigin<<"->"<<levelSizeBefore<<"->" <<levelSize[assignLevel]<<" keepNodes : "<<keepNodes<<" "<<"CanSplit " <<canSplit()<<endl ; 238 if (levelSize[assignLevel]<=keepNodes) break ; 239 } 240 241 } 242 243 void CSampleTree::removeExtraNode(void) 244 { 245 std::list<NodePtr> nodeList ; 246 std::list<NodePtr>::iterator it1,it2, rm ; 247 248 root->getNodeLevel(assignLevel,nodeList) ; 249 double dist,minDist ; 250 251 252 for (int n=0; n<levelSize[assignLevel]-keepNodes ; ++n) 253 { 254 minDist=-1 ; 255 for(it1=nodeList.begin();it1!=nodeList.end();++it1) 256 { 257 dist=0 ; 258 for(it2=nodeList.begin();it2!=nodeList.end();++it2) dist+=arcdist((*it1)->centre,(*it2)->centre) ; 259 if (minDist > dist || minDist < 0.) 260 { 261 minDist=dist ; 262 rm=it1 ; 263 } 264 } 265 (*rm)->toDelete=true ; 266 nodeList.erase(rm) ; 267 268 } 269 root->removeDeletedNodes(assignLevel) ; 270 isActiveOkSplit=true ; 271 emptyPool(); 272 } 273 274 }
Note: See TracChangeset
for help on using the changeset viewer.