一个kd-tree构建和KNN算法的实现

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值