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

📄 perf.cpp

📁 c++实现的KNN库:建立高维度的K-d tree,实现K邻域搜索
💻 CPP
字号:
//----------------------------------------------------------------------// File:			perf.cpp// Programmer:		Sunil Arya and David Mount// Description:		Methods for performance stats// 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//	Revision 1.0  04/01/05//		Changed names to avoid namespace conflicts.//		Added flush after printing performance stats to fix bug//			in Microsoft Windows version.//----------------------------------------------------------------------#include <ANN/ANN.h>					// basic ANN includes#include <ANN/ANNperf.h>				// performance includesusing namespace std;					// make std:: available//----------------------------------------------------------------------//	Performance statistics//		The following data and routines are used for computing//		performance statistics for nearest neighbor searching.//		Because these routines can slow the code down, they can be//		activated and deactiviated by defining the PERF variable,//		by compiling with the option: -DPERF//----------------------------------------------------------------------//----------------------------------------------------------------------//	Global counters for performance measurement//----------------------------------------------------------------------int				ann_Ndata_pts  = 0;		// number of data pointsint				ann_Nvisit_lfs = 0;		// number of leaf nodes visitedint				ann_Nvisit_spl = 0;		// number of splitting nodes visitedint				ann_Nvisit_shr = 0;		// number of shrinking nodes visitedint				ann_Nvisit_pts = 0;		// visited points for one queryint				ann_Ncoord_hts = 0;		// coordinate hits for one queryint				ann_Nfloat_ops = 0;		// floating ops for one queryANNsampStat		ann_visit_lfs;			// stats on leaf nodes visitsANNsampStat		ann_visit_spl;			// stats on splitting nodes visitsANNsampStat		ann_visit_shr;			// stats on shrinking nodes visitsANNsampStat		ann_visit_nds;			// stats on total nodes visitsANNsampStat		ann_visit_pts;			// stats on points visitedANNsampStat		ann_coord_hts;			// stats on coordinate hitsANNsampStat		ann_float_ops;			// stats on floating ops//ANNsampStat		ann_average_err;		// average errorANNsampStat		ann_rank_err;			// rank error//----------------------------------------------------------------------//	Routines for statistics.//----------------------------------------------------------------------DLL_API void annResetStats(int data_size) // reset stats for a set of queries{	ann_Ndata_pts  = data_size;	ann_visit_lfs.reset();	ann_visit_spl.reset();	ann_visit_shr.reset();	ann_visit_nds.reset();	ann_visit_pts.reset();	ann_coord_hts.reset();	ann_float_ops.reset();	ann_average_err.reset();	ann_rank_err.reset();}DLL_API void annResetCounts()				// reset counts for one query{	ann_Nvisit_lfs = 0;	ann_Nvisit_spl = 0;	ann_Nvisit_shr = 0;	ann_Nvisit_pts = 0;	ann_Ncoord_hts = 0;	ann_Nfloat_ops = 0;}DLL_API void annUpdateStats()				// update stats with current counts{	ann_visit_lfs += ann_Nvisit_lfs;	ann_visit_nds += ann_Nvisit_spl + ann_Nvisit_lfs;	ann_visit_spl += ann_Nvisit_spl;	ann_visit_shr += ann_Nvisit_shr;	ann_visit_pts += ann_Nvisit_pts;	ann_coord_hts += ann_Ncoord_hts;	ann_float_ops += ann_Nfloat_ops;}										// print a single statisticvoid print_one_stat(char *title, ANNsampStat s, double div){	cout << title << "= [ ";	cout.width(9); cout << s.mean()/div			<< " : ";	cout.width(9); cout << s.stdDev()/div		<< " ]<";	cout.width(9); cout << s.min()/div			<< " , ";	cout.width(9); cout << s.max()/div			<< " >\n";}DLL_API void annPrintStats(				// print statistics for a run	ANNbool validate)					// true if average errors desired{	cout.precision(4);					// set floating precision	cout << "  (Performance stats: "		 << " [      mean :    stddev ]<      min ,       max >\n";	print_one_stat("    leaf_nodes       ", ann_visit_lfs, 1);	print_one_stat("    splitting_nodes  ", ann_visit_spl, 1);	print_one_stat("    shrinking_nodes  ", ann_visit_shr, 1);	print_one_stat("    total_nodes      ", ann_visit_nds, 1);	print_one_stat("    points_visited   ", ann_visit_pts, 1);	print_one_stat("    coord_hits/pt    ", ann_coord_hts, ann_Ndata_pts);	print_one_stat("    floating_ops_(K) ", ann_float_ops, 1000);	if (validate) {		print_one_stat("    average_error    ", ann_average_err, 1);		print_one_stat("    rank_error       ", ann_rank_err, 1);	}	cout.precision(0);					// restore the default	cout << "  )\n";	cout.flush();}

⌨️ 快捷键说明

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