一种高维数据快速搜索方法技术

技术编号:26170829 阅读:21 留言:0更新日期:2020-10-31 13:40
本发明专利技术提供一种高维数据快速搜索方法,包括如下步骤:1)从根开始计算,根节点作为父节点,栈清空,DIST取最大值,记数器CNT置为0;2).取出父节点指向的当前向量对应的分类维s和中间値MEAN,计算Y(s)跟MEAN差的平方SQRT;3).比较DIST与SQRT的大小;4).比较Y(s)与MEAN的大小:5).按照先进后出FILO方式进行出栈操作,生成新的父节点;6).判断栈是否为空;7).搜索中止,获得搜索结果。本发明专利技术所给出这种能够自动生成优先序列的查找模型和方法,解决了BBF方式存在的最优排序耗时的问题,可以获得更高的计算性价比,为大数据高维搜索提供了全新的更有效的解决方案。

【技术实现步骤摘要】
一种高维数据快速搜索方法
本专利技术属于大数据,计算机软件和信息技术处理领域,对高维数据搜索计算提供快速计算模型,以实现数据的快速计算搜索的方法。
技术介绍
对一个规模为n的一维数组,遍历型数据查找的计算量是O(n),通过排序,可以获得O(log(n))规模的查找计算量,因此称为快速查找。一旦数组维数超过1,一维情况的快速查找就无法实现了。不过,人们按照一维快速查找思路,提出了KD树的多维建模方法,也可以实现类似一维的查找算法,有时也能接近O(log(n))的计算量。遗憾的是,这种方法对于数据规模巨大的数据集是有效的,而且数据规模是维数的指数幂次量级,但大部分应用往往到不了这个规模,计算效率也就变得低效了,甚至比遍历计算还差。如果使用大写字母X,Y表示一个维数为d的数组,也称向量。两个向量的距离用欧氏距离定义为D(X,Y)=(1)其中X=(x1,x2,...,xd),Y=(y1,y2,...,yd)。对于一个向量集,我们用X1,X2,...,Xn表示n个数据的d维向量数组,高维数据搜索的目标是对一个目标向量Y寻找一个向量集中最近的数,也即满足(2)这个问题的求解很简单,就是逐一计算Y与每个向量Xi的距离,取最小的那个。这种遍历型计算也称为暴力计算,其计算量是O(n)级的。当维数d和集合数目n很大时,计算量是很可观的。为了降低计算量,加快搜索速度,人们提出了KD树的平衡二叉树数据结构。把向量集X1,X2,...,Xn存贮为二叉树的节点,然后通过寻求二叉树的叶节点,对(2)实现快速计算,这种计算,不需要比较向量集的所有点,从而实现数据的快速查找。二叉树的构造,通过计算各维向量的均方差,找出方差最大的那个子维数,作为当前维,按这个子维排序找到最中间向量,作为根节点,然后把向量集从中间向量分成左右两个子集,再把每个子集当成集合各自继续按上述方法划分,形成下级节点,直到子集只剩一个元素,成为叶节点。最终形成平衡二叉树。上述二叉树的经典搜索方法,对于查询向量Y,从树的根节点开始,根据当前节点的子维数s判断,如果Y(s)大于中间变量,走左分支,否则走右分支,直到叶节点结束。然后从叶节点开始向上回溯,并根据回溯结果,进入其他分支。这种经典计算,通过分维比较,找到一个接近最优的解,表面看省去很多距离计算,但它浪费了中间部分的很多关键信息。当数据向量集数目不大,效率很差,甚至比暴力计算还慢。为此,LOWE提出了一种搜索算法,称为BBF,改进了这种经典回溯法,在从根到叶的回溯过程中构造一个优先序列,每次回溯都不断调整这个优先序列,由于丰富了中间信息,效果比经典方法更快,特别对于中等数据集,BBF搜索成为最好的搜索技术之一,但是尽管BBF对优先序列的排序用了快速堆栈技术,但维护一个堆栈优先级也是很耗计算成本的,限制了它在某些方面的应用。
技术实现思路
鉴于上述BBF最优序列的维护更新,需要不断排序,造成许多计算浪费。能否自动生成一个接近最优的序列,是本专利技术的关键点。本专利技术跟经典计算和BBF计算最大的区别在于,后两者都有一个回溯过程,从叶节点开始计算向量距离。本专利技术则不需要回溯,直接从根节点开始计算,边计算边找路径,这种计算看似浪费了资源,实则维护了一个半最优序列,通过不断深入,可以获得最好的效果。本专利技术跟BBF一样需要一个栈操作,栈自动生成了半最优序列,由于没有栈排序,因此其效率更高。假设基于数据集X1,X2,...,Xn的KD树已经生成,左分支大,右分支小。如果排序相反,则下面描述须适当调整。本专利技术对于目标向量Y的查询,可用如下步骤实现搜索过程:1).从根开始计算,根节点作为父节点,栈清空,DIST取最大值,记数器CNT置为0,所述DIST表示两个向量的距离平方;2).取出父节点指向的当前向量对应的分类维s和中间値MEAN,计算Y(s)跟MEAN差的平方SQRT;3).比较DIST与SQRT的大小,如果DIST大于SQRT,则进入以下步骤:3.1)计算Y(s)与当前向量的距离平方TMP,如果TMP小于DIST,则DIST=TMP;3.2)计数器CNT加1,如果超过指定数,跳转至步骤7);4).比较Y(s)与MEAN的大小,4.1)如果Y(s)大于MEAN,则进入以下步骤:4.1a)判断右孩子是否为空,如果右孩子非空,同时DIST大于SQRT,则右孩子进栈;4.1b)判断左孩子是否为空,如果左孩子非空,则左孩子进栈,否则跳转至步骤5);4.2)所述步骤4.1)中如果条件不满足则进入以下步骤:4.2a)判断左孩子是否为空,如果左孩子非空,同时DIST大于SQRT,则左孩子进栈;4.2b)判断右孩子是否为空,如果右孩子非空,则右孩子进栈,否则跳转至步骤5);5).按照先进后出FILO方式进行出栈操作,生成新的父节点;6).判断栈是否为空,如果栈空则跳转至步骤7),否则跳转至步骤2);7).搜索中止,获得搜索结果。上述搜索过程中的步骤4.1)和步骤4.2),顺序不可改变,就可以维护一个接近最优的栈序列。如果KD树的建立,是右边比左边大,只要在步骤4.1)和步骤4.2)及下面的描述中,左右孩子互换就可以了。本专利技术所给出这种能够自动生成优先序列的查找模型和方法,解决了BBF方式存在的最优排序耗时的问题,可以获得更高的计算性价比,为大数据高维搜索提供了全新的更有效的解决方案。附图说明图1为本专利技术的步骤框图。具体实施方式以下通过特定的具体实例说明本专利技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本专利技术的其他优点与功效。本专利技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本专利技术的精神下进行各种修饰或改变。本专利技术的目的在于提供一种快速搜索方法,用于解决BBF存在的最优排序耗时的问题。本实施例中采用C语言,便于指针操作。构造一个树节点,该节点至少包括指针类型*left左孩子,*right右孩子,建树过程中的中间値mean,以及建树过程用到的分维値维数s,它是根据数据杂散程度决定的,不同的杂散方式建树节点可能稍有不同,但不影响本专利技术的搜索过程。假设*parent是当前搜索的父指针,*stack是算法维护的栈指针,用来存贮指针节点,DIST(X,Y)是距离函数,计算向量X,Y的距离平方,dist是当前距离,tmp,tmp1是临时变量,cnt是计数器,那么搜索算法的实施流程如下:1).从根开始计算,根节点作为父节点,栈清空,DIST取最大值,记数器CNT置为0,用c语言伪代码表达为:dist=0x7fffffff,cnt=0;2).取出父节点指向的当前向量对应的分类维s和中间値MEAN,计算Y(s)跟MEAN差的平方SQRT,c语言伪代码表达为:tmp=Y[parent->s]–parent->mean,sqrt=本文档来自技高网
...

