result_set.h

这个头文件声明,实现了各种执行搜索算法,结果的存储,如有理解不到位的地方,请大家见谅。

结构体:

struct BranchStruct;

该结构主要用于对于KDTREE算法,执行查询时,结果的存储的基本单位。

成员变量:

T node;
DistanceType mindist;

node的类型,取决于KDTREE中结点的类型。
mindist的类型,取决于对距离类型(如L1,L2)。

成员函数:

bool operator<(const BranchStruct<T, Distrancetype> & rhs) const;

提供两个BranchStruct用于比较的函数,重载操作符<,比较两个实例mindist的大小。

结构体:

struct DistanceIndex;

该结构体,适用于除了TREE搜索以外的搜索算法。

成员变量:

DistanceType dist_;
size_t index_;

dist_存储具体的距离。
index_存储point的索引。

成员函数:

bool operator<(const DistanceIndex& dist_index) const;

重载操作符<,提供比较大小。大家重具体实现中可以得出,比如:

DistanceIndex a,b;
(a < b) == true; 

当a.dist_ < b.dist_ 或者 a.dist == b.dist_ 但 a.index_ < b. index_ 时,a

class ResultSet;

虚类ResultSet,它声明了三个方法,为:

virtual bool full() const = 0;
virtual void addPoint(DistanceType dist, size_t index) = 0 ;
virtual DistanceType worstDist() const =0 ;

这里给大家,大致叙述下这三个方法的作用。
full()方法用来判断resultSet是不是满了,比如当我们用KNN搜索时,当resultSet中存储了K个结果是,KNN的resultSet就存储满了,下次我们还要添加结果时,就要删除和移动一些POINT。
addPoint方法,将一个point添加进ResultSet。
worstDist()返回,ResultSet中,离目标最远的距离。

class KNNSimpleResultSet;

该类继承于ResultSet,该类声明并定义了一个简单用于存储KNN查询结果的类,因为该类并不能判断,结果中两个point是同一个point,所以只适用于那些,不会存储同一POINT的算法。

成员变量:

size_t capacity;
size_t count_;
DistanceType worst_distance_;
std::vector<DistIndex> dist_index_;

capacity表明该KNNSimple集合的容量。
count_表明现存元素的数量。
worst_distance_ 为离查找点最远的距离。
dist_index_ 为动态数组(用于存储point),数组类型为之前提到的DistanceIndex。

方法:

void clear();

作用为初始worst_distance_,dist_index_ 和 count_.
worst_distance初始为最大的DsitanceType,dist_index_的最后一个元素的dist_初始为worst_distance_,count_初始为0。
注:在KNNSimpleResultSet初始化后,dist_index中所有元素的索引值为-1,dist_为最大值。

size_t size() const;

返回当前元素的数量,即count_。

bool full() const;

判断容器是否满了,即count_ == capacity_。

void addPoint(DistanceType dist, size_t index);

该函数的作用是将一个point添加入ResultSet,但这里要注意几个细节。
1。 该point的距离,即dist不能大于worst_distance_,否则无法添加。
2. 该point添加后,dist_index_ vector中的元素仍按升序排列。即dist_index_[0]对应的dist_最小,以后单调非严格上升(如果之前你定义了FLANN_FIRST_MATCH, 当比较大小时,若dist_相等,还需比较索引号的大小,索引号越大,越靠后)。
3. 插入后worst_distance_仍是最后一个point对应的距离。

void copy(size_t* indices, DistanceType* dists, size_t num_elements, bool sorted = true)

将dist_index_中元素的索引号,距离的大小,分别拷入以indices, dists为头指针的数据块中。拷入的大小为取num_elements与count_的较小值。是有序的升序。

class KNNResultSet;

该类与KNNSimpleResultSet相似,只是在addPoint时,加入了严格检测是否重复的判断逻辑。其余相同。

class KNNResultSet2;

该类的功能与KNNSimpleResultSet一样,只不过它用了heap数据结构,所以效率更高。

关于RadiusResultSet等,跟上面差不多,我就不写了,有兴趣的可以阅读源码就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
转成cmake,HEADERS += \ $$PWD/AES/AES.h \ $$PWD/AutoSendDirectionCorrect/AutoSendDirectionCorrect.h \ $$PWD/HPSocket/HPSocket-SSL.h \ $$PWD/HPSocket/HPSocket.h \ $$PWD/HPSocket/HPSocket4C-SSL.h \ $$PWD/HPSocket/HPSocket4C.h \ $$PWD/HPSocket/HPTypeDef.h \ $$PWD/HPSocket/SocketInterface.h \ $$PWD/IFF/IFFDicts.h \ $$PWD/IFFDeal/IFFDeal.h \ $$PWD/IFFDeal/IFFStructFile.h \ $$PWD/IFFDeal/countrydata.h \ $$PWD/Itemdelegate/item_color_delegate.h \ $$PWD/Itemdelegate/item_height_delegate.h \ $$PWD/MyThreadSaveFile/mythreadsavefile.h \ $$PWD/MyUdpNode/my_udp_node.h \ $$PWD/PaUnitConvert/PaUnitConvert.h \ $$PWD/QMyDataDictionary/IniUtils.h \ $$PWD/QMyDataDictionary/QDataDictionary.h \ $$PWD/QMyLineEdit/QMyLineEdit.h \ $$PWD/QMyToolButton/QMyToolButton.h \ $$PWD/ST_Common/common.h \ $$PWD/RadarCommon/radar_result.h \ $$PWD/ST_Interpulse/interpulse_result.h \ $$PWD/ST_RadarCommon/RadarArrayConv.h \ $$PWD/ST_RadarCommon/RadarDicts.h \ $$PWD/ST_RadarCommon/iff.h \ $$PWD/ST_RadarCommon/radar_result.h \ $$PWD/ST_JamSrc/commonJamming.h \ $$PWD/global/global.h SOURCES += \ $$PWD/AES/AES.cpp \ $$PWD/AutoSendDirectionCorrect/AutoSendDirectionCorrect.cpp \ $$PWD/IFF/IFFDicts.cpp \ $$PWD/IFFDeal/IFFDeal.cpp \ $$PWD/CommunalData/CommunalData.cpp \ $$PWD/Itemdelegate/item_color_delegate.cpp \ $$PWD/Itemdelegate/item_height_delegate.cpp \ $$PWD/MyThreadSaveFile/mythreadsavefile.cpp \ $$PWD/MyUdpNode/my_udp_node.cpp \ $$PWD/QMyDataDictionary/IniUtils.cpp \ $$PWD/QMyDataDictionary/QDataDictionary.cpp \ $$PWD/QMyLineEdit/QMyLineEdit.cpp \ $$PWD/QMyToolButton/QMyToolButton.cpp \ $$PWD/ST_RadarCommon/RadarArrayConv.cpp \ $$PWD/ST_RadarCommon/RadarDicts.cpp \ $$PWD/global/global.cpp
最新发布
06-08

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值