neighbor_search.h
neighbor_search is a classification class and has a binary_search_tree class.
#pragma once
namespace _datum_analysis_
{
template <class _Mat_Type>
class neighbor_search : public classification<_Mat_Type>
{
typedef typename classification<_Mat_Type> _MyBase;
typedef typename neighbor_search<_Mat_Type> _Myt;
public:
typedef typename _Mat_Type::value_type value_type;
typedef typename _Mat_Type::difference_type difference_type;
typedef typename _Mat_Type::iterator iterator;
typedef typename _Mat_Type::const_iterator const_iterator;
typedef typename _Mat_Type::reference reference;
typedef typename _Mat_Type::const_reference const_reference;
private:
const std::size_t m_knn_num;
const double m_lambda;
std::vector<struct recently_node> _recently;
knn_search_tree* m_tree;
knn_search_tree nil_node;
private:
knn_search_tree* _building(iterator _First, iterator _Last);
/* 最近邻剪辑算法 */
void neast_neighbor_prune(_Mat_Type& _matt);
void update_recently(const double m_distance, const_reference m_instance);
void search(const_reference _meta, knn_search_tree* _tree);
protected:
void training_func(_Mat_Type& _matt)
{
std::size_t m_split = find_max_index(m_var.begin(), m_var.end());
concurrency::parallel_sort(_matt.begin(), _matt.end(), statistic_compare<value_type>(m_split));
iterator m_median = _matt.begin() + (_matt.end() - _matt.begin()) / 2;
#ifdef _DEBUG
std::cout << *m_median << std::endl;
#endif
knn_search_tree* m_left_search_tree;