⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bd_pr_search.cpp

📁 c++实现的KNN库:建立高维度的K-d tree,实现K邻域搜索
💻 CPP
字号:
//----------------------------------------------------------------------// File:			bd_pr_search.cpp// Programmer:		David Mount// Description:		Priority search for bd-trees// Last modified:	01/04/05 (Version 1.0)//----------------------------------------------------------------------// Copyright (c) 1997-2005 University of Maryland and Sunil Arya and// David Mount.  All Rights Reserved.// // This software and related documentation is part of the Approximate// Nearest Neighbor Library (ANN).  This software is provided under// the provisions of the Lesser GNU Public License (LGPL).  See the// file ../ReadMe.txt for further information.// // The University of Maryland (U.M.) and the authors make no// representations about the suitability or fitness of this software for// any purpose.  It is provided "as is" without express or implied// warranty.//----------------------------------------------------------------------//History://	Revision 0.1  03/04/98//		Initial release//----------------------------------------------------------------------#include "bd_tree.h"					// bd-tree declarations#include "kd_pr_search.h"				// kd priority search declarations//----------------------------------------------------------------------//	Approximate priority searching for bd-trees.//		See the file kd_pr_search.cc for general information on the//		approximate nearest neighbor priority search algorithm.  Here//		we include the extensions for shrinking nodes.//----------------------------------------------------------------------//----------------------------------------------------------------------//	bd_shrink::ann_search - search a shrinking node//----------------------------------------------------------------------void ANNbd_shrink::ann_pri_search(ANNdist box_dist){	ANNdist inner_dist = 0;						// distance to inner box	for (int i = 0; i < n_bnds; i++) {			// is query point in the box?		if (bnds[i].out(ANNprQ)) {				// outside this bounding side?												// add to inner distance			inner_dist = (ANNdist) ANN_SUM(inner_dist, bnds[i].dist(ANNprQ));		}	}	if (inner_dist <= box_dist) {				// if inner box is closer		if (child[ANN_OUT] != KD_TRIVIAL)		// enqueue outer if not trivial			ANNprBoxPQ->insert(box_dist,child[ANN_OUT]);												// continue with inner child		child[ANN_IN]->ann_pri_search(inner_dist);	}	else {										// if outer box is closer		if (child[ANN_IN] != KD_TRIVIAL)		// enqueue inner if not trivial			ANNprBoxPQ->insert(inner_dist,child[ANN_IN]);												// continue with outer child		child[ANN_OUT]->ann_pri_search(box_dist);	}	ANN_FLOP(3*n_bnds)							// increment floating ops	ANN_SHR(1)									// one more shrinking node}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -