- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是一名学生,有兴趣开发一个搜索引擎来索引我所在国家/地区的网页。一段时间以来,我一直在研究要使用的算法,并且我认为 HITS 和 PageRank 是目前最好的。我决定使用 PageRank,因为它比 HITS 算法更稳定(或者我已经读过)。
我找到了无数与 PageRank 相关的文章和学术论文,但我的问题是我不理解这些论文中构成算法的大部分数学符号。具体来说,我不明白谷歌矩阵(不可约的随机矩阵)是如何计算的。
我的理解是基于这两篇文章:
有人可以用较少的数学符号提供基本解释(例子会更好)吗?
提前致谢。
最佳答案
PageRank 的正式定义,如引用文件第 4 页所定义,在数学方程式中用有趣的“E”符号表示(它实际上是大写的 Sigma 希腊字母。Sigma 是字母“S”这里代表求和)。
简而言之,这个公式表示计算第 X 页的 PageRank...
For all the backlinks to this page (=all the pages that link to X) you need to calculate a value that is The PageRank of the page that links to X [R'(v)] divided by the number of links found on this page. [Nv] to which you add some "source of rank", [E(u)] normalized by c (we'll get to the purpose of that later.) And you need to make the sum of all these values [The Sigma thing] and finally, multiply it by a constant [c] (this constant is just to keep the range of PageRank manageable)
这个公式的关键思想是所有链接到给定页面 X 的网页都在增加其“值(value)”的值(value)。通过链接到某个页面,他们“投票”支持该页面。然而,这个“投票”的权重或多或少取决于两个因素:
这两个因素反射(reflect)了非常直观的想法:
正如您所注意到的,这个公式使用了有点循环引用,因为要知道 X 的页面范围,您需要知道链接到 X 的所有页面的 PageRank。那么如何你算出这些 PageRank 值了吗?...这就是文档开始部分解释的下一个收敛问题的地方。
本质上,对于所有页面,通过一些“随机”(或者最好是“合理猜测”的 PageRank 值)开始,并通过使用上面的公式计算 PageRank,新的计算值会变得“更好”,因为你迭代这个处理几次。值收敛,即它们每个都越来越接近实际/理论值。因此,通过迭代足够多的次数,我们达到了额外迭代不会达到的时刻为上次迭代提供的值添加任何实际精度。
现在...从理论上讲,这很好而且花花公子。诀窍是将此算法转换为等效但可以更快完成的算法。有几篇论文描述了如何完成此任务以及类似的任务。我手头没有这样的引用资料,但稍后会添加这些。当心它们会涉及大量线性代数。
编辑:正如所 promise 的,这里有一些关于计算网页排名的算法的链接。 Efficient Computation of PageRank Haveliwala 1999/// Exploiting the Block Structure of the Web for Computing PR Kamvar etal 2003/// A fast two-stage algorithm for computing PageRank Lee et al. 2002
虽然上面提供的链接的许多作者都来自斯坦福,但很快就会意识到寻求高效的类似 PageRank 的计算是一个热门的研究领域。我意识到这些 Material 超出了 OP 的范围,但重要的是要暗示基本算法对大型网络不实用这一事实。
为了以易于理解的文本结束(但有许多指向深入信息的链接),我想提一下 Wikipedia's excellent article
如果您认真对待这类事情,您可以考虑参加数学入门/复习类(class),尤其是线性代数,以及一般处理图形的计算机科学类(class)。顺便说一句,Michael Dorfman 在这篇文章中对 OCW 的 1806 讲座视频提出了很好的建议。
希望对您有所帮助...
关于algorithm - Pagerank 及其数学 : Explanation needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1451626/
我正在查看 java 代码片段,而这个片段我无法弄清楚为什么输出是 2? package com.instanceofjava; public class A{ stat
我有这种情况: 我试图以这种方式混淆一些数据 /* item.h */ typedef struct ItemStruct *Item; /*item.c*/ #include "item.h" st
好的,我今天遇到了这个,当时 TI TMS470 C++ 编译器拒绝接受它。 这来自“Head First Design Patterns”示例代码的 C++ 翻译的 Silver 版本。 class
我正在使用 requests 模块和 Python 2.7 构建一个基本的网络爬虫。 source_code = requests.get(url) plain_text = source_code.
union([H|T],[],[H|T]). union([],[H|T],[H|T]). union([H|T], SET2, RESULT) :- member(H,SET2), u
我正在使用 requests 模块和 Python 2.7 构建一个基本的网络爬虫。 source_code = requests.get(url) plain_text = source_code.
我想要解释 GCC 生成的程序集中与 .cfi_def_cfa_offset 指令一起使用的值。我隐约知道 .cfi 指令涉及调用帧和堆栈展开,但我想更详细地解释为什么,例如,在编译以下 C 程序时
如果我反汇编我的类文件,我会得到以下形式的 LineNumberTables LineNumberTable: line 204: 0 line 205: 9 line 2
我使用 jQuery 编码已有大约 2 年了,但我从未在插件中完成过。我正在努力改变这一点。我找到了一些解释如何创建插件的网站,我了解了基础知识。 我不明白的部分是 this 关键字的使用。这是一个简
我正在开发一个 OpenGL 项目,我需要对该主题的核心组件进行一些简短的解释,因为我需要向有需要的人解释。 以下是程序部分 下面是程序中用到的全局变量和头文件 #include #include #
我正在阅读 this不错的文章,但坚持一句话以对此有更多了解。 这是什么意思(在第 8 点中提到)“允许应用程序线程与 GC 线程一起运行总是会导致应用程序线程以影响对象 Activity 性的方式改
我是 java 泛型的新手,我的问题是: public static void printArray( E[] inputArray ) 在上面的语句中,当函数的返回类型为void时,为什么我们在v
我目前正在浏览一些旧的大学 C++ 代码片段。那时,另一个类(class)中的一个被分配使用双指针和二维数组来做一个矩阵类(class)。幸运的是(或者事后看来不幸)我从来没有机会学习那样的东西。我毕
在另一个SO post ,以下示例作为对 OP 的响应给出: public static void funct1(final List list1, final E something) {
谁能告诉我为什么在运行程序时下一行显示 5 CURRENT THREAD IS: Thread[main,5,main] 该程序来自 Java Complete Reference 一书,程序如下:
我想讨论 Android 生命周期。我了解 Android 生命周期工作原理的基础知识,但我想问一些问题。 为什么 Android 应用程序不直接从运行状态移动到停止状态,为什么它首先要经过暂停阶段?
我一直在为垂直对齐而苦苦挣扎,这是一个看似足够简单的过程,但在不同的语言和元素类型中有很多特质。我已经通过 stackexchange 进行了大量阅读,但似乎无法找到共同的理解思路。 以下是我能够收集
我目前正在上算法课。以下是我在测验中做错的一个问题:基本上,我们必须用大 O 表示法表示最坏情况下的运行时间: int foo(int n) { m = 0; while (n >=2
我正试图在网络上找到一两个以简单术语解释这些内容的资源。此外,这个概念能否以实用的方式用于改进算法?如果是这样,如何?以下是我从联系人那里得到的简要说明。 I dont know where you
考虑 this link来自 Bit Twiddling Hacks 网站。为了计算尾随位,使用了以下算法: unsigned int v; // 32-bit word input to
我是一名优秀的程序员,十分优秀!