layout title categories tags date description
post
近邻查询近似算法库FLANN
blog
tools
2016-09-07 02:25:24 -0700
近似近邻查询,作为大数据搜索方面的算法层出不穷,其中有基于树和基于hash的最为多见。

引言

近似近邻算法在大型应用中是解决搜索的关键技术。而近似近邻算法的研究中,一部分是基于树结构实现的,一部分是基于hash算法。今FLANN是一个开源库,opencv中已经集成了该module.

  • github: FLANN - Fast Library for Approximate Nearest Neighbors

红黑树

https://blog.csdn.net/weewqrer/article/details/51866488

用途

红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。对于查找、插入、删除、最大、最小等动态操作的时间复杂度为O(lgn).常见的用途有以下几种:

  • STL(标准模板库)中在set map是基于红黑树实现的。
  • Java中在TreeMap使用的也是红黑树。
  • epoll在内核中的实现,用红黑树管理事件块。
  • linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块

红黑树 VS AVL树

常见的平衡树有红黑树和AVL平衡树,为什么STL和linux都使用红黑树作为平衡树的实现?大概有以下几个原因:

从实现细节上来讲,如果插入一个结点引起了树的不平衡,AVL树和红黑树都最多需要2次旋转操作,即两者都是O(1);但是在删除node引起树的不平衡时,最坏情况下,AVL需要维护从被删node到root这条路径上所有node的平衡性,因此需要旋转的量级O(logN),而RB-Tree最多只需3次旋转,只需要O(1)的复杂度

从两种平衡树对平衡的要求来讲,AVL的结构相较RB-Tree来说更为平衡,在插入和删除node更容易引起Tree的unbalance,因此在大量数据需要插入或者删除时,AVL需要rebalance的频率会更高。因此,RB-Tree在需要大量插入和删除node的场景下,效率更高。自然,由于AVL高度平衡,因此AVL的search效率更高。

总体来说,RB-tree的统计性能是高于AVL的

FLANN概述

首先阐述了近似结果查询的重要性,通过实验结果分析了最有效的近似nn算法中,随机KD森林是最有效的,另外提出了一个新的方法:优先查找k-means树,尤其是针对视觉任务中常用的二进制特征,提出了多层聚类树。为了应用于大数据环境下,还有分布式环境下nn查找框架。

相关名词定义

  1. KNN(K-nearest neighbor search):说白了,就是从数据集合了找K个最接近的
  2. RNN(radius nearest neighbor search):就是返回一定半径范围内的所有数据。当然这个半径有很多不同的定义。

参考文献

  1. K-D Tree
  2. R 树简介
  3. 从B树、B+树、B*树谈到R 树
  4. 线段树
  5. 红黑树

20160907-Flann相关推荐

  1. PCL-1.8.1从源码搭建开发环境二(FLANN库的编译)

    原文首发于微信公众号「3D视觉工坊」,PCL-1.8.1从源码搭建开发环境二(FLANN库的编译) 首先,快速近似最近邻搜索库FLANN-Fast Library for Approximate Ne ...

  2. FLANN特征匹配(Python)

    输入图片 算法输出图 可以看到,这里的算法效果比之前的ORB算法要好很多了! 可以点击来访问一下,就知道差别了~ ORB特征匹配(python) 代码 import cv2 from matplotl ...

  3. 学习OpenCV——Surf(特征点篇)flann快速最近邻搜索算法

    Surf(Speed Up Robust Feature) Surf算法的原理                                                             ...

  4. 【计算机视觉】OpenCV的最近邻开源库FLANN

    FLANN介绍 FLANN库全称是Fast Library for Approximate Nearest Neighbors,它是目前最完整的(近似)最近邻开源库.不但实现了一系列查找算法,还包含了 ...

  5. OpenCV之feature2d 模块. 2D特征框架(2)特征描述 使用FLANN进行特征点匹配 使用二维特征点(Features2D)和单映射(Homography)寻找已知物体 平面物体检测

    特征描述 目标 在本教程中,我们将涉及: 使用 DescriptorExtractor 接口来寻找关键点对应的特征向量. 特别地: 使用 SurfDescriptorExtractor 以及它的函数  ...

  6. 使用FLANN进行特征点匹配

    目标 在本教程中我们将涉及以下内容: 使用 FlannBasedMatcher 接口以及函数 FLANN 实现快速高效匹配( 快速最近邻逼近搜索函数库(Fast Approximate Nearest ...

  7. OpenCV SURF FLANN匹配单应性的实例(附完整代码)

    OpenCV SURF FLANN匹配单应性的实例 OpenCV SURF FLANN匹配单应性的实例 OpenCV SURF FLANN匹配单应性的实例 #include <iostream& ...

  8. OpenCV SURF FLANN匹配的实例(附完整代码)

    OpenCV SURF FLANN匹配的实例 OpenCV SURF FLANN匹配的实例 OpenCV SURF FLANN匹配的实例 #include <iostream> #incl ...

  9. OpenCV FLANN在数据集中搜索查询图片的实例(附完整代码)

    OpenCV FLANN在数据集中搜索查询图片的实例 OpenCV FLANN在数据集中搜索查询图片的实例 OpenCV FLANN在数据集中搜索查询图片的实例 #include <iostre ...

  10. OpenCV与FLANN的功能匹配

    OpenCV与FLANN的功能匹配 与FLANN的功能匹配 目标 理论 代码 结果 与FLANN的功能匹配 目标 在本教程中,您将学习如何: 使用cv :: FlannBasedMatcher界面,以 ...

最新文章

  1. 傅里叶频域,复数域,冲激函数,香农采样(不介绍公式-只介绍是啥)另一种思维
  2. 【java】之读取InputStream流
  3. Android开发学习之路--Camera之初体验
  4. lingo变量无限制版本_LINGO笔记
  5. Linq中dbSet 的查询
  6. Three.js编辑器editor使用详解
  7. bingo update1
  8. WordPress评论摘要标签:comment_excerpt
  9. python爬取网易云音乐评论分析_Python爬取网易云音乐评论(附加密算法)
  10. Android Studio 选项菜单和动画结合_安卓手机关于“开发者选项”你该知道的几件事...
  11. 4.服务器的品牌和型号
  12. 篇一、Flask打造 Python Web 开发的灵活框架,实现简易登录。要求有 Python、HTML 和 CSS 基础。
  13. 约坡慈尉仪特诨谙凹毖仍怯滋傥丛
  14. 快排的优化策略(3种快排4种优化)
  15. 盘点程序员逃离一线的Plan B
  16. Windows 10下载安装openjdk及环境变量配置(以openjdk 8为例)
  17. 几种社会化分享工具总结
  18. windows7登录密码忘了怎么办?
  19. ctf(vip限免)WP
  20. Gorgon黑客组织再显新招:通过在线网盘发起“三重奏”攻击

热门文章

  1. 一行命令​解锁网易云音乐客户端变灰歌曲
  2. linux 网卡天启与关闭,Linux网络配置与安全管理
  3. OC 获取view相对位置_“至尊”武士进化!索泰GeForce RTX 308010G6X天启OC显卡深度评测...
  4. emoji mysql 配置_MySql支持Emoji表情
  5. 【NOIP模拟赛】铁路运输
  6. iOS 微信、支付宝、银联、Paypal 支付组件封装
  7. 动态规划——最长递增子序列
  8. Unity Shader - 实现类似镜面反射、水面扰动效果
  9. 入门图形学:光照模型(二)
  10. 绘制炫酷的地图,不只是pyecharts!