搜索算法
A. 运动估计的搜索算法
匹配误差函数,可以用各种优化方法进行最小化,这就需要我们开发出高效的运动搜索算法,
主要的几种算法归纳如下: 为当前帧的一个给定块确定最优位移矢量的全局搜索算法方法是:在一个预先定义的搜索区域
内,把它与参考帧中所有的候选块进行比较,并且寻找具有最小匹配误差的一个。这两个块之间的
位移就是所估计的 MV,这样做带来的结果必然导致极大的计算量。
选择搜索区域一般是关于当前块对称的,左边和右边各有 Rx 个像素,上边和下边各有 Ry个像素。
如果已知在水平和垂直方向运动的动态范围是相同的,那么 Rx=Ry=R。估计的精度是由搜索的步长决定的,步长是相邻两个候选块在水平或者垂直方向上的距离。通常,沿着两个方向使用相同的步长。在最简单的情况下,步长是一个像素,称为整数像素精度搜索,该种算法也称为无损搜索算法。 由于在穷尽块匹配算法中搜索相应块的步长不一定是整数,一般来说,为了实现 1/K像素步长,对参考帧必须进行 K倍内插。根据实验证明,与整像素精度搜索相比,半像素精度搜索在估计精度上有很大提高,特别是对于低清晰度视频。
但是,应用分数像素步长,搜索算法的复杂性大大增加,例如,使用半像素搜索,搜索点的总数比整数像素精度搜索大四倍以上。
那么,如何确定适合运动估计的搜索步长,对于视频编码的帧间编码来说,即使得预测误差最小化。 快速搜索算法和全局搜索算法相比,虽然只能得到次最佳的匹配结果,但在减少运算量方面效果显着。
1) 二维对数搜索法
这种算法的基本思路是采用大菱形搜索模式和小菱形搜索模式,步骤如图 6.4.20 所示,从相应于零位移的位置开始搜索,每一步试验菱形排列的五个搜索点。下一步,把中心移到前一步找到的最佳匹配点并重复菱形搜索。当最佳匹配点是中心点或是在最大搜索区域的边界上时,就减小搜索步长(菱形的半径) 。否则步长保持不变。当步长减小到一个像素时就到达了最后一步,并且在这最
后一步检验九个搜索点。初始搜索步长一般设为最大搜索区域的一半。
其后这类算法在搜索模式上又做了比较多的改进,在搜索模式上采用了矩形模式,还有六边形模式、十字形模式等等。
2) 三步搜索法
这种搜索的步长从等于或者略大于最大搜索范围的一半开始。第一步,在起始点和周围八个 “1”标出的点上计算匹配误差,如果最小匹配误差在起始点出现,则认为没有运动;第二步,以第一步中匹配误差最小的点(图中起始点箭头指向的“1”)为中心,计算以“2”标出的 8个点处的匹配误差。注意,在每一步中搜索步长搜都比上一步长减少一半,以得到更准确的估计;在第三步以后就能得到最终的估计结果,这时从搜索点到中心点的距离为一个像素。
但是,上述一些快速算法更适合用于估计运动幅度比较大的场合,对于部分运动幅度小的场合,它们容易落入局部最小值而导致匹配精度很差,已经有很多各种各样的视频流证明了这一点。
现在,针对这一缺点,国内外诸多专家学者也提出了相应的应对措施,特别是针对H.264编码标准要求的一些快速算法的改进,并取得卓越的效果。例如[7]中提到的基于全局最小值具有自适应性的快速算法,这种算法通过在每一搜索步骤选择多个搜索结果,基于这些搜索结果之间的匹配误差的不同得到的最佳搜索点,因而可以很好地解决落入局部最小值的问题。
[8]中提到一种适用于H.264的基于自适应搜索范围的快速运动估计算法,经过实验证明对于如salesman等中小运动序列,其速度可接近全局搜索算法的400倍,接近三步搜索算法的4倍;而对于大运动序列,如table tennis,该算法则会自动调节搜索点数以适应复杂的运动。当从总体上考察速度方面的性能时,可以看到,该算法平均速度是全局搜索算法的287.4倍,三步搜索的2.8倍。 分级搜索算法的基本思想是从最低分辨率开始逐级精度的进行不断优化的运动搜索策略,首先取得两个原始图象帧的金子塔表示,从上到下分辨率逐级变细,从顶端开始,选择一个尺寸比较大的数据块进行一个比较粗略的运动搜索过程,对在此基础上进行亚抽样(即通过降低数据块尺寸(或提高抽样分辨率)和减少搜索范围的办法)进行到下一个较细的级来细化运动矢量,而一个新的搜索过程可以在上一级搜索到的最优运动矢量周围进行。在亚抽样的过程中也有着不同的抽样方式和抽样滤波器。这种方法的优点是运算量的下降比例比较大,而且搜索的比较全面。
缺点是由于亚抽样或者滤波器的采用而使内存的需求增加,另外如果场景细节过多可能会容易落入局部最小点。 由于物体的运动千变万化,很难用一种简单的模型去描述,也很难用一种单一的算法来搜索最佳运动矢量,因此实际上大多采用多种搜索算法相组合的办法,可以在很大程度上提高预测的有效性和鲁棒性。
事实上,在运动估计时也并不是单一使用上述某一类搜索算法,而是根据各类算法的优点灵活组合采纳。在运动幅度比较大的情况下可以采用自适应的菱形搜索法和六边形搜索法,这样可以大大节省码率而图象质量并未有所下降。在运动图象非常复杂的情况下,采用全局搜索法在比特数相对来说增加不多的情况下使得图象质量得到保证。 H.264 编码标准草案推荐使用 1/4分数像素精度搜索。[6]中提到在整像素搜索时采用非对称十字型多层次六边形格点运动搜索算法,然后采用钻石搜索模型来进行分数像素精度运动估计。
解码器要求传送的比特数最小化,而复杂的模型需要更多的比特数来传输运动矢量,而且易受噪声影响。因此,在提高视频的编码效率的技术中,运动补偿精度的提高和比特数最小化是相互矛盾的,这就需要我们在运动估计的准确性和表示运动所用的比特数之间作出折中的选择。它的效果与选用的运动模型是密切相关的。
B. 什么是A搜索算法
A*搜索算法,俗称A星算法,作为启发式搜索算法中的一种,这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
C. 搜索算法的运算原理
搜索算法实际上是根据初始条件和扩展规则构造一棵“解答树”并寻找符合目标状态的节点的过程。所有的搜索算法从最终的算法实现上来看,都可以划分成两个部分——控制结构(扩展节点的方式)和产生系统(扩展节点),而所有的算法优化和改进主要都是通过修改其控制结构来完成的。其实,在这样的思考过程中,我们已经不知不觉地将一个具体的问题抽象成了一个图论的模型——树,即搜索算法的使用第一步在于搜索树的建立。
由图一可以知道,这样形成的一棵树叫搜索树。初始状态对应着根结点,目标状态对应着目标结点。排在前的结点叫父结点,其后的结点叫子结点,同一层中的结点是兄弟结点,由父结点产生子结点叫扩展。完成搜索的过程就是找到一条从根结点到目标结点的路径,找出一个最优的解。这种搜索算法的实现类似于图或树的遍历,通常可以有两种不同的实现方法,即深度优先搜索(DFS——Depth First search)和广度优先搜索(BFS——Breadth First Search)。
D. 搜索引擎算法都有哪些
这个的话一般来说都不是很清楚,
但如果是一些大体的算法 如下: 谷歌PR值算法:(1-d)+d/(pr(t)/pr(y)+……pr(tn)/pr(yn)+……)
D代表0.85 而pr(t)是指友情链接的对方网站的PR值 pr(y)是指友情链接的对方网站的导出友情链接的数量
E. 二分搜索算法
#include <stdio.h>
#include <stdlib.h>
int a[100]={1,2,3,5,12,12,12,15,29,55};//数组中的数(由小到大)
int k;
void found(int &x,int &y,int k) //在x与y之间,要找k
{
if(x>y)return;
int m=x+(y-x)/2;
if(a[m]==k)x=y=m;
else if(a[m]>k)found(x,y=m-1,k);//找左边
else found(x=m+1,y,k);//找右边
}
int main()
{ int i=0,j=9;
scanf("%d",&k);//输入要找的数字k
found(i,j,k);//从数组a[0]到a[9]中找k
if(i==j)printf("a[%d]==%d ",i,k);
else printf("a[%d]==%d a[%d]==%d, k==%d ",j,a[j],i,a[i],k);
return 0;
}
F. 请问什么是搜索算法
搜索算法是利用计算机的高性能来有目的的穷举一个问题的部分或所有的可能情况,从而求出问题的解
的一种方法。搜索过程实际上是根据初始条件和扩展规则构造一棵解答树并寻找符合目标状态的节点的过程。
所有的搜索算法从其最终的算法实现上来看,都可以划分成两个部分——控制结构和产生系统,而所有的算
法的优化和改进主要都是通过修改其控制结构来完成的。
G. 百度搜索引擎的算法是怎样的
网络基础算法分析:链接流行度核心算法+网络推广+框计算+开放平台
1.【链接流行度】和大多数关键词搜索引擎一样,页面URL地址链接的流行程度为核心的基础核心算法;
2.【网络推广】起先叫做网络竞价,后改为网络推广,包括关键词竞价算法和网盟推广算法两部分;
3.【框计算】语义分析、行为分析、智能人机交互、海量基础算法等。
网络收录流程
1.【页面的收录】搜索蜘蛛程序>收录的页面链接>现新的链接并爬行>的页面及内容合格>录快照并分类存储>立页面基本数据(页面URL、页面关键词、页面标题描述、收录来源、收录时间、内容简述、页面权重、更新周期);
2.【网络免费产品】网络、网络文库、网络贴吧、网络知道、网络空间等网络自身免费产品的页面收录;
3.【网络开放平台】主要是站长提供的结构化数据(网站与网络的深度合作,如汽车网站的参数数据、网络知道接口等)和开发者提交的各种应用(开发者加入网络开发者中心并提交相关应用通过审核);
4.【网络竞价推广】网站主开通网络推广账户>付费并通过网站审核>辑关键词广告及推广计划>交网络推广后台;
5.【网络网盟推广】网站主开通网络推广账户>付费并通过网站审核>辑网盟广告及推广计划>交网络推广后台;网络联盟广告合作伙伴站长参与网盟推广并审核通过》预留广告位并做好网盟接口。
网络检索流程
搜索需求>义分析>据库检索>名显示反馈
1.【网络搜索页面的检索】用户输入关键词并检索>架算(语义分析及分词判断、行为分析、智能人机交互、海量基础算法)>计算结果(开放平台的数据、传统搜索结果、网络推广结果、网络自身产品结果)>计算结果排名。
2.【网络网盟页面的推荐】用户访问网络网盟某合作网站页面>盟算法根据用户浏览器大量有价值的搜索Cookis计算并推荐广告>户被有质量的广告吸引并点击>盟推广后台引导用户进入参与网盟推广的网站相应页面。
H. 常见的搜索算法有哪几种
广度优先搜索(BFS)
深度优先搜索(DFS)
爬山法(Hill Climbing)
最佳优先算法(Best-first search strategy)
回溯法 (Backtracking)
分支限界算法(Branch-and-bound Search Algorithm)
I. 搜索引擎核心算法是什么
搜索引擎核心算法是获得网站网页资料,建立数据库并提供查询的系统。
索引擎的数据库是依靠一个叫“网络机器人(crawlers)”或叫“网络蜘蛛(Spider)”的软件,它通过网络上的各种链接自动获取大量的网页信息内容,并按照一定的规则进行分析和组织。谷歌和网络是典型的搜索引擎系统。
为了更好地服务于web搜索,搜索引擎分析和排序规则也就是说,搜索引擎算法正在发生变化。由于互联网上无数的网站页面,搜索引擎蜘蛛无法将所有网页下载并保存到服务器上。
因此,许多搜索引擎蜘蛛只抓取那些重要的页面,而评估爬行重要性的主要依据是链接宽度(以及外部链接的数量和质量)。
(9)搜索算法扩展阅读:
搜索引擎核心算法的优化:
1、在搜索前,根据条件降低搜索规模。
2、广度优先搜索中,被处理过的节点,充分释放空间。
3、给据问题的约束条件进行剪枝。
4、利用回溯算法进行优化:回溯和深度优先是相似的,区别在于当一个节点被扩展时,不是所有的子节点都被扩展,而是只有一个子节点被扩展。所以它是盲的,但占用的内存更少。
J. 什么是路径搜索算法
举个例子你大概就明白了,假设从上海东方明珠电视塔到北京天安门有N条线路,可以上海-天津-北京,上海-南京-北京,上海-广州-西藏-北京等等等,选择一条需要的线路这就是路径搜索,用来实现该选择的算法是路径搜索算法,可以选择最短路径,关键路径,如果有费用(权值)就可以选择最便宜路径(权最小),如果有路径需用时(飞机、火车,有些地方只有单一交通工具)就可以选择时间最短路径
用于计算机中的路径搜索就比较广泛了,但大体就是根据上述情况变化来得