Example #1
0
void balltree_nearest_n(priority_queue<pair<int, double>, vector<pair<int, double> >, sortNodes>& pq, struct ballnode* node, struct datapoint *t, int k, int D){
    if (pq.size()==k){
        if (getDistancePivot(t,node->pivot,D)>=pq.top().second) {
            return;
        }
    }
     else if(node->child1==NULL && node->child2 == NULL){
        for (int i=0; i<node->data.size(); i++) {
            double dist =getDistance(t, node->data.at(i),D);
            if (pq.size()==k){
                if(dist< pq.top().second){
                    pq.pop();
                    pq.emplace(make_pair(node->data.at(i)->idx,dist));
                }
            }
            else
                    pq.emplace(make_pair(node->data.at(i)->idx,dist));
        }
        
    }
    else{
        double dist_1 = getDistancePivot(t, node->child1->pivot,D);
        double dist_2 = getDistancePivot(t, node->child2->pivot,D);
        if(dist_1<dist_2){
            balltree_nearest_n(pq,node->child1,t,k,D);
            balltree_nearest_n(pq,node->child2,t,k,D);
        }
        else{
            balltree_nearest_n(pq,node->child2,t,k,D);
            balltree_nearest_n(pq,node->child1,t,k,D);
        }
    }
}
Example #2
0
	inline void put(T item, Number priority) {
		elements.emplace(priority, item);
	}
Example #3
0
 REP(i, N) {
     pq.emplace(a[i]);
 }
Example #4
0
 REP(i, N) {
     pq.emplace(a[i], i);
 }