网页内容union 排序问题题

本文将介绍谷歌的网页排序算法(PageRank Algorithm),以及它如何从250亿份网页中捞到与你的搜索条件匹配的结果。它的匹配效果如此之好,以至于&谷歌&(google)今天已经成为一个被广泛使用的动词了。
如何辨别谁重要
如果你曾建立过一个网页,你应该会列入一些你感兴趣的链接,它们很容易使你点击到其它含有重要、可靠信息的网页。这样就相当于你肯定了你所链接页面的重要性。谷歌的网页排序算法每月在所有网页中进行一次受欢迎程度的评估,以确定哪些网页最重要。网页排序算法的提出者,谢尔盖&布林(Sergey Brin)和拉里&佩奇(Lawrence Page)的基本想法是:一个网页的重要性是由链接到它的其他网页的数量及其重要性来决定。
我们对任意一个网页P,以I(P)来表述其重要性,并称之为网页的网页排序。在很多网站,你可以找到一个近似的网页排序值。(例如,美国数学会的首页目前的网页排序值为8,最高分是10。你可以试试找到一个网页排序值为10的网页吗?)这个网页排序值仅是一个近似值,因为谷歌拒绝提供真实的网页排序值,以阻止那些试图干扰排序的行为。
网页排序是这样确定的。假定网页Pj有lj个链接。如果这些链接中的一个链接到网页Pi,那么网页Pj将会将其重要性的1/lj赋给Pi。网页Pi的重要性就是所有指向这个网页的其他网页所贡献的重要性的加和。换言之,如果我们记链接到网页Pi的网页集合为Bi,那么
这或许让你想起&先有鸡还是先有蛋&的问题:为了确定一个网页的重要性,我们首先得知道所有指向它的其他网页的重要性。然而,我们可将这个问题改写为一个更数学化的问题。
首先建立一个矩阵,称为超链矩阵(hyperlink matrix),H=[Hij],其中第i行第j列的元素为
注意到H有一些特殊的性质。首先,它所有的元都是非负的。其次,除非对应这一列的网页没有任何链接,它的每一列的和为1。所有元均非负且列和为1的矩阵称为随机矩阵,随机矩阵将在下述内容中起到重要作用。
我们还需要定义向量I=[I(Pi)],它的元素为所有网页的网页排序&&重要性的排序值。前面定义的网页排序可以表述为
换言之,向量I是矩阵H对应特征值1的特征向量。我们也称之为矩阵H的平稳向量(stationary vector)。
让我们来看一个例子。下图所示为一个网页集合(8个),箭头表示链接。
其相应的矩阵为
这说明网页8的受欢迎程度最高。下图是阴影化的图,其中网页排序值越高的网页阴影越浅。
计算平稳向量
有很多方法可以找到一个方阵的特征向量。然而,我们面对的是一个特殊的挑战,因为矩阵H是一个这样的方阵,它的每一列都对应谷歌检索到的一个网页。也就是说,H大约有n=250亿行和列。不过其中大多数的元都是0;事实上,研究表明每个网页平均约有10个链接,换言之,平均而言,每一列中除了10个元外全是0。我们将选择被称为幂法(power method)的方法来找到矩阵H的平稳向量 I。
幂法如何实现呢?首先选择 I 的备选向量I0,进而按下式产生向量序列 Ik
这个方法是建立在如下的一般原理上:
一般原理:序列Ik将收敛到平稳向量I。
我们首先用个例子验证上面的结论。
一个自然的问题是,这些数字有什么含义。当然,关于一个网页的重要性,可能没有绝对的度量,而仅有比较两个网页的重要性的比例度量,如&网页A的重要性是网页B的两倍。&基于这一原因,我们可以用一个固定量去同乘以所有的重要性排序值,这并不会影响我们能获得的信息。这样,我们总是假定所有受欢迎程度值(popularity)的和为1,原因稍后解释。
三个重要的问题
自然而然产生的三个问题是:
序列Ik总是收敛吗?(即运算多次后,Ik和Ik+1几乎是一样的)
收敛后的平稳向量是否和初始向量I0的选取没有关系?
重要性排序值是否包含了我们想要的信息?
对目前的方法而言,上述三个的答案都是否定的!下面,我们将看看如何改进我们的方法,使得改进后的算法满足上述三个要求。先看个非常简单的例子。考虑如下包含两个网页的小网络,其中一个链接到另一个:
下例展示了算法的运行过程:
在这个例子中,两个网页的重要性排序值均为0,这样我们无法获知两个网页之间的相对重要性信息。问题在于网页P2没有任何链接。因此,在每个迭代步骤中,它从网页P1获取了一些重要性,但却没有赋给其他任何网页。这样将耗尽网络中的所有重要性。没有任何链接的网页称为悬挂点(dangling nodes),显然在我们要研究的实际网络中存在很多这样的点。稍后我们将看到如何处理这样的点,在此之前我们先考虑一种新的理解矩阵H和平稳向量I的思路。
H的概率化解释
想象我们随机地在网上跳转网页;也就是说,当我们访问一个网页时,一秒钟后我们随机地选择当前网页的一个链接到达另一个网页。例如,我们正访问含有lj个链接的网页Pj,其中一个链接引导我们访问了网页Pi,那么下一步转到网页Pi的概率就是1/lj。
由于跳转网页是随机的,我们用Tj表示停留在网页Pj上的时间。那么我们从网页Pj转到网页Pi的时间为Tj/lj。如果我们转到了网页Pi,那么我们必然是从一个指向它的网页而来。这意味着
其中求和是对所有链接到Pi的网页Pj进行的。注意到这个方程与定义网页排序值的方程相同,因此I(Pi)=Ti。那么一个网页的网页排序值可以解释为随机跳转时花在这个网页上的时间。如果你曾经上网浏览过某个你不熟悉的话题的相关信息时,你会有这种感觉:按照链接跳转网页,过一会你会发现,相较于其他网页,你会更频繁地回到某一部分网页。正如谚语所说&条条大路通罗马,&这部分网页显然是更重要的网页。
基于这个解释,很自然地可以要求网页排序向量I的所有元之和为1。
当然,这种表述中还存在一个问题:如果我们随机地跳转网页,在某种程度上,我们肯定会被困在某个悬挂点上,这个网页没有给出任何链接。为了能够继续进行,我们需要随机地选取下一个网页;也就是说,我们假定悬挂点可以链接到其他任何一个网页。这个效果相当于将超链矩阵H做如下修正:将其中所有元都为0的列替换为所有元均为1/n的列,前者就对应于网页中的悬挂点。这样修正后悬挂点就不存在了。我们称修正后的新矩阵为S。
我们之前的例子,现在就变成了
换言之,网页P2的重要性是网页P1的两倍,符合你的直观认知了。
矩阵S有一个很好的性质,即其所有元均非负且每列的和均为1。换言之,S为随机矩阵。随机矩阵具有一些很有用的性质。例如,随机矩阵总是存在平稳向量。
为了稍后的应用,我们要注意到S是由H通过一个简单的修正得到。定义矩阵A如下:对应于悬挂点的列的每个元均为1/n,其余各元均为0。则S=H+A。
幂法如何实现?
一般而言,幂法是寻找矩阵对应于绝对值最大的特征值的特征向量。就我们而言,我们要寻找矩阵S对应于特征值1的特征向量。首先要说到的是最好的情形。在这种情形下,其他特征值的绝对值都小于1;也就是说,矩阵S的其它特征值都满足|&|&1。
我们假定矩阵S的特征值为&j,且
对矩阵S,假设对应于特征值&j的特征向量存在一个基向量vj。这一假设在一般情况下并不一定要成立,但如果成立可以帮助我们更容易地理解幂法如何实现。将初始向量I0写成如下形式
当j&2时,因为所有特征值的绝对值小于1,因此这是&kj&0。从而Ik&I=c1v1,后者是对应于特征值1的一个特征向量。需要指出的是,Ik&I的速度由|&2|确定。当|&2|比较接近于0时,那么&k2&0会相当快。例如,考虑下述矩阵
这个矩阵的特征值为&1=1及&2=0.3。下图左可以看出用红色标记的向量Ik收敛到用绿色标记的平稳向量I。
再考虑矩阵
其特征值为&1=1及&2=0.7。从上图右可以看出,本例中向量Ik收敛到平稳向量I的速度要慢很多,因为它的第二个特征值较大。
在上述讨论中,我们假定矩阵S需要满足&1=1且|&2|&1。然而,我们可能会发现,这一点并不总成立。
假定网络关系如下:
在这种情形下,矩阵S为
那么我们可以得到
在这种情况下,向量序列Ik不再收敛。这是为什么?注意到矩阵S的第二个特征值满足|&2|=1,因此前述幂法的前提不再成立。
为了保证|&2|&1,我们需要矩阵S为本原(primitive)矩阵。这意味着,对某个m,Sm的所有元均为正。换言之,若给定两个网页,那么从第一个网页经过m个链接后可以到达第二个网页。显然,上述最后的这个例子并不满足这个条件。稍后,我们将看到如何修正矩阵S以获得一个本原随机矩阵,从而满足|&2|&1。
下面说明我们的方法行不通的另一个例子。考虑如下图所示的网络
在此例中,矩阵S为
注意到前四个网页的网页排序值均为0。这使我们感觉不太对:每个页面都有其它网页链接到它,显然总有人喜欢这些网页!一般来说,我们希望所有网页的重要性排序值均为正。这个例子的问题在于,它包含了一个小网络,即下图中蓝色方框部分。
在这个方框中,有链接进入到蓝色方框,但没有链接转到外部。正如前述中关于悬挂点的例子一样,这些网页构成了一个&重要性水槽&,其他四个网页的重要性都被&排&到这个&水槽&中。这种情形发生在矩阵S为可约(reducible)时;也即,S可以写成如下的块形式
实际上,我们可以证明:如果矩阵S不可约,则一定存在一个所有元均为正的平稳向量。
对一个网络,如果任意给定两个网页,一定存在一条由链接构成的路使得我们可以从第一个网页转到第二个网页,那么称这个网络是强连通的(strongly connected)。显然,上面最后的这个例子不是强连通的。而强连通的网络对应的矩阵S是不可约的。
简言之,矩阵S是随机矩阵,即意味着它有一个平稳向量。然而,我们同时还需要S满足(a)本原,从而|&2|&1;(b)不可约,从而平稳向量的所有元均为正。
最后一个修正
为得到一个本原且不可约的矩阵,我们将修正随机跳转网页的方式。就目前来看,我们的随机跳转模式由矩阵S确定:或者是从当前网页上的链接中选择一个,或者是对没有任何链接的网页,随机地选取其他网页中的任意一个。为了做出修正,首先选择一个介于0到1之间的参数&。然后假定随机跳转的方式略作变动。具体是,遵循矩阵S的方式跳转的概率为&,而随机地选择下一个页面的概率是1&&。
若记所有元均为1的n&n矩阵为J,那么我们就可以得到谷歌矩阵(Google matrix):
注意到G为随机矩阵,因为它是随机矩阵的组合。进而,矩阵G的所有元均为正,因此G为本原且不可约。从而,G存在唯一的平稳向量I,后者可以通过幂法获得。
参数&的作用是一个重要因素。若&=1,则G=S。这意味着我们面对的是原始的网络超链结构。然而,若&=0,则G=1/nJ。也即我们面对的是一个任意两个网页之间都有连接的网络,它已经丧失了原始的网络超链结构。显然,我们将会把&的值取得接近于1,从而保证网络的超链结构在计算中的权重更大。
然而,还有另外一个问题。请记住,幂法的收敛速度是由第二个特征值的幅值|&2|决定的。而对谷歌矩阵,已经证明了第二个特征值的幅值为|&2|=&。这意味着当&接近于1时,幂法的收敛速度将会很慢。作为这个矛盾的折中方案,网页排序算法的提出者谢尔盖&布林和拉里&佩奇选择&=0.85。
计算排序向量 I
到目前为止,我们所讨论的看起来是一个很棒的理论,然而要知道,我们需要将这个方法应用到一个维数n约为250亿的n&n矩阵!事实上,幂法特别适用于这种情形。
回想随机矩阵S可以写成下述形式
从而谷歌矩阵有如下形式
其中J是元素全为1的矩阵,从而
现在注意到,矩阵H的绝大部分元都是0;平均而言,一列中只有10个元是非零数。从而,求HIk的每个元时,只需要知道10个项即可。而且,和矩阵J一样,矩阵A的行元素都是相同的。从而,求AIk与JIk相当于添加悬挂点或者所有网页的当前重要性排序值。而这只需要一次即可完成。
当&取值接近于0.85,布林和佩奇指出,需要50到100次迭代来获得对向量I的一个足够好的近似。计算到这个最优值需要几天才能完成。
当然,网络是不断变化的。首先,网页的内容,尤其是新闻内容,变动频繁。其次,网络的隐含超链结构在网页或链接被加入或被删除时也要相应变动。有传闻说,谷歌大约1个月就要重新计算一次网页排序向量I。由于在此期间可以看到网页排序值会有一个明显的波动,一些人便将其称为谷歌舞会(Google Dance)。(在2002年,谷歌举办了一次谷歌舞会!)
布林和佩奇在1998年创建了谷歌,正值网络的增长步伐已经超过当时搜索引擎的能力范围。在那个时代,大多数的搜索引擎都是由那些没兴趣发布其产品运作细节的企业研发的。在发展谷歌的过程中,布林和佩奇希望&推动学术领域更多的发展和认识。&换言之,他们首先希望,将搜索引擎引入一个更开放的、更学术化的环境,来改进搜索引擎的设计。其次,他们感到其搜索引擎产生的统计数据能够为学术研究提供很多的有趣信息。看来,联邦政府最近试图获得谷歌的一些统计数据,也是同样的想法。
还有一些其他使用网络的超链结构来进行网页排序的算法。值得一提的例子是HITS算法,由乔恩&克莱因伯格(Jon Kleinberg)提出,它是Teoma搜索引擎的基础。
阅读(...) 评论()页面内容排序插件jSort使用方法
转载 & & 投稿:lijiao
这篇文章主要介绍了页面内容排序插件jSort使用方法,需要的朋友可以参考下
当页面列表内容很多的时候,我们可能需要将内容按照某个方式进行排序,比如按照字母或者大小等排序。本文将使用排序插件jSort来对页面内容进行排序。
jSort插件可以对页面任何内容进行排序(tables, lists, div elements),跨浏览器兼容且非常轻巧。
运行效果图:
首先在head部分引入jquery库和jSort插件。
&script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/
jquery.min.js"&&/script&
&script type="text/javascript" src="jquery.jsort.0.4.js"&&/script&
然后再body直接加入如下代码:
&ul id="nav"&
&li id="asc_btn"&按标题↑&/li&
&li id="desc_btn"&按标题↓&/li&
&div id="divs"&
&img src="images/s1.jpg" alt="" /&
&h3 class="title"&1.北京利比亚驻华大使馆升起反对派国旗&/h3&
&p&8月22日,北京利比亚驻华大使馆,门前的国旗已经更换成了反对派的国旗。22日上午11点左右,
记者电话采访了利比亚驻华使馆,一位中方工作人员告诉记者,目前未接到闭馆和工作调整的通知,使馆人员
应该会照常上班。&/p&
&p&&a href="#"&查看详情&/a&&/p&
....多个div
可以看出HTML结构由两个控制按钮,和内容呈现区div#divs组成。
使用css将html页面美化。
#nav{width:100%;margin:10}
#nav li{float: width:80 height:24 line-height:24 margin-right:10
border:1px solid #d3d3d3; background:#f7f7f7; text-align: cursor:pointer}
#divs div{height:180 margin:10px 0 padding:15 background:#f7f7f7;
border-bottom:1px solid #ddd}
#divs div img{float: width:240 height:160 margin:10px}
#divs div h3{line-height:24 margin:10px 5 font-size:16 color:#456}
#divs div p{line-height:22 margin:6px 5px}
当单击控制按钮的时候,调用jSort插件将内容进行排序,请看代码:
$("#asc_btn").click(function(){
$("#divs").jSort({
sort_by: "h3.title",
item: "div",
order: "asc"
jSort插件提供几个参数可配置:
item:指向需要排序的html内容元素,默认为div,本例中是排序div中的内容。
sort_by:指向item内需要排序的元素,默认为p,本例中要排序的是h3.title。
order:排序方式,asc-顺序,desc-倒序,默认为asc。
is_num:是否按按数字大小排序,默认是false。
sort_by_attr:是否按照html元素属性进行排序,默认为false。
attr_name:属性名称,如果sort_by_attr设置为true,则可以按照对应元素的属性进行排序。如果需要排序的是中文字符串,最好设置按照属性进行排序,属性的值可以是字母或者数字之类的。
插件jSort的使用方法就介绍到这,大家动手操作一下吧!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具友情提示:垃圾评论一律封号,下载出错或者资源有问题请联系全栈客服QQ
jSort页面内容排序
所需积分:20
亲,积分不够,多去发布资源、评论、签到、
或联系QQ人工充值
亲,vip会员下载原创作品 积分5 折,其余免积分下载
PS:尊重原创作者劳动成果,感谢分享!
充值方式: 或联系QQ人工充值在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
后端从数据库读取了一个结果集,保存在数组中,然后显示在前端表格中,但是需要根据用户的筛选、排序等操作对表格进行动态展示。
我能想到的思路是:
1:在后端从数据库读取的数据传递到javascript数组中,用javascript根据用户的选择操作数组(在前端操作数据)2:在html中嵌入php代码,用php操作数组(在后端操作数据)3:根据用户的选择每次在数据库中操作并读取所需要的数据,返回到前端页面(在数据库中操作数据)
所操作的数据不超过1000条记录我后端语言PHP(thinkphp框架)
1:希望前辈们能分析一下各个解决方法的优缺点,给一个最合适的思路!2:如果用js,怎么将数据传递到js中?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
第一种方案:适合数据量小,页面响应快的场景优点:1、只需要从服务器获取一次数据,对服务器压力小2、用户所有操作都在前端进行,无需再与服务器通讯,体验比较好缺点:1、js操作数据然后再拼接html,或者模板引擎,或者MVVM相对来说会比后端直接生成html要麻烦一些,不过现在这个应该不算缺点吧
第二种方案:第二种方案也适合数据量小点的场景,它和第一种方案的区别在于:1、用户每次都要从服务器通讯2、生成html相对开发者来说比较方便两种方案相比,建议采用第一种
第三种方案:适合数据量比较大的时候,分批从数据库获取。最终在前台展示也无非就是php生成html或者js生成html
数据传递到js,两种方式:1、页面生成时,顺便把数据给传进去2、通过ajax去调用
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
如果结果集在千行以内。推荐
简单排序的例子:
简单筛选的例子:
全部的例子:
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。修改网站中关键词的排序对网站有影响吗?_搜外问答
之前网站的关键写了八九个,前面几个关键词排名已经很好了,我想把后面的那些关键词弄到前面,这样对网站有影响吗?
分享到微信
没有问题的。可以进行调整。
这个丝毫不受影响,顺利什么的无所谓!
现在百度对keyword不怎么关注,随便改
30天内高手都在交流什么
(1 个回答)
(2 个回答)
(2 个回答)
(3 个回答)
(7 个回答)
(10 小时前)
(10 小时前)
(10 小时前)
(19 小时前)
(19 小时前)
给问题设置一定金额,将更容易获得关注与回答。
选择支付方式

我要回帖

更多关于 rank函数排序重复问题 的文章

 

随机推荐