void recurse_filter_kruskal(WspIter begin, WspIter end, int THold) { WspIter part,fpart, part1, part2; if(end-begin < 1000) { Kruskal(begin, end); } else { findPivot(begin, end, bdpredmin, bdpredmax); do { MyTimer A; part1 = partition(begin, end, bdpredmin); std::cout << "Part1 size: " << end-begin << " Time: " << A << std::endl; if(part1==begin) bdpredmin.minBccp*=2; } while(part1==begin); bdpredmax.maxBccp = bdpredmin.minBccp; part2 = partition(part1, end, bdpredmax); do_bccp(part1, part2); bccppred.maxBccp = bdpredmin.minBccp; part = partition(part1, part2, bccppred); Kruskal(begin, part); fpart = partition(part, end, ufpred); recurse_filter_kruskal(part, fpart, THold); } }
/*! BCCP \brief computes the BCCP if it has not been For WSPs of small size (<32) this computes the BCCP by brute force. Otherwise it calls a recursive algorithm. */ void bccp() { if(bccp_done()) return; //Note: After BCCP is computed, the void* first and second //point to Points, not comp_quad_tree_nodes //For small sized quad-tree boxes, //Brute force computation of BCCP is faster if(size() < 32) { brute_force_bccp((index)first, (index)second); return; } //For small sized boxes, compute using //recursive algorithm do_bccp(); return; };