【技术保护点】
1.一种高维数据快速搜索方法,其特征在于:该方法采用如下步骤实现:/n1).从根开始计算,根节点作为父节点,栈清空,DIST取最大值,记数器CNT 置为 0,其中DIST表示两个向量的距离平方;/n2). 取出父节点指向的当前向量对应的分类维s和中间値MEAN, 计算Y(s)跟MEAN差的平方SQRT,其中Y表示查询向量,s为当前节点的子维数;/n3). 比较DIST与SQRT的大小,如果DIST大于SQRT,则进入以下步骤:/n3.1).计算Y(s)与当前向量的距离平方TMP,如果TMP小于DIST,则DIST= TMP;/n3.2).计数器CNT加1,如果超过指定数,跳转至步骤7);/n4). 比较Y(s)与MEAN的大小,/n4.1).如果Y(s)大于MEAN, 则进入以下步骤:/n4.1a).判断右孩子是否为空,如果右孩子非空,同时DIST大于SQRT,则右孩子进栈;/n4.1b).判断左孩子是否为空,如果左孩子非空,则左孩子进栈,否则跳转至步骤5);/n4.2).所述步骤4.1)中如果条件不满足则进入以下步骤:/n4.2a).判断左孩子是否为空,如果左孩子非空,同时DIST大于SQRT,则左孩子进栈;/n4.2b).判断右孩子是否为空,如果右孩子非空,则右孩子进栈,否则跳转至步骤5);/n5).按照先进后出FILO方式进行出栈操作,生成新的父节点;/n6). 判断栈是否为空,如果栈空则跳转至步骤7),否则跳转至步骤2);/n7). 搜索中止,获得搜索结果。/n...

【技术特征摘要】
1.一种高维数据快速搜索方法,其特征在于:该方法采用如下步骤实现:
1).从根开始计算,根节点作为父节点,栈清空,DIST取最大值,记数器CNT置为0,其中DIST表示两个向量的距离平方;
2).取出父节点指向的当前向量对应的分类维s和中间値MEAN,计算Y(s)跟MEAN差的平方SQRT,其中Y表示查询向量,s为当前节点的子维数;
3).比较DIST与SQRT的大小,如果DIST大于SQRT,则进入以下步骤:
3.1).计算Y(s)与当前向量的距离平方TMP,如果TMP小于DIST,则DIST=TMP;
3.2).计数器CNT加1,如果超过指定数,跳转至步骤7);
4).比较Y(s)与MEAN的大小,
4.1).如果Y(s)大于MEAN,则进入以下步骤:
4.1a).判断右孩子是否为空,如果右孩子非空,同时DIST大于SQRT,则右孩子进栈;
4.1b).判断左孩子是否为空,如果左孩子非空,则左孩子进栈,否则跳转至步骤5);
4.2).所述步...

【专利技术属性】
技术研发人员:赵风光
申请(专利权)人:上海闻通信息科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1