三种搜索算法
① 常见的搜索算法有哪几种
广度优先搜索(BFS)
深度优先搜索(DFS)
爬山法(Hill Climbing)
最佳优先算法(Best-first search strategy)
回溯法 (Backtracking)
分支限界算法(Branch-and-bound Search Algorithm)
② 深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系
1、何谓启发式搜索算法
在说它之前先提提状态空间搜索.状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程.通俗点说,就是 在解一个问题时,找到一条解题的过程可以从求解的开始到问题的结果(好象并不通俗哦).由于求解问题的过程中分枝有很多,定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间.问题的求解实际上就是在这个图中找到一条路径可以从开始到结果.这个寻找的过程就是状态空间搜索.
常用的状态空间搜索有深度优先和广度优先.广度优先是从初始状态一层一层向下找,直到找到目标为止.深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,以至找到目标为止.这两种算法在数据结构书中都有描述,可以参看这些书得到更详细的解释.
前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举.这在状态空间不大的情况下是很合适的算法,可是当状态空间十分大,且不预测的情况下就不可取了.他的效率实在太低,甚至不可完成.在这里就要用到启发式搜索了.
启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提 到了效率.在启发式搜索中,对位置的估价是十分重要的.采用了不同的估价可以有不同的效果.我们先看看估价是如何表示的.
启发中的估价是用估价函数表示的,如:
f(n) = g(n) + h(n)
其中f(n) 是节点n的估价函数,g(n)实在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价.在这里主要是h(n)体现了搜 索的启发信息,因为g(n)是已知的.如果说详细点,g(n)代表了搜索的广度的优先趋势.但是当h(n) >> g(n)时,可以省略g(n),而提高效率.这些就深了,不懂也不影响啦!我们继续看看何谓A*算法.
2、初识A*算法
启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法等等.当然A*也是.这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的 策略不同.象局部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去.这种搜索的结果很明显,由于舍弃了 其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳.最好优先就聪明多了,他在搜索时,便没有舍弃节点 (除非该节点是死节点),在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”.这样可以有效的防止“最佳节点”的丢失.那么 A*算法又是一种什么样的算法呢?其实A*算法也是一种最好优先的算法.只不过要加上一些约束条件罢了.由于在一些问题求解时,我们希望能够求解出状态空 间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性.A* 算法是一个可采纳的最好优先算法.A*算法的估价函数可表示为:
f'(n) = g'(n) + h'(n)
这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)是n到目标的最断路经的启发值.由于这个f'(n)其实是无法预先知道 的,所以我们用前面的估价函数f(n)做近似.g(n)代替g'(n),但 g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)
③ 几种常见的查找算法之比较
二分法平均查找效率是O(logn),但是需要数组是排序的。如果没有排过序,就只好先用O(nlogn)的预处理为它排个序了。而且它的插入比较困难,经常需要移动整个数组,所以动态的情况下比较慢。
哈希查找理想的插入和查找效率是O(1),但条件是需要找到一个良好的散列函数,使得分配较为平均。另外,哈希表需要较大的空间,至少要比O(n)大几倍,否则产生冲突的概率很高。
二叉排序树查找也是O(logn)的,关键是插入值时需要做一些处理使得它较为平衡(否则容易出现轻重的不平衡,查找效率最坏会降到O(n)),而且写起来稍微麻烦一些,具体的算法你可以随便找一本介绍数据结构的书看看。当然,如果你用的是c语言,直接利用它的库类型map、multimap就可以了,它是用红黑树实现的,理论上插入、查找时间都是O(logn),很方便,不过一般会比自己实现的二叉平衡树稍微慢一些。
④ 谈谈几种接触搜索算法的比较麻烦告诉我
接触分析计算主要是接触界面的搜寻方法和法向接触力的计算问题.
常见的有主从面法、级域法和一体化算法 是接触点的搜索算法,这三种算法中,最早的是主从面法,主从面法中从节点不允许穿透主动面,但主动面上的接触点可以穿透从动面。故主从面法只需搜寻与主动面接触的节点。主从面法的一个缺陷是——不能处理同一个接触面内发生的情况,比如子接触问题。与其他两种方法相比,主从面法只考虑接触体中一半的接触点,所以其计算工作量是比较小的。级域法在相互靠近的接触块中寻找接触对;一体化算法总是在所有的接触块中寻找。由于计算方法的不同,这三种方法计算时间依赖于接触面的大小。另一方面主从法之所以被广泛采用,是他的算法很成熟,编程也容易,而级域法需要从高到低逐级进行,编程就很困难,而且其矢量化运算能力也不行。
所以总体来说,一体化算法是最优越的。
除了这三种算法,还有一些别的算法:比如 BCM,边界搜索,近些年一些智能算法也被广泛引入进来!
除了接触点的搜寻算法,常用的接触力算法为:拉格朗日乘子法和罚函数法。拉格朗日乘子法不允许接触边界的互相穿透,能准确描述几何约束条件,是一种精确的接触力算法,但它与显式算法不相容,要求特殊的数值处理。但该方法在每个接触点处要求引入乘子,导致系统自由度的增加,使计算效率降低。而罚函数法允许接触面之间的互相穿透,并通过罚子将接触力大小和接触边界的穿透量联系起来,接触力正比于边界穿透量。此方法比较简单单也适合于显式算法,能在系统自由度不增加的情况下进行数值求解。但它影响显式算法中的临界时间步长。罚因子的好坏还影响计算结果的可靠性。
⑤ 深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系
1、何谓启发式搜索算法
在说它之前先提提状态空间搜索。状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。通俗点说,就是 在解一个问题时,找到一条解题的过程可以从求解的开始到问题的结果(好象并不通俗哦)。由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确 定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间。问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。 这个寻找的过程就是状态空间搜索。
常用的状态空间搜索有深度优先和广度优先。广度优先是从初始状态一层一层向下找,直到找到目标为止。深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,以至找到目标为止。这两种算法在数据结构书中都有描述,可以参看这些书得到更详细的解释。
前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举。这在状态空间不大的情况下是很合适的算法,可是当状态空间十分大,且不预测的情况下就不可取了。他的效率实在太低,甚至不可完成。在这里就要用到启发式搜索了。
启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提 到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。我们先看看估价是如何表示的。
启发中的估价是用估价函数表示的,如:
f(n) = g(n) + h(n)
其中f(n) 是节点n的估价函数,g(n)实在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。在这里主要是h(n)体现了搜 索的启发信息,因为g(n)是已知的。如果说详细点,g(n)代表了搜索的广度的优先趋势。但是当h(n) >> g(n)时,可以省略g(n),而提高效率。这些就深了,不懂也不影响啦!我们继续看看何谓A*算法。
2、初识A*算法
启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法等等。当然A*也是。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的 策略不同。象局部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了 其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。最好优先就聪明多了,他在搜索时,便没有舍弃节点 (除非该节点是死节点),在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。那么 A*算法又是一种什么样的算法呢?其实A*算法也是一种最好优先的算法。只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出状态空 间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A* 算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为:
f'(n) = g'(n) + h'(n)
这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)是n到目标的最断路经的启发值。由于这个f'(n)其实是无法预先知道 的,所以我们用前面的估价函数f(n)做近似。g(n)代替g'(n),但 g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)<=h'(n)才可(这一点特别 的重要)。可以证明应用这样的估价函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。哈。你懂了吗?肯定没 懂。接着看。
举一个例子,其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。实际也是。当然它是一种最臭的A*算法。
再说一个问题,就是有关h(n)启发函数的信息性。h(n)的信息性通俗点说其实就是在估计一个节点的值时的约束条件,如果信息越多或约束条件越多则排除 的节点就越多,估价函数越好或说这个算法越好。这就是为什么广度优先算法的那么臭的原因了,谁叫它的h(n)=0,一点启发信息都没有。但在游戏开发中由 于实时性的问题,h(n)的信息越多,它的计算量就越大,耗费的时间就越多。就应该适当的减小h(n)的信息,即减小约束条件。但算法的准确性就差了,这 里就有一个平衡的问题。可难了,这就看你的了!
好了我的话也说得差不多了,我想你肯定是一头的雾水了,其实这是写给懂A*算法的同志看的。哈哈。你还是找一本人工智能的书仔细看看吧!我这几百字是不足以将A*算法讲清楚的。只是起到抛砖引玉的作用希望大家热情参与吗。
⑥ 大数据最常用的算法有哪些
奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提到他做了一个调查,参与者大多数是计算机科学家,他请这些科学家投票选出最重要的算法,以下是这次调查的结果,按照英文名称字母顺序排序。
大数据等最核心的关键技术:32个算法
1、A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。
2、集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。
3、二分查找(Binary Search)——在线性数组中找特定值的算法,每个步骤去掉一半不符合要求的数据。
4、分支界定算法(Branch and Bound)——在多种最优化问题中寻找特定最优化解决方案的算法,特别是针对离散、组合的最优化。
5、Buchberger算法——一种数学算法,可将其视为针对单变量最大公约数求解的欧几里得算法和线性系统中高斯消元法的泛化。
6、数据压缩——采取特定编码方案,使用更少的字节数(或是其他信息承载单元)对信息编码的过程,又叫来源编码。
7、Diffie-Hellman密钥交换算法——一种加密协议,允许双方在事先不了解对方的情况下,在不安全的通信信道中,共同建立共享密钥。该密钥以后可与一个对称密码一起,加密后续通讯。
8、Dijkstra算法——针对没有负值权重边的有向图,计算其中的单一起点最短算法。
9、离散微分算法(Discrete differentiation)。
10、动态规划算法(Dynamic Programming)——展示互相覆盖的子问题和最优子架构算法
11、欧几里得算法(Euclidean algorithm)——计算两个整数的最大公约数。最古老的算法之一,出现在公元前300前欧几里得的《几何原本》。
12、期望-最大算法(Expectation-maximization algorithm,又名EM-Training)——在统计计算中,期望-最大算法在概率模型中寻找可能性最大的参数估算值,其中模型依赖于未发现的潜在变量。EM在两个步骤中交替计算,第一步是计算期望,利用对隐藏变量的现有估计值,计算其最大可能估计值;第二步是最大化,最大化在第一步上求得的最大可能值来计算参数的值。
13、快速傅里叶变换(Fast Fourier transform,FFT)——计算离散的傅里叶变换(DFT)及其反转。该算法应用范围很广,从数字信号处理到解决偏微分方程,到快速计算大整数乘积。
14、梯度下降(Gradient descent)——一种数学上的最优化算法。
15、哈希算法(Hashing)。
16、堆排序(Heaps)。
17、Karatsuba乘法——需要完成上千位整数的乘法的系统中使用,比如计算机代数系统和大数程序库,如果使用长乘法,速度太慢。该算法发现于1962年。
18、LLL算法(Lenstra-Lenstra-Lovasz lattice rection)——以格规约(lattice)基数为输入,输出短正交向量基数。LLL算法在以下公共密钥加密方法中有大量使用:背包加密系统(knapsack)、有特定设置的RSA加密等等。
19、最大流量算法(Maximum flow)——该算法试图从一个流量网络中找到最大的流。它优势被定义为找到这样一个流的值。最大流问题可以看作更复杂的网络流问题的特定情况。最大流与网络中的界面有关,这就是最大流-最小截定理(Max-flow min-cut theorem)。Ford-Fulkerson 能找到一个流网络中的最大流。
20、合并排序(Merge Sort)。
21、牛顿法(Newton’s method)——求非线性方程(组)零点的一种重要的迭代法。
22、Q-learning学习算法——这是一种通过学习动作值函数(action-value function)完成的强化学习算法,函数采取在给定状态的给定动作,并计算出期望的效用价值,在此后遵循固定的策略。Q-leanring的优势是,在不需要环境模型的情况下,可以对比可采纳行动的期望效用。
23、两次筛法(Quadratic Sieve)——现代整数因子分解算法,在实践中,是目前已知第二快的此类算法(仅次于数域筛法Number Field Sieve)。对于110位以下的十位整数,它仍是最快的,而且都认为它比数域筛法更简单。
24、RANSAC——是“RANdom SAmple Consensus”的缩写。该算法根据一系列观察得到的数据,数据中包含异常值,估算一个数学模型的参数值。其基本假设是:数据包含非异化值,也就是能够通过某些模型参数解释的值,异化值就是那些不符合模型的数据点。
25、RSA——公钥加密算法。首个适用于以签名作为加密的算法。RSA在电商行业中仍大规模使用,大家也相信它有足够安全长度的公钥。
26、Sch?nhage-Strassen算法——在数学中,Sch?nhage-Strassen算法是用来完成大整数的乘法的快速渐近算法。其算法复杂度为:O(N log(N) log(log(N))),该算法使用了傅里叶变换。
27、单纯型算法(Simplex Algorithm)——在数学的优化理论中,单纯型算法是常用的技术,用来找到线性规划问题的数值解。线性规划问题包括在一组实变量上的一系列线性不等式组,以及一个等待最大化(或最小化)的固定线性函数。
28、奇异值分解(Singular value decomposition,简称SVD)——在线性代数中,SVD是重要的实数或复数矩阵的分解方法,在信号处理和统计中有多种应用,比如计算矩阵的伪逆矩阵(以求解最小二乘法问题)、解决超定线性系统(overdetermined linear systems)、矩阵逼近、数值天气预报等等。
29、求解线性方程组(Solving a system of linear equations)——线性方程组是数学中最古老的问题,它们有很多应用,比如在数字信号处理、线性规划中的估算和预测、数值分析中的非线性问题逼近等等。求解线性方程组,可以使用高斯—约当消去法(Gauss-Jordan elimination),或是柯列斯基分解( Cholesky decomposition)。
30、Strukturtensor算法——应用于模式识别领域,为所有像素找出一种计算方法,看看该像素是否处于同质区域( homogenous region),看看它是否属于边缘,还是是一个顶点。
31、合并查找算法(Union-find)——给定一组元素,该算法常常用来把这些元素分为多个分离的、彼此不重合的组。不相交集(disjoint-set)的数据结构可以跟踪这样的切分方法。合并查找算法可以在此种数据结构上完成两个有用的操作:
查找:判断某特定元素属于哪个组。
合并:联合或合并两个组为一个组。
32、维特比算法(Viterbi algorithm)——寻找隐藏状态最有可能序列的动态规划算法,这种序列被称为维特比路径,其结果是一系列可以观察到的事件,特别是在隐藏的Markov模型中。
以上就是Christoph博士对于最重要的算法的调查结果。你们熟悉哪些算法?又有哪些算法是你们经常使用的?
⑦ 百度搜索引擎的算法是怎样的
衡量网页质量的维度
网络搜索引擎在衡量网页质量时,会从以下三个维度综合考虑给出一个质量打分。下面会一一介绍这些影响网页质量判断的维度特征:
• 内容质量
• 浏览体验
• 可访问性
一个访问流畅,内容质量高且浏览体验好的网页具有较高的质量;反之,任何一个维度出现问题,都会影响网页的整体质量。下面我们具体介绍下这三个维度。
衡量网页质量的维度——内容质量
网页主体内容是网页的价值所在,是满足用户需求的前提基础。网络搜索引擎评价网页内容质量主要看其主体内容的好坏,以及主体内容是否可以让用户满意。 不同类型网页的主体内容不同,网络搜索引擎判断不同网页的内容价值时,需要关注的点也有区别,如:
• 首页:导航链接和推荐内容是否清晰、有效。
• 文章页:能否提供清晰完整的内容,图文并茂更佳。
• 商品页:是否提供了完整真实的商品信息和有效的购买入口。
• 问答页:是否提供了有参考价值的答案。
• 下载页:是否提供下载入口,是否有权限限制,资源是否有效。
• 文档页:是否可供用户阅读,是否有权限限制。
• 搜索结果页:搜索出来的结果是否与标题相关。
网络搜索引擎考量网页内容质量的维度非常多,最为重要的是:成本;内容完整;信息真实有效以及安全。下面我们通过举例来感受一下网络搜索引擎是如何对网页的内容质量进行分类的,请站长对比自己站点的页面,站在搜索引擎和用户的角度为自己打分:
1、内容质量好:
网络搜索引擎认为内容质量好的网页,花费了较多时间和精力编辑,倾注了编者的经验和专业知识;内容清晰、完整且丰富;资源有效且优质;信息真实有效;安全无毒;不含任何作弊行为和意图,对用户有较强的正收益。对这部分网页,网络搜索引擎会提高其展现在用户面前的机率。例如:
• 专业医疗机构发布的内容丰富的医疗专题页面;
• 资深工程师发布的完整解决某个技术问题的专业文章;
• 专业视频网站上,播放清晰流畅的正版电影或影视全集页面;
• 知名B2C网站上,一个完整有效的商品购买页;
• 权威新闻站原创或经过编辑整理的热点新闻报道;
• 经过网友认真编辑,内容丰富的词条;
• 问答网站内,回答的内容可以完美解决提问者的问题。
实例参考:
示例
内容质量
说明
case 3.1.1-1
好
专业医疗网站发布的丰富医疗专题页面
case 3.1.1-2
好
资深工程师发布的完整解决某个技术问题的专业文章
case 3.1.1-3
好
专业视频网站上,播放清晰流畅的正版影视全集页面
case 3.1.1-4
好
京东的一个完整有效的商品购买页
case 3.1.1-5
好
权威新闻站原创的热点新闻的报道
case 3.1.1-6
好
经过网友认真编辑,内容丰富的网络词条
case3.1.1-7
好
网络知道上,完美解决用户问题的问答页
2、内容质量中:
内容质量中等的网页往往能满足用户需求,但未花费较多时间和精力进行制作编辑,不能体现出编者的经验和专业知识;内容完整但并不丰富;资源有效但质量欠佳;信息虽真实有效但属采集得来;安全无毒;不含作弊行为和意图。在互联网中,中等质量网页其实是一个比较大的数量集合,种类面貌也繁杂多样,网络搜索引擎在评价这类网页时往往还要考虑其它非常多因素。在这里,我们仅部分举例来让各位感受一下:
• 论坛类网站里一个普通的帖子;
• 一个普通的问答网页;
• 没有进行任何编辑,直接转载其它网站的新闻;
• 无版权信息的普通电影播放页
• 采集知名小说网站的盗版小说页。
实例参考:
示例
内容质量
说明
case 3.1.2-1
中
网易直接转载了中国新闻网的一篇新闻。
case 3.1.2-2
中
文库上网友上传的“国庆放假安排”新闻
case 3.1.2-3
中
采集起点小说网的盗版小说站
case 3.1.2-4
中
网络贴吧里一个普通的帖子
3、内容质量差:
网络搜索引擎认为主体内容信息量较少,或无有效信息、信息失效过期的都属于内容质量差网页,对用户没有什么实质性的帮助,应该减少其展现的机会。同时,如果一个网站内该类网页的占比过大,也会影响网络搜索引擎对站点的评级,尤其是UGC网站、电商网站、黄页网站要尤其重视对过期、失效网页的管理。例如:
• 已下架的商品页,或已过期的团购页;
• 已过有效期的招聘、交易页面;
• 资源已失效,如视频已删除、软件下载后无法使用等。
4、没有内容质量可言:
没有内容质量可言的网页指那些制作成本很低,粗制滥造;从别处采集来的内容未经最起码的编辑整理即放置线上;挂木马等病毒;含有作弊行为或意图;完全不能满足用户需求,甚至含有欺骗内容的网页。例如:
• 内容空短,有很少量的内容,却不能支撑页面的主要意图;
• 问答页有问无答,或回答完全不能解决问题;
• 站内搜索结果页,但没有给出相关信息
除上述网页外,欺骗用户和搜索引擎的网页在无内容质量可言集合里占很高比例。网络搜索引擎对作弊网页的定义是:不以满足用户需求为目的,通过不正当手段欺骗用户和搜索引擎从而获利的网页。目前互联网上这部分网页还属少数,但作弊网页的价值是负向的,对用户的伤害非常大,对这类网页,搜索引擎持坚决打击态度。
衡量网页质量的维度——浏览体验
不同质量的网页带给用户的浏览体验会有很大差距,一个优质的网页给用户的浏览体验应该是正向的。用户希望看到干净、易阅读的网页,排版混乱、广告过多会影响用户对网页主体内容的获取。在网络搜索引擎网页质量体系中,用户对网页主体内容的获取成本与浏览体验呈反比,即获取成本越高,浏览体验越低。面对内容质量相近的网页,浏览体验佳者更容易获得更高的排位,而对于浏览体验差的网页,网络搜索引擎会视情况降低其展现的机率甚至拒绝收录。
影响用户浏览体验好坏的因素很多,目前网络搜索引擎主要从内容排版、广告影响两方面对网页进行考量:
内容排版:用户进入网页第一眼看到的就是内容排版,排版决定了用户对网页的第一印象,也决定了用户对内容获取的成本。
广告影响:网络搜索引擎理解网站的生存发展需要资金支持,对网页上放置正当广告持支持态度。网页应该以满足用户需求为主旨,最佳状态即“主体内容与广告一起满足用户需求,内容为主,广告为辅”,而不应让广告成为网页主体。
下面我们通过举例来感受一下网络搜索引擎是如何对网页的浏览体验进行分类的,站长可以据此对比检验自己站点的浏览体验如何:
1、浏览体验好:
页面布局合理,用户获取主体内容成本低,一般具有以下特征:
• 排版合理,版式美观,易于阅读和浏览;
• 用户需要的内容占据网页最重要位置;
• 能够通过页面标签或页面布局十分清楚地区分出哪些是广告;
• 广告不抢占主体内容位置,不阻碍用户对主要内容的获取;
实例参考:
示例
浏览体验
说明
case 3.2.1-1
好
招聘、房产等网站首页也有很多广告,但都是招聘相关的,浏览体验是ok的。
case 3.2.1-2
好
文章页,页面布局合理,无广告,排版好,结构合理
case 3.2.1-3
好
游戏首页,排版美观,布局合理,无广告,浏览体验优
2、浏览体验差:
页面布局和广告放置影响了用户对主体内容的获取,提高了用户获取信息的成本,令用户反感。包括但不仅限于以下情况:
• 正文内容不换行或不分段,用户阅读困难;
• 字体和背景颜色相近,内容辨别困难;
• 页面布局不合理,网页首屏看不到任何有价值的主体内容;
• 广告遮挡主体内容;或者在通用分辨率下,首屏都是广告,看不到主体内容;
• 弹窗广告过多;
• 影响阅读的浮动广告过多
• 点击链接时,出现预期之外的弹窗;
• 广告与内容混淆,不易区分;
衡量网页质量的维度——可访问性
用户希望快速地从搜索引擎获取到需要的信息,网络搜索引擎尽可能为用户提供能一次性直接获取所有信息的网页结果。网络搜索引擎认为不能直接获取到主体内容的网页对用户是不友好的,会视情况调整其展现机率。
网络搜索引擎会从正常打开、权限限制、有效性三方面判断网页的可访问性,对于可以正常访问的网页,可以参与正常排序;对于有权限限制的网页,再通过其它维度对其进行观察;对于失效网页,会降权其展现机制甚至从数据库中删除。
1、可正常访问的网页
无权限限制,能直接访问所有主体内容的网页。
2、有权限限制的网页
此类网页分为两种:打开权限和资源获取权限
1)打开权限:指打开网页都需要登录权限,没有权限完全无法看到具体内容,普通用户无法获取或获取成本很高,网络搜索引擎会降低其展现机率。不包括以登录为主要功能的网页。
2)资源获取权限:指获取网页主要内容,如文档、软件、视频等,需要权限或者需要安装插件才能获得完整内容。此时会分三种情况:
• 提供优质、正版内容的网站,由于内容建设成本很高,尽管查看全文或下载时需要权限或安装插件,但属于用户预期之内,网络搜索引擎也不认为权限行为对用户造成伤害,给予与正常可访问页面相同的对待。
• 对于一些非优质、非正版的资源,来自于用户转载甚至机器采集,本身成本较低,内容也不独特,用户获取资源还有权限限制——需要用户注册登录或者付费查看,网络搜索引擎会根据具体情况决定是否调整其展现。
• 还有一些视频、下载资源页,也许自身资源质量并不差,但需要安装非常冷门的插件才能正常访问,比如要求安装“xx大片播放器”,网络搜索引擎会怀疑其有恶意倾向。
实例参考:
示例
可访问性
说明
case 3.2-1
好
CNKI上的一篇论文,收费才能下载,但有版权,浏览体验好
case 3.2-2
好
优酷上一部新电影,需要付费才能观看,浏览体验好。
case 3.2-3
中
内容是来,但是需要登录才能看更多
case 3.2-4
差
入党申请书,本身就是转载的,网上到处都是,但这个页面仍然要求收费才能下载。
3、失效网页
往往指死链和主体资源失效的网页。网络搜索引擎认为这部分网页无法提供有价值信息,如果站点中此类网页过多,也会影响网络搜索引擎对其的收录和评级。建议站长对此类网页进行相应设置,并及时登录网络站长平台,使用死链提交工具告知网络搜索引擎。
失效网页包括但不仅限于:
• 404、403、503等网页;
• 程序代码报错网页;
• 打开后提示内容被删除,或因内容已不存在跳转到首页的网页;
• 被删除内容的论坛帖子,被删除的视频页面(多出现在UGC站点)
具体请参阅《网络搜索引擎网页质量白皮书》,望采纳!
⑧ 搜索算法的主要分类
如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前(子结点)探索,在探索过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点重新选择另一结点,继续向前探索,如此反复进行,直至求得最优解。深度优先搜索的实现方式可以采用递归或者栈来实现。
由此可见,把通常问题转化为树的问题是至关重要的一步,完成了树的转换基本完成了问题求解。
1、优化思想
减少所遍历的状态总数
2、三种方法
(1)减少节点数
思想:尽可能减少生成的节点数
(2)定制回溯边界
思想:定制回溯边界条件,剪掉不可能得到最优解的子树
在很多情况下,我们已经找到了一组比较好的解。但是计算机仍然会义无返顾地去搜索比它更“劣”的其他解,搜索到后也只能回溯。为了避免出现这种情况,我们需要灵活地去定制回溯搜索的边界。
在深度优先搜索的过程当中,往往有很多走不通的“死路”。假如我们把这些“死路”排除在外,不是可以节省很多的时间吗?打一个比方,前面有一个路径,别人已经提示:“这是死路,肯定不通”,而你的程序仍然很“执着”地要继续朝这个方向走,走到头来才发现,别人的提示是正确的。这样,浪费了很多的时间。针对这种情况,我们可以把“死路”给标记一下不走,就可以得到更高的搜索效率。
(3)记忆化
思想:运用记忆化的方法,使得一些遍历过的子树不要重复遍历
3、三个原则
(1)正确性:剪去的“枝条”不包含最优答案;
我们知道,剪枝方法之所以能够优化程序的执行效率,正如前文所述,是因为它能够“剪去”搜索树中的一些“枝条”。然而,如果在剪枝的时候,将“长有”我们所需要的解的枝条也剪掉了,那么,一切优化也就都失去了意义。所以,对剪枝的第一个要求就是正确性,即必须保证不丢失正确的结果,这是剪枝优化的前提。
为了满足这个原则,我们就应当利用“必要条件”来进行剪枝判断。也就是说,通过解所必须具备的特征、必须满足的条件等方面来考察待判断的枝条能否被剪枝。这样,就可以保证所剪掉的枝条一定不是正解所在的枝条。当然,由必要条件的定义,我们知道,没有被剪枝不意味着一定可以得到正解(否则,也就不必搜索了)。
(2)准确性:在保证第一条原则的情况下,尽可能的剪去更多不包含最优答案的枝条;
在保证了正确性的基础上,对剪枝判断的第二个要求就是准确性,即能够尽可能多的剪去不能通向正解的枝条。剪枝方法只有在具有了较高的准确性的时候,才能真正收到优化的效果。因此,准确性可以说是剪枝优化的生命。
当然,为了提高剪枝判断的准确性,我们就必须对题目的特点进行全面而细致的分析,力求发现题目的本质,从而设计出优秀的剪枝判断方案。
(3)高效性:通过剪枝要能够更快的接近到达最优解。
一般说来,设计好剪枝判断方法之后,我们对搜索树的每个枝条都要执行一次判断操作。然而,由于是利用出解的“必要条件”进行判断,所以,必然有很多不含正解的枝条没有被剪枝。这些情况下的剪枝判断操作,对于程序的效率的提高无疑是具有副作用的。为了尽量减少剪枝判断的副作用,我们除了要下功夫改善判断的准确性外,经常还需要提高判断操作本身的时间效率。
然而这就带来了一个矛盾:我们为了加强优化的效果,就必须提高剪枝判断的准确性,因此,常常不得不提高判断操作的复杂度,也就同时降低了剪枝判断的时间效率;但是,如果剪枝判断的时间消耗过多,就有可能减小、甚至完全抵消提高判断准确性所能带来的优化效果,这恐怕也是得不偿失。很多情况下,能否较好的解决这个矛盾,往往成为搜索算法优化的关键。 类似树的按层遍历,其过程为:首先访问初始点Vi,并将其标记为已访问过,接着访问Vi的所有未被访问过可到达的邻接点Vi1、Vi2……Vit,并均标记为已访问过,然后再按照Vi1、Vi2……Vit的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依此类推,直到图中所有和初始点Vi有路径相通的顶点都被访问过为止。
处理和优化
对于状态数很多时,广度优先搜索可以采用循环队列或动态链表来处理。
主要区别 遍历方式 深度优先搜索遍历 广度优先搜索遍历 所用数据结构 栈 队列 一般优化 最优性剪枝
可行性剪枝 Hash判重
双向搜索
⑨ 深度优先搜索和广度优先搜索、A星算法三种算法的区别和联系
在说它之前先提提状态空间搜索。状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。通俗点说,就是 在解一个问题时,找到一条解题的过程可以从求解的开始到问题的结果(好象并不通俗哦)。由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确 定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间。问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。 这个寻找的过程就是状态空间搜索。 常用的状态空间搜索有深度优先和广度优先。广度优先是从初始状态一层一层向下找,直到找到目标为止。深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,以至找到目标为止。这两种算法在数据结构书中都有描述,可以参看这些书得到更详细的解释。 前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举。这在状态空间不大的情况下是很合适的算法,可是当状态空间十分大,且不预测的情况下就不可取了。他的效率实在太低,甚至不可完成。在这里就要用到启发式搜索了。 启发中的估价是用估价函数表示的,如: f(n) = g(n) + h(n) 其中f(n) 是节点n的估价函数,g(n)实在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。在这里主要是h(n)体现了搜 索的启发信息,因为g(n)是已知的。如果说详细点,g(n)代表了搜索的广度的优先趋势。但是当h(n) >> g(n)时,可以省略g(n),而提高效率。这些就深了,不懂也不影响啦!我们继续看看何谓A*算法。 2、初识A*算法 启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法等等。当然A*也是。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的 策略不同。象局部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了 其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。最好优先就聪明多了,他在搜索时,便没有舍弃节点 (除非该节点是死节点),在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。那么 A*算法又是一种什么样的算法呢?其实A*算法也是一种最好优先的算法。只不过要加上一些约束条件罢了。由于在一些问题求解时,我们希望能够求解出状态空 间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A* 算法是一个可采纳的最好优先算法。A*算法的估价函数可表示为: f'(n) = g'(n) + h'(n) 这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值,h'(n)是n到目标的最断路经的启发值。由于这个f'(n)其实是无法预先知道 的,所以我们用前面的估价函数f(n)做近似。g(n)代替g'(n),但 g(n)>=g'(n)才可(大多数情况下都是满足的,可以不用考虑),h(n)代替h'(n),但h(n)<=h'(n)才可(这一点特别 的重要)。可以证明应用这样的估价函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。哈。你懂了吗?肯定没 懂。接着看。 举一个例子,其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。实际也是。当然它是一种最臭的A*算法。 再说一个问题,就是有关h(n)启发函数的信息性。h(n)的信息性通俗点说其实就是在估计一个节点的值时的约束条件,如果信息越多或约束条件越多则排除 的节点就越多,估价函数越好或说这个算法越好。这就是为什么广度优先算法的那么臭的原因了,谁叫它的h(n)=0,一点启发信息都没有。但在游戏开发中由 于实时性的问题,h(n)的信息越多,它的计算量就越大,耗费的时间就越多。就应该适当的减小h(n)的信息,即减小约束条件。但算法的准确性就差了,这 里就有一个平衡的问题。可难了,这就看你的了! 好了我的话也说得差不多了,我想你肯定是一头的雾水了,其实这是写给懂A*算法的同志看的。哈哈。你还是找一本人工智能的书仔细看看吧!我这几百字是不足以将A*算法讲清楚的。只是起到抛砖引玉的作用希望大家热情参与吗。