4 PageRank算法

4 PageRank算法
4 PageRank算法

算法分析与设计

PageRank算法问题

组员信息:(软件0901)

孙宏伟王竟飞王海波王振鹏叶文鹏张思危

张志鹏杨玉龙苑伯宇张弘弦殷文豪

成员分工:

搜集材料:孙宏伟,王竟飞,王振鹏

算法设计:王海波,叶文鹏,张思危

程序实现:张志鹏,杨玉龙,苑伯宇

Ppt制作:张弘弦,殷文豪

PageRank: 它是Google排名运算法则(排名公式)的一部分,是Google用于用来标识

网页的等级/重要性的一种方法,是Google用来衡量一个网站的好坏的唯一标准。在揉合了诸如Title标识和Keywords标识等所有其它因素之后,Google通过PageRank来调整结果,使那些更具“等级/重要性”的网页在搜索结果中另网站排名获得提升,从而提高搜索结果的相关性和质量。PageRank(网页级别),2001年9月被授予美国专利,专利人是Google创始人之一拉里·佩奇

一.问题提出

信息时代互联网的迅速发展使得搜索引擎成为人们获取信息的重要工具,如何能够在浩如烟海的巨量信息中找到所需要的部分,既是互联网使用者提出的愿景,也是搜索技术的开发研究人员所不断追求的目标。

搜索引擎起源于1990 年诞生的FTP 文件所引程序Archie(Archie FAQ);其后伴随着搜索技术的不断发展,出现了以Yahoo! (1994)为代表一系列提供搜索服务的网站;Google 公司(1998)及其独创的搜寻引擎算法PageRank 的出现,又将搜索引擎的使用效果提升到了一个新的高度,其后的一系列创新拉开了搜索技术领域革命的序幕。

当我们利用搜索引擎,如Google、百度等按关键字搜索时,往往希望我们感兴趣的网页靠前排序。实际中你可能也注意到所搜索到的结果是进行了排序的。现在请你们建立数学模型解决下面的问题:

1、试设计一种你们认为合理的排序规则,使搜索到的网页结果排序满足要求;

2、选取若干个网页为例,试用你们的规则进行一次排序,并说明规则的合理性。二.问题分析

问题假设:

1、网页之间的链入链出量能反映实际情况;

2、网页主题的分类按照ODP分类法分类;

3、关键词的选取符合人们的习惯;

4、网页靠前排序的规则基于用户的感兴趣程度;

5、假设主题传递的权重因子为k(0

2.1基于网页排序规则合理性分析

由于科技飞速发展,计算机在我国的普及率相当高,面对互联网上包含的信息越来越丰富,我们如何快速地搜索到自己感兴趣的主题呢?因此我们需要设计一种合理的网页排序规则,使人们通过关键字搜索快速的查找到与主题相关的内容。当我们利用搜索引擎,如Google、百度等按关键字搜索时,我们注意到所搜索到的结果是进行了排序的。通过查找的资料以及实际情况,我们定义网页排序的合理规则是输入关键字时我们感兴趣的网页会靠前排序。

2.2基于网页靠前排序分析

对于网页排序,我们引入pagerank算法,其原理是通过网页被链接的数量和质量来确定搜索结果的排序权重,在关键词文本匹配的基础上,利用Web超链结构,对一个网页与其它网页的链接关系进行分析,即检验一个网页被其他网页链接的次数,指向它的网页越多并且质量越高,说明该网页越重要,进而pagerank值越大,从而确定该网页在检索结果中的排列顺序。

2.3网页排序实例分析

第二问要求我们根据第一问设计的规则,选取若干个网页进行排序,使我们感兴趣的网页能靠前排列。根据pagerank算法,我们需要统计出所选取的网页的链入链出量,计算出每个网页的pagerank值,以此为基准进行排序。然而作为非网站人员的我们统计这些数据是不易实现的,因此我们想到用模拟网页链接图代替真正的网页链接图,即人为设定网页间的链入链出量,再进行相关性计算,虽然这样有一定的实际偏差,但我们仍可以得到比较理想的结果。

三.PageRank的算法模型

3.1 PageRank算法

在PageRank算法中,基本原理是“从许多优质的网页链接过来的网页,必定还是优质网页”。对网页的等级评价不是简单在仅仅用链接它的其它网页的数量来评定,还依赖于链接到它的网页本身的质量等级。

以网页为结点,网页间的链接用有向边表示,形成一个有向图。网页结点上的数字标记表示网页当前的“等级量”,正向链接到其它结点规定为是均匀分布。PageRank技术中,对网页的量的确定基于如下原则:

(1)反向链接数只作为受欢迎度指标之一。被许多页面链接的网页,其等级会提高。

(2)受到优质网页访问网页,同样是优质网页,而且访问的概率越高,对其“等级”的贡献就越大,被许多“重要”的页面链接会使得推荐快速上升。

(3)完全没有关联性的网页的链接会被认为“几乎没有什么价值”而被轻视。

(4)网页等级是动态的,与时间有关系。

3.2 网页等级模型建立

设网页页面数为N,用表示N个页面,则N N的方阵A=()表示页面间的链接关系:

以V=为结点集,链接关系引入有向边,则对应的有向图记为G=(V,E)。

由于PageRank算法不是重视“链接到其它网页”,而是重视“被其它网页链接”,因此将邻

接矩阵A=()求转置得矩阵B,即B=。B的第i行表示页面的反向链接。将

B=()按列单位化,使各列向量的总和变成1(全概率),以形成一个概率转移矩阵M=(),其中,可以理解为链接到的概率。M称为转移概率矩阵,它有N个随机变量,第j列对应一个随机变量的分布概律。引入

两个列向量,其中的各元素分别表示t时刻和t+1时刻各网页的瞬时等级值。在t时刻,第k个网页将自身的等级量以比例转移给第i个网页,或者以概率访问第i个网页,用表示,则所有网页在t时刻向第i个网页等级量的转移累计为,其计算公式为:

于是建立动态方程:。如果存在常数?,当t时,迭代方程

就会有不动点R,即MR=?R。?为转移概率矩阵的特征值,R为转移概率矩阵

的特征向量。在迭代方程中,设有初始PageRank向量

理解为:从t时刻的PageRank特征向量转移到t+1时刻的PageRank特征向量,其中为放大系数。这就是下一步中要选择最大特征根的理由来求解转移概率矩阵绝对值最大的特征根和对应的特征向量,将R单位化成为一个

PageRank概率向量。用向量R中PageRank值的大小量化网页的等级,则较大值对应较高等级。

3.3网页等级模型求解

通过上面的分析,我们知道要搜索出各个网页的链入链出量是不易实现的,并且各个网页间应是有关联性的,关联性越强就越具有代表性,如果大多数网页不相关联则就没有意义,因

此我们选定10个网页,设定其链接关系如下图:

图一网页链接图

将上图中的各网页间的链接关系表示为如下排列式,即根据各个链接源文件列举链接目标文件,如下表:

表一网页链接表

根据上表将网页间的链接关系用邻接矩阵A=(a ij )表示,在A 中,若第i 行元素值为1,则表示文件i 正向链接文件j ,否则其值为0;若第j 列元素值为1则表示文件j 反向链接文件i ,或者为指向文件j 反向链接的文件源,否则其值为0,其邻接矩阵如下: A=???????????????

?

????????????????00

1

1

001000000000001000001010000100010000100000111001010000010111010000000000000100000000001010

将临接矩阵A 转置,并将转置后的矩阵按列单位化,得到转移概率矩阵M=(

)

,转移概率矩阵如下:

M=???????????????????????????????????

?00

3

1

000002100100211031051

0000000005

1000000100510000000000

41

010000021000021210031051

41

0000000004

100210000051

41000

设转移概率矩阵M 的特征根为?,其特征向量为R,由pagerank 算法我们知道他们满足关系MR=?R ,采用幂法进行MATLAB 编程算出转移概率矩阵M 共有10个特征根(含复数根),取其中绝对值最大的特征根

和与之对应的特征向量:

W=(0.1340,0.1531,0.1579,0.3446,0.2393,0.5551,0.0479,0.5073,0.4355,0.0160 将特征向量单位化得:

W=(0.0517,0.0591,0.0610,0.1330,0.0924,0.2143,0.0185,0.1958,0.1681,0.0062 对单位化后的特征向量W=(

)按照权值(PageRank 值)大小排序,则对应网页的排序为:

,其中网页

的pagerank 值最大,这表明当用户搜索关

键词时,网页

为用户最感兴趣的网页,其他网页依次递减。

四、模型改进

4.1PageRank 算法改进

PageRank 页面等级算法有一个基本的缺陷,它根据一个页面上被链接的站点数量和质量来给该网页分配一个绝对的页面得分,同时亦将链接页面的页面等级考虑在内。但是这个页面得分并非针对查询词语,因而一个网页即使只是在内容中偶然提到了一个和查询主题偏离的关键词语,也会因其居高的页面等级值而获得一个比较高的排名。 影响页面级别的因素

1、入链对计算页面级别的影响

入链总是能增加当前页面的级别,尤其当前页与其下级页面构成回路时,这种贡献更大。如右图例,设ABCD 各页初始级别为1,阻尼系数为0.5,PR(X)/C(X)=10。则易算出

PR(A) = 19/3 = 6.33

PR(B) = 11/3 = 3.67

PR(C) = 7/3 = 2.33

PR(D) = 5/3 = 1.67

如果A不在回路上,则只能得0.5*10=5的收益。

阻尼系数越大,页面级别的收益越大,且整个回路上都能收到更大的收益(即入链收益更能平均地分布到各个回路页面上。针对上例,将阻尼系数改为0.75,则有

PR(A) = 419/35 = 11.97

PR(B) = 323/35 = 9.23

PR(C) = 251/35 = 7.17

PR(D) = 197/35 = 5.63

除回路上各个页面的级别值明显增大外,PR(A)/PR(D)的值敢明显减少了。

入链对整个回路上所有页面的级别值的增加之和,可以由下面这个公式得出.

(d / (1-d)) × (PR(X) / C(X))

这个公式,可以由简单推导出。

2、出链对计算页面级别的影响

增加出链不会影响整个web的总级别,但一个站点失去的级别值等于链到的站点的增加值之和。对于两个封闭的站点,从一个站点链上另一个站点时,增加的和减少的都是(d(/(1-d) × (PR(X) / C(X)).如果这两个站点互相链接,则此值减少。用随机冲浪模型可以解释这种现象,就是出链的增加,减少了用户访问站内页面的概率。举例如图,

设阻尼系数为0.75,则

PR(A) = 0.25 + 0.75 PR(B)

PR(B) = 0.25 + 0.375 PR(A)

PR(C) = 0.25 + 0.75 PR(D) + 0.375 PR(A)

PR(D) = 0.25 + 0.75 PR(C)

得:

PR(A) = 14/23

PR(B) = 11/23

PR(C) = 35/23

PR(D) = 32/23

PR(A)+PR(B)=25/23

PR(C)+PR(D)=67/23

PR(A)+PR(B)+PR(C)+PR(D)=92/23=4

Page和Brin将这样的链接称为悬摆链,它链到页面没有出链。悬摆链对页面的级别计算产生负面影响。如例,阻尼系数为0.75.

PR(A) = 0.25 + 0.75 PR(B)

PR(B) = 0.25 + 0.375 PR(A)

PR(C) = 0.25 + 0.375 PR(A)

得:

PR(A) = 14/23

PR(B) = 11/23

PR(C) = 11/23

PR(A)+PR(B)+PR(C)=36/23<3

3、页面数量的影响

先看例子。阻尼系数为0.75,PR(X)/C(X)=10,则

PR(A) = 0.25 + 0.75 (10 + PR(B) + PR(C))

PR(B) = PR(C) = 0.25 + 0.75 (PR(A) / 2)

得:

PR(A) = 260/14

PR(B) = 101/14

PR(C) = 101/14

PR(A)+PR(B)+PR(C)=33;

增加页面D;

PR(A) = 0.25 + 0.75 (10 + PR(B) + PR(C) + PR(D))

PR(B) = PR(C) = PR(D) = 0.25 + 0.75 (PR(A) / 3)

PR(A) = 266/14

PR(B) = 70/14

PR(C) = 70/14

PR(D) = 70/14

PR(A)+PR(B)+PR(C)+PR(D)=34

增加页面后,所有页面的级别值之和增加了1,A页略有增加,而B、C则用大幅下降。

再看右边的例子,假定同上。

PR(A) = 0.25 + 0.75 (10 + PR(C))

PR(B) = 0.25 + 0.75 × PR(A)

PR(C) = 0.25 + 0.75 × PR(B)

得:

PR(A) = 517/37 = 13.97

PR(B) = 397/37 = 10.73

PR(C) = 307/37 = 8.30

增加页面D:

PR(A) = 0.25 + 0.75 (10 + PR(D))

PR(B) = 0.25 + 0.75 × PR(A)

PR(C) = 0.25 + 0.75 × PR(B)

PR(D) = 0.25 + 0.75 × PR(C)

得:

PR(A) = 419/35 = 11.97

PR(B) = 323/35 = 9.23

PR(C) = 251/35 = 7.17

PR(D) = 197/35 = 5.63

增加页面后,所有页面级别增加了1,但每个页面的级别值减少了,这是由于新加页面分享

了入链代来的值。从这个结果看,增加页面减少了已有页面的级别值,露了google算法青睐小站点的特点。当然,大站点也会因内容丰富而吸引其它站点的出链而得以级别值增加。

3、针对搜索引擎优化的级别分布

先看两个列子,阻尼系数为0.5,PR(X)/C(X)=10;

BC之间无链接时:

PR(A) = 0.5 + 0.5 (10 + PR(B) + PR (C))

PR(B) = 0.5 + 0.5 (PR(A) / 2)

PR(C) = 0.5 + 0.5 (PR(A) / 2)

PR(A) = 8

PR(B) = 2.5

PR(C) = 2.5

BC之间互相链接时:

PR(A) = 0.5 + 0.5 (10 + PR(B) / 2 + PR(C) / 2)

PR(B) = 0.5 + 0.5 (PR(A) / 2 + PR(C) / 2)

PR(C) = 0.5 + 0.5 (PR(A) / 2 + PR(B) / 2)

得:

PR(A) = 7

PR(B) = 3

PR(C) = 3

当BC间互链时,虽然减少了A的级别,但BC都增加了。这符合优化站点所有页面而非只主页的优化思路,因为只有每个页面的级别都提高了,当有检索词命中这些页面时,它们才能排在前面。这种优化的方法也很明显了,就是尽可能地在所有页面间平均分布入链的贡献,各低级页面要增加互链。

4、链接交换增加了实施交换的页面的级别,却减少了其它页面的级别。

如图,阻尼系数为0.5,PR(X)/C(X)=10;

交换前,

PR(A) = 4/3

PR(B) = 5/6

PR(C) = 5/6

PR(D) = 4/3

PR(E) = 5/6

PR(F) = 5/6

交换后;

PR(A) = 0.5 + 0.5 (PR(B) + PR(C) + PR(D) / 3)

PR(B) = PR(C) = 0.5 + 0.5 (PR(A) / 3)

PR(D) = 0.5 + 0.5 (PR(E) + PR(F) + PR(A) / 3)

PR(E) = PR(F) = 0.5 + 0.5 (PR(D) / 3)

PR(A) = 3/2

PR(B) = 3/4

PR(C) = 3/4

PR(D) = 3/2

PR(E) = 3/4

PR(F) = 3/4

这情况恰好与增加站内互链的效果相反。由此,当需要对主页进行针对某一关键词的优化时,才取交换链接是可取的。

例中级别值的重新分布,更基本的前提是两个站点中参考交换的页面互相为对方提供的级别值是相等的。如果一个站的某个页面级别高或少出链,则这个站所有页面的级别会降低。这儿一个重要的影响因素是站点页面的数量。当一个站点的页面更多时,有更多的入链级别值被分布到站点的其它页面中,因而参考交换的页面不能提供更多贡献给对方。

5、影响页面级别的其它因素

在Lawrence Page和Sergey Brin关于PageRank的论文发表以后,除了web的链接结构以外,还有没有别的因素被加到PageRank的算法当中曾经有过广泛地讨论。Lawrence Page 本人在PageRank的专利说明中曾指出以下潜在的影响因素:链接的能见度,链接在文档中的位置,web页面间的距离,出链页面的重要性,页面的不过时。这此因素的增加,可以更好用随机冲浪模型模拟人类利用web的行为。

不管上述附加因素有没有在实际计算PageRank时使用,如何实现这些附加因素仍要讨论。

首先算法公式需要改进.

PR(A) = (1-d) + d (PR(T1)×L(T1,A) + ... +PR(Tn)×L(Tn,A))

此处,L(T1,A)是入链的评价值,由几个因素构成,只需要在迭代前计算一次,减少了对数据库的查询次数,虽然每次迭代的查询结果会有不同。

Lawrence Page在PageRank的专利说明中指出链接评价

的两个因素是链接的可见性和在文档中的位置。链接评价取

代了PR(A)/C(A),指出了对一特定的页面的链接,每个链接

被点击的概率是不同的。

此处,每一链接有两个属性值,X表示可见度,如果没有

被重点强调(如粗体、斜体等)为1否则为2,Y表链接在文

档中的位置,如果在文档下半部为1否则为3。则有

X(A,B) × Y(A,B) = 1 × 3 = 3

X(A,C) × Y(A,C) = 1 × 1 = 1

X(B,A) × Y(B,A) = 2 × 3 = 6

X(B,C) × Y(B,C) = 2 × 1 = 2

X(C,A) × Y(C,A) = 2 × 3 = 6

X(C,B) × Y(C,B) = 2 × 1 = 2

易得:

Z(A) = X(A,B) × Y(A,B) + X(A,C) × Y(A,C) = 4

Z(B) = X(B,A) × Y(B,A) + X(B,C) × Y(B,C) = 8

Z(C) = X(C,A) × Y(C,A) + X(C,B) × Y(C,B) = 8

链接评价公式为:(页面T1指向T2)

L(T1,T2) = X(T1,T2) × Y(T1,T2) / Z(T1)

有:

L(A,B) = 0.75

L(A,C) = 0.25

L(B,A) = 0.75

L(B,C) = 0.25

L(C,A) = 0.75

L(C,B) = 0.25

最后利用改进的公式计算页面级别:

PR(A) = 0.5 + 0.5 (0.75 PR(B) + 0.75 PR(C))

PR(B) = 0.5 + 0.5 (0.75 PR(A) + 0.25 PR(C))

PR(C) = 0.5 + 0.5 (0.25 PR(A) + 0.25 PR(B))

得:

PR(A) = 819/693

PR(B) = 721/693

PR(C) = 539/693

为了防止人为的级别优化,页面的距离被用来影响链接的评价。站内链接的权重小于站间链接的权重。页面的距离可能由页面是否在一个站内、一个服务器及物理距离等决定。

另一个影响页面重要性的能参数,是页面的不过时性(up-to-dateness),意指有越多的新建的页面指向某一个页面,则这个页面内容过时的可能性越小。

为增加这些因素的影响,要对公式进行修订如下:

L(Ti,A) = K(Ti,A) × K1(Ti) × ... × Km(Ti)

其中,K(Ti,A)表示链接可见度及位置的权重,Kn(Ti)是第n个因素对页面Ti的影响。看列

子:此处,从C引出的链接的重要性是其它的4倍。

K(A) = 0.5

K(B) = 0.5

K(C) = 2

计算级别值:

PR(A) = 0.5 + 0.5 × 2 PR(C)

PR(B) = 0.5 + 0.5 × 0.5 × 0.5 PR(A)

PR(C) = 0.5 + 0.5 (0.5 PR(B) + 0.5 × 0.5 PR(A))

得:

PR(A) = 4/3

PR(B) = 2/3

PR(C) = 5/6

此时,所有页面的级别之和不等于页面数量。

针对以上问题,我们对其排序算法进行进一步的改进,我们引进TPR算法。TSPR算法将查询条件与CIRCA数据库中主题进行匹配,并根据查询赐予与数据库中包含的主题的远近关系分配一个主题性页面级别得分,再将该得分与页面等级得分进行整合,然后得到最终的页面得分。

4.2 TPR算法

TPR算法包括页面分类和页面排序。页面分类是对抓取的网页进行页面分类。对每一个页面计算主题相关度,通过给定一个主题列表,并使用向量空间模型算法(VSM)来进行匹配,这个主题列表通过网络上一些ODP分类得到,并以这些人工收集的页面作为初始种子来进行归类。页面排序是采用TPR算法来进行页面等级计算,简单来说,就是对每一个主题相关的页面计算对应主题的页面等级得分,这个得分综合考虑了主题得分和主题相关度,因此利用这

个得分可以有效地提高查准率。

4.3基于主题的网页等级排序模型

(1)文本的向量化表示

文本的文本表示主要采用向量空间模型,其基本思想是以向量来表示文本,选取词作为特征

项,用表示,其中为第i个特征项的权重。为了将文本表示为向

量空间中的一个向量,我们首先对文本分词,由这些词作为向量的维数来表示文本。在该网页系统中,我们用采相对词频表示向量,即经过归一化的词频,其计算方法主要运用TF-IDF 公式。我们采用了一种比较普遍的TF-IDF公式:

其中为词t 在文本d中的权重,而为词t在文本d中的词频,N为训练文本的

总数,为训练文本集中出现t 的文本数,分母为归一化因子。

(2)特征项的抽取

为了抽取特征项,我们就要构造一个特征评分函数,把测量空间的数据投影到特征空伺,得到在特征空间的值,然后根据特征空间中的值对每个特征进行评估。我们根据特征评估结果,从中选出最优的且最有代表性的特征子集作为该类的类别特征。通过查找资料,我们采用互信息算法对于每个词进行特征选择,它与类别的互信息量的公式为:

,其中

为W 在中出现的比重, | N|为该类的训练文本数, N ( W , ) 为词W 在中

的词频, | V| 为总词数, 为该类所有词的词频和。而P( W) 同上面的

计算公式相同, 只是计算词在所有训练文本中的比重。

(3)训练方法与分类算法

为了对网络系统中大量的文本进行分类,我们采用简单向量距离分类法,根据对所有文本进行算术平均计算,将每类文本集生成一个代表该类的中心向量,然后在新文本来到时,确定新文本向量,计算该向量与每类中心向量间的距离也就是相似度,具体计算公式如下:

Sim()=

其中为新文本的特征向量, 为第j 类的中心向量, M 为特征向量的维数, 为向量的

第K维,即用两个向量之间的夹角的余弦来表示文本与类别之间的相似度,夹角越小,距离越近,余弦越大,相似度越大;反之相似度越小。

(4) 分类算法的修正

在网页系统中我们将主题组织成树型结构,分类算法只对叶子节点主题,也就是最下层的主题进行主题相关度计算。考虑到超链接的主题传递思想,假设主题传递的权重因子为

k(0

其中为所有对应特定主题源链接页面的主题相关度的加权平均,k为主题传递权重因

子。NSim()即为修正后的主题相似度,将其保存以作为页面等级计算的输入条件。

(5)构造主题相关度矩阵

为了进行不同主题的TPR计算,我们首先要构造出主题之间的相关度矩阵。这个相关度矩阵的意义在于:不同的主题之间存在相关性,相关主题页面的链接对目标页面的TPR也有影响,根据这个相关性,可以更加精确地计算出目标页面的TPR值。

我们现假设系统中有m个主题,给出一个m m的矩阵,记为主题相似度矩阵CO[i,j],对任意的 (i,j m),表示主题i与主题j的相关度。目前在系统中,简单地将主题传递进

行均分,即设定孩子节点平均分配父亲节点的主题相关度。

(6)主题页面得分计算

完成主题相关度矩阵的构造之后,我们对每一个主题相关的页面分别用TPR算法进行计算。根据页面分类的结果,将页面与每一个叶子主题的主题相关度以矩阵的形式进行记录,记为叶子主题页面相关度矩阵KT[p,i],表示页面P与叶子主题i的相关度,在这个矩阵中,页

面与所有父亲节点主题的相似度都记为0。根据网页间的超链接,我们可以构造出一个n n

的链接矩阵L[p,q],表示页面P与页面q的之间的超链接情况,0表示页面声中没有指向页面q的超链接,l表示页面P有指向页面q的超链接。记KA[p,i]为每一个页面与所有主题(包括叶子主题和父亲主题)的相关度,其计算公式如下:

KA[p,i]=KT[p,i]CO[i,j]

即叶子主题页面相关度矩阵与主题相似度矩阵相乘。这样做主要是为了减少页面分类的计算量。根据得出的KA[p,i],我们对每一个主题分别进行页面等级计算,在传统的PageRank 算法的基础上对其进行改进。我们考虑页面的主题相似度,一个与主题有相似关系的页面在对应主题的页面等级计算中应该有较高的等级,也就是说同一主题的页面链接比不同主题的页面链接有更高的权威,主题页面等级的计算公式为:

TPR(P)=(1-)+(KA[,i])TPR()/C()++KA[]TPR()/C()+KA[p,

i]

其中TPR(P)为网页P对应主题i的TPR值,同时将主题相似度KA[P,i]作为页面的权重参与TPR计算,也就是说,每一个与主题相关的页面都是权威页面,而其权威性通过页面与主题

的相关度来进行度量,和为权重因子,分别代表页面权重因子和主题权重因子,在算法中取为0.15,为0.5。为指向网页p的n个网页。这样就可以根据迭代算法建立方程MP=?P解出特征向量P,求到TPR(P)的值。

4.4TPR 算法求解

为了探讨网页排序与主题的关系,我们现假设网络系统中存在13个主题,分别为:体育,球类,篮球,足球,体操,艺术体操,健美体操,武术,拳击,散打,田径,跑步,跳高,其层次关系如图二所示。

图二 主题结构图

假设主题相似度矩阵CO 如下表:

假设各网页间的连接关系如模型一中的图一所示,其链接矩阵为A=()。我们假定网页1A 包含主题篮球与跳高;网页2A 包含主题健美与艺术;网页3A 包含主题拳击与散打;网页4A 包含主题足球与跑步;网页5A 包含主题篮球与足球;网页6A 包含主题健美与跑步;网页7A 包含主题艺术与散打;网页8A 包含主题拳击与跳高;网页9A 包含主题健美与跳高;网页

10A 包含主题篮球与艺术。然后我们根据向量距离的页面分类算法,通过向量与每类中心向

量间的距离的计算公式: Sim(

)=

得到页面与叶子主题的相关度矩阵KT[p,i]后,我们通过公式KA[p,i]=KT[p,i]CO[i,j]得到每一个页面与所有主题的相关度矩阵,通过主题页面等级的计算公式:TPR(P)=(1-)+

(KA[

,i])TPR(

)/C(

)++KA[

]TPR(

)/C(

)+

KA[p,i],得到网页P对应主题i的TPR值的矩阵

4.5基于主题的网络等级排序模型合理性

我们将由pagerank算法计算出的网页权重值绘制成下表:

表六 pagerank算法的计算结果

网页网页

从上表的可以看出,pagerank算法不能给出对应不同主题的页面得分,从而导致对于不同主题的同一关键词进行查询时返回的结果有误差,而在使用TPR算法时,针对对应不同主题的同一关键字,系统能给出更加准确的结果,提高了查准率。

五、模型评价及推广

5.1模型评价

对于网页等级模型,我们采用PageRank算法,因此该模型侧重各网页间的链入链出量。计算PageRank值时,若一网页的链入量越多则表示很多网页推荐了它,则该网页满足用户搜索条件的概率越高。若一网页被专业网页推荐则其pagerank值比该网页被非专业网页的值高。这样PageRank值就从一个网页传递到它链接的下一个网页,通过迭代计算,最终网页积累的PageRank值越大则该网页可信赖程度越高。

这种算法思想比较简单,因此比较容易排序,但是PageRank算法考虑影响网页排序的因素过于单一,排序结果可能不太准确。因为若一些与主题无关的网页被其他网页推荐,这些网页也可以获得很高的PageRank值,但是他们对于主题的确是毫无用处的,所以我们在网页排序时应尽可能避免这些情况发生。因此针对主题漂移现象我们对网页等级模型进行了改进,我们在PageRank算法的基础上将与主题相关的网页进行了分类,然后根据分类的结果分别对每一个主题进行页面等级计算,这样每一个页面对不同的主题将呈现出不同的页面等级得分,能更加准确地反映出页面的重要性。

5.2 模型推广

本文中的两个模型不仅可以用于网页排序,在一定条件的改进下,还可以在其他领域应用。如在考虑网页链接同等重要和数据可靠的条件下,可以用于高校排名。由于pagerank

算法只需从网络拓扑结构出发研究网页重要性,根据这个特点我们可以将本文中的模型应用到体育比赛排名问题中。

数据结构课程设计计算器

数据结构课程设计报告 实验一:计算器 设计要求 1、问题描述:设计一个计算器,可以实现计算器的简单运算,输出并检验结果的正确性,以及检验运算表达式的正确性。 2、输入:不含变量的数学表达式的中缀形式,可以接受的操作符包括+、-、*、/、%、(、)。 具体事例如下: 3、输出:如果表达式正确,则输出表达式的正确结果;如果表达式非法,则输出错误信息。 具体事例如下: 知识点:堆栈、队列 实际输入输出情况: 正确的表达式

对负数的处理 表达式括号不匹配 表达式出现非法字符 表达式中操作符位置错误 求余操作符左右出现非整数 其他输入错误 数据结构与算法描述 解决问题的整体思路: 将用户输入的中缀表达式转换成后缀表达式,再利用转换后的后缀表达式进行计算得出结果。 解决本问题所需要的数据结构与算法: 用到的数据结构是堆栈。主要算法描述如下: A.将中缀表达式转换为后缀表达式: 1. 将中缀表达式从头逐个字符扫描,在此过程中,遇到的字符有以下几种情况: 1)数字 2)小数点 3)合法操作符+ - * / %

4)左括号 5)右括号 6)非法字符 2. 首先为操作符初始化一个map priority,用于保存各个操作符的优先级,其中+ -为0,* / %为1 3. 对于输入的字符串from和输出的字符串to,采用以下过程: 初始化遍历器std::string::iterator it=infix.begin() 在当it!=from.end(),执行如下操作 4. 遇到数字或小数点时将其加入到后缀表达式: case'1':case'2':case'3':case'4':case'5':case'6':case'7':case '8':case'9':case'0':case'.': { to=to+*it; break; } 5. 遇到操作符(+,-,*,/,%)时,如果此时栈顶操作符的优先级比此时的操作符优先级低,则将其入栈,否则将栈中的操作符从栈顶逐个加入到后缀表达式,直到栈空或者遇到左括号,并将此时的操作符加入到栈中,在此过程中需判断表达式中是否出现输入错误: case'+':case'-':case'*':case'/':case'%': { if((it+1)==from.end()) { cout<<"输入错误:运算符号右边缺少运算数"<

简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

微机课设简易计算器

微机课程设计报告 题目简易计算器仿真 学院(部)信息学院 专业通信工程 班级2011240401 学生姓名张静 学号33 12 月14 日至12 月27 日共2 周 指导教师(签字)吴向东宋蓓蓓

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C52芯片、汇编语言、数码管、加减乘除

基于安卓的计算器的设计与实现

安卓应用程序设计 ——简易计算器的实现院(系)名称 专业名称 学生姓名 学生学号 课程名称 2016年6月日

1.系统需求分析 Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android 的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。计算器通过算法实行简单的数学计算从而提高了数学计算的效率,实现计算器的界面优化,使界面更加友好,操作更加方便。基于android的计算器的设计,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作,即可单机按钮进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。 2.系统概要设计 2.1计算器功能概要设计 根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有清除功能。 图2.1系统功能图 整个程序基于Android技术开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其他的功能。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及 响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结

计算器制作

VB应用程序的设计方法 ——“简易计算器”教学设计 揭阳第一中学卢嘉圳 教学内容:利用所学知识制作Visual Basic程序“简易计算器” 教学目标:能熟练运用CommandButton控件及TextBox控件进行Visual Basic(以下简称VB)程序的设计,能熟练运用条件语句编写代码 教学重点:运用开发VB程序一般过程的思路来开发“简易计算器” 教学难点:分析得出实现“简易计算器”各运算功能的算法。 教材分析: 当我刚开始进行程序设计的教学时,便感觉比较难教。这是因为程序设计本身枯燥、严谨,较难理解,而且学生大多数都是初学者,没有相应的知识基础。对于《程序设计实例》,我们选用的教材是广东教育出版社出版的《信息技术》第四册,该书采用的程序设计语言是VB,而学生是仅学过了一点点简单的QB编程之后就进入《程序设计实例》的学习的。 教材为我们总结了设计VB程序的一般步骤:创建用户界面;设置控件属性;编写事件程序代码;运行应用程序。我总结了一下,其实VB程序设计可分为设计用户界面及编写程序代码两个环节。 教学过程: 一、引入新课 任务:让学生按照书上提示完成一个非常简单的VB程序——“计算器”(仅包含开方、平方、求绝对值功能)的制作。 目的:加强对CommandButton控件及TextBox控件的掌握,复习对开方、求绝对值函数的使用。 引入本节课的学习任务:设计一个简易计算器,包含加、减、乘、除、开方、平方等运算。程序界面可参考下图。 具体功能为:在Text1中输入一个数值,然后单击代表运算符的按钮则运算结果会在text2中显示出来;比如在text1中输入一个2,然后按“+”按钮,再输入一个3按“-”按钮,再输入一个-4按“*”按钮,则实际为(2-3)*(-4);最后在text2中显示结果为4。

模拟计算器程序-课程设计

模拟计算器 学生姓名:**** 指导老师:**** 摘要本课程设计的课题是设计一个模拟计算器的程序,能够进行表达式的计算,并且表达式中可以包含Abs()和Sqrt()运算。在课程设计中,系统开发平台为Windows ,程序设计设计语言采用C++,程序运行平台为Windows 或*nix。本程序的关键就是表达式的分离和处理,在程序设计中,采用了将输入的中缀表达式转化为后缀表达式的方法,具有可靠的运行效率。本程序做到了对输入的表达式(表达式可以包含浮点数并且Abs()和Sqrt()中可以嵌套子表达式)进行判定表达式是否合法并且求出表达式的值的功能。经过一系列的调试运行,程序实现了设计目标,可以正确的处理用户输入的表达式,对海量级数据都能够通过计算机运算快速解决。 关键词C++程序设计;数据结构;表达式运算;栈;中缀表达式;后缀表达式;字符串处理;表达式合法判定;

目录 1 引言 (3) 1.1课程设计目的 (3) 1.2课程设计内容 (3) 2 设计思路与方案 (4) 3 详细实现 (5) 3.1 表达式的合法判定 (5) 3.2 中缀表达式转化为后缀表达式 (5) 3.3 处理后缀表达式 (7) 3.4 表达式嵌套处理 (8) 4 运行环境与结果 (9) 4.1 运行环境 (9) 4.2 运行结果 (9) 5 结束语 (12) 参考文献 (13) 附录1:模拟计算器源程序清单 (14)

1 引言 本课程设计主要解决的是传统计算器中,不能对表达式进行运算的问题,通过制作该计算器模拟程序,可以做到快速的求解表达式的值,并且能够判定用户输入的表达式是否合法。该模拟计算器的核心部分就在用户输入的中缀表达式的转化,程序中用到了“栈”的后进先出的基本性质。利用两个“栈”,一个“数据栈”,一个“运算符栈”来把中缀表达式转换成后缀表达式。最后利用后缀表达式来求解表达式的值。该算法的复杂度为O(n),能够高效、快速地求解表达式的值,提高用户的效率。 1.1课程设计目的 数据结构主要是研究计算机存储,组织数据,非数值计算程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。 模拟计算器程序主要利用了“栈”这种数据结构来把中缀表达式转化为后缀表达式,并且运用了递归的思想来解决Abs()和Sqrt()中嵌套表达式的问题,其中还有一些统计的思想来判定表达式是否合法的算法。 1.2课程设计内容 本次课程设计为计算器模拟程序,主要解决表达式计算的问题,实现分别按表达式处理的过程分解为几个子过程,详细的求解过程如下:1 用户输入表达式。 2 判定表达式是否合法。 3 把中缀表达式转化为后缀表达式。 4 求出后缀表达式的结果。 5 输出表达式的结果。通过设计该程序,从而做到方便的求出一个表达式的值,而不需要一步一步进行运算。

比较PageRank算法和HITS算法的优缺点

题目:请比较PageRank算法和HITS算法的优缺点,除此之外,请再介绍2种用于搜索引擎检索结果的排序算法,并举例说明。 答: 1998年,Sergey Brin和Lawrence Page[1]提出了PageRank算法。该算法基于“从许多优质的网页链接过来的网页,必定还是优质网页”的回归关系,来判定网页的重要性。该算法认为从网页A导向网页B的链接可以看作是页面A对页面B的支持投票,根据这个投票数来判断页面的重要性。当然,不仅仅只看投票数,还要对投票的页面进行重要性分析,越是重要的页面所投票的评价也就越高。根据这样的分析,得到了高评价的重要页面会被给予较高的PageRank值,在检索结果内的名次也会提高。PageRank是基于对“使用复杂的算法而得到的链接构造”的分析,从而得出的各网页本身的特性。 HITS 算法是由康奈尔大学( Cornell University ) 的JonKleinberg 博士于1998 年首先提出。Kleinberg认为既然搜索是开始于用户的检索提问,那么每个页面的重要性也就依赖于用户的检索提问。他将用户检索提问分为如下三种:特指主题检索提问(specific queries,也称窄主题检索提问)、泛指主题检索提问(Broad-topic queries,也称宽主题检索提问)和相似网页检索提问(Similar-page queries)。HITS 算法专注于改善泛指主题检索的结果。 Kleinberg将网页(或网站)分为两类,即hubs和authorities,而且每个页面也有两个级别,即hubs(中心级别)和authorities(权威级别)。Authorities 是具有较高价值的网页,依赖于指向它的页面;hubs为指向较多authorities的网页,依赖于它指向的页面。HITS算法的目标就是通过迭代计算得到针对某个检索提问的排名最高的authority的网页。 通常HITS算法是作用在一定范围的,例如一个以程序开发为主题的网页,指向另一个以程序开发为主题的网页,则另一个网页的重要性就可能比较高,但是指向另一个购物类的网页则不一定。在限定范围之后根据网页的出度和入度建立一个矩阵,通过矩阵的迭代运算和定义收敛的阈值不断对两个向量authority 和hub值进行更新直至收敛。 从上面的分析可见,PageRank算法和HITS算法都是基于链接分析的搜索引擎排序算法,并且在算法中两者都利用了特征向量作为理论基础和收敛性依据。

用计算器计算(教案)

课题:用计算器计算 教学内容:三年级下册第48—51页内容 教学目标: 1、在运算中了解计算器的结构和基本功能;能正确、熟练地运用计算器进行一、两步的式题运算。 2、能运用计算器解决一些简单的实际问题,探索一些基本的数学规律。 3、培养观察、比较、分析、归纳、概括等能力。 教学过程: 一、尝试运用 师:开学到现在,我们一直在学习计算,下面这些题,哪些你一眼能看出来答案的,直接说的得数。 1、初步尝试 90+56= 45×99≈ 87546—3469= 42×30= 2102÷30≈ 43×365= 师:最后两道看来有困难,列竖式算算。 师:先不报答案,要你自己检验做的对不对,你准备怎么样?试一试用计算器来验算,你们会吗? 师:谁愿意带上你的竖式计算上来展示意下,向大家演示一下你用计算器验算的过程可以吗?(鼓励和表扬) 师:看来,大家还真的会用计算器!想不想“再显身手”? 2、再次尝试:探索用计算器进行混合运算的方法 ①546×28-4276 ②2940 ÷28+763 ③15021-87×99 ④25120÷(449-289) (1)这4题与上面4题相比,有什么不一样?会做吗?请试一试。 (2)交流操作方法。 (3)你有没有感觉到这4道题在计算过程中有什么不一样? (4)用计算器计算③、④该怎么操作呢?我们以第③题为例,谁来介绍介绍?

(突出“记住中间数”、“使用MR键”、倒减等方法。) (①、②两题只要按顺序依次输入,③、④题要先算后一步,③④可以“记住过程得数”,③还可以倒减等) (5)介绍用存储键计算,尝试用“MR键”计算③④题。 二、解决生活问题 师:通过这几道题计算,你感觉计算器怎么样?你们喜欢用计算器吗?下面我们就发挥计算器的作用,用它来完成一个非常有价值的问题。 1、出示:一个水龙头滴水的动态画面。据统计一个没有关紧的水龙头,每天大约滴18千克的水,这些水就这样白白流掉了。 (1)照这样计算一年(按365天计算)要浪费多少千克水? (2)把这些水分别装在饮水桶中(每桶约重15千克)算算大约能装多少桶? (3)你家每月用几桶水?算算这些水够你家用几个月?大约合多少年? 师:目前我国西南大旱,一些地区粮食因为缺水绝收。云南山区的孩子们喝脏水解渴。联系我们刚才的这些计算数据,你想到什么? 三、探索计算规律: 师:既然人们发明了这么好的计算器,我们就应该更好地运用它。让我们来挑战一下自己,探索计算的规律好不好? 1、找出规律后再填写每组的后2题得数,并用计算器检验。 19+9×9= 118+98×9= 1117+987×9= 11116+9876×9= 111115+98765×9= 学生汇报自己的发现。按这样一种规律写下去,下一题该是什么样的? 2、自己探索规律。 1122÷34= 111222÷334= 11112222÷3334= …… 111…1222…2÷333…34= 2001个1 2001个2 2000个3

大数据pagerank算法设计

算法设计: 假设一个有集合:A,B,C和D 是由4个网页组成的。在同一个页面之中,多个指向相同的链接,把它们看作是同一个链接,并且每个页面初始的PageRank值相同。因为要满足概率值位于0到1之间的需求,我们假设这个值是0.25。 在每一次的迭代中,给定页面的PR值(PageRank值)会被平均分配到此页面所链接到的页面上。 倘若全部页面仅链接到A,这样的话A的PR值就是B,C和D的PR值之和,即:PR(A)=PR(B)+PR(C)+PR(D){\displaystyle PR(A)=PR(B)+PR(C)+PR(D)} 再次假设C链接到了A,B链接到了A和C,D链接到了A,B,C。最开始的时候一个页面仅仅只会有一票。正因为这样,所以的话B将会给A ,C这两个页面每一个页面半票。按照这样来类比推算,D所投出去的票将只会有三分之一的票会被添加到属于A 的PR值上: {\displaystyle PR(A)={\frac {PR(B)}{2}}+{\frac {PR(C)}{1}}+{\frac {PR(D)}{3}}} 换个方式表达的话,算法将会依据每一个页面链接出来的总数 {\displaystyle L(x)}平均的分配每一个页面的PR值,然后把它添加至它指向的页面:

最后,这些全部的PR值将会被变换计算成为百分比的形式然后会再乘上一个修正系数。因为“没有向外链接的网页”它传递出去的PR值将会是0,而且这将递归地差生影响从而使得指向它的页面的PR值的计算出来得到的结果同样是零,因此每一个页面要有预先设置好了的一个最小值: 需要注意的是,在Sergey Brin和Lawrence Page的1998年原版论文中给每一个页面设定的最小值是1-d,而不是这里的(1-d)/N,这将导致集合中所有网页的PR值之和为N(N为集合中网页的数目)而并不是所期待的1。 所以,一个页面的PR值直接取决于指向它的的页面。如果在最初给每个网页一个随机且非零的PR值,经过重复计算,这些页面的PR值将会逐渐接近于某一个固定 定值,也就是处于收敛的状态,即最终结果。这就是搜索引擎使用该算法的原因。【测试环境】 【测试数据】

移动应用开发实验---简单计算器

“移动应用开发”实验报告 1

而受至到众多开发者的欢迎,成为真正意义上的开放式操作系统。计算器通 过算法实行简单的或学计算从而提高了数学计算的效率,实现计算器的界面 优化,使界面更加友好,操作更加方便。基于android的计算器的设计系统具 有良好的界面;必要的英互信息:简约美观的效票,使用人员能快捷简单地 进行操作,即可单机按钮进行操作,即时准确地获得需要的计算的结果,充 分降低了数字计算的难度和节约了时间。 2.系统概要设计 2.1计算器功能概要设计 根据需求,符合用户的实际需求,系统应实现以下功能:计算器界面友好, 方便使用,具有基本的加,减,乘,除功能。能够判断用户输入运算数是否 正确,支持小数运算,具有清除功能。 整个程序基于Android 技术开发,除总体模块外主要分为输入模块、显 示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之 前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算 以及一些其他的功能。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的 键盘输入以及响应触屏的按键,需要监听手机动作以及用指针事件处理方法 处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以 及最终的计算结果,同时负责显示一些其他的信息。 计算器模块主要描述了计算器的整体,实现了计算器的界面,负责用户 2

输入数据,计算,显示,清零等功能。 2.2输入模块设计 系统如果想完成计算器中各种功能,首先用户要能进行数据输入,由于 是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所 以在设计的时候就要充分的考虑这一点。正是由于考虑到这个特殊的地方, 所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用可以支 持触屏输入的特殊增强型图形用户界面类。 输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户 点击按键或者屏幕的时候监听会去调用相应的处理办法,本模块还需要为系 统提供一个较为直观的键盘图形用户界面。输入模块的功能图如图 2.3显示模块设计 作为手机计算器系统,显示部分也是必不可少的一部分。没有显示部分 就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由 此可见显示模块即包括输入的部分(因个人技术原因不能显示表达式的形式)也包括输出的部分。 显示模块主要完成的任务是描述计算器的显示区,该区域用于显示用户 输入的数据以及最终的计算结果和一些其他信息。同时本模块还将提供调用 和设置显示的具体方法。 3

计算器算法原理

计算器算法原理 除法也用类似竖式的方法,从高位到低位逐一得出结果。大概过程如下:(注意,是二进制运算) 1、先左移除数,直到除数不小于被除数,同时记录移动的位数; 2、开始循环,循环次数为前一步移动的位数加1; 3、比较被除数与除数的大小,如果被除数不小于除数,则该位结果为1,否则为0; 4、除数右移一位,继续循环。 这种方法同样可以进行小数运算,根据需要的有效数字位数确定循环次数。 漏了一点,修改一下: 3、比较被除数与除数的大小,如果被除数不小于除数,则该位结果为1,并把被除数减去除数,否则为0 加减乘除求余: #include #include #include #include #define DEF_32 #ifdef DEF_32 typedef unsigned int uint; const uint low_mask = 0xffff; const uint hig_mask = 0xffff0000; #else typedef unsigned long long uint; const uint low_mask = 0xffffffff; const uint hig_mask = 0xffffffff00000000; #endif const uint alignment = 8; struct _DATA_ ...{ size_t capacity;//容量 size_t len;//使用的存储单元 uint *p;//内容 }; typedef struct _DATA_ BigNumber; typedef BigNumber* BigNumberPtr; BigNumberPtr NewBigNumber(size_t len ); BigNumberPtr CopyNewBigNumber(BigNumberPtr p); void CopyBigNumber(BigNumberPtr o,BigNumberPtr n);

Pagerank算法与网页排序方法的建模

Pagerank 算法与网页排序方法的建模 摘要 随着互联网的飞速发展,各种杂乱无章的信息充斥其中,如何对数以亿记的相关网页进行排序成为搜索引擎的核心问题。针对这个现象本文根据题目要求建立了两个模型: 模型一:结合Google 的Pagerank 算法,建立了网上冲浪模型,得到Pagerank 算法定义: n i i 1 i P R(T )P R(A )(1d )d C (T ) ==-+∑ 用迭代算法通过MATLAB 编程计算出网页的PR 值; 模型二:由于传统PR 值算法仅考虑网页的外链和内链数量,偏重于旧网页;另外,传统算法不能区分网页中的链接与网页的主题是否相关,容易产生主题漂移现象;考虑其算法存在的缺陷,在此基础上为给出对搜索网页进行排序的方法,着重考虑搜索出的网页以下几个方面:外链,内链,时间反馈因子和相关度,对PR 值进行改进,得到以下公式: Wt V VT sim VT V sim T PR d d p PR k i m j j i i P i +?+-=∑ ∑==1 1 , ,) () ()()1()( 以PR 值的高低来对搜索网页进行排序; 对于如何使新网站在搜索引擎中排名靠前,从影响网页的PR 值的因素:內链、外链、时间反馈因子和相关度出发对提高网页的PR 值以使其在搜索引擎中排名靠前给出了稳健的建议。 关键词 Pagerank 迭代算法 MATLAB 时间反馈因子 相关度 一、问题重述 随着互联网的发展,面对众多杂乱无章的信息,如何对数以亿计的相关网页进行排序成为搜索引擎算法的核心问题。一个搜索引擎的算法,要考虑很多的方面。主要是“域

名、密度、内链、外链、相关度、服务器稳定、内容更新、域名时间、内容数量”这些方面。不同的搜索引擎侧重点也不同,比如Google,它对收录的网站有一个重要性排名的指数,被称为Pagerank,作为对搜索网页排序的重要参数。 根据搜索引擎与Pagerank,考虑如下问题: 1.考察Google的Pagerank算法,建立数学模型,给出合理的Pagerank的计算方法; 2.如果你是搜索引擎的建设者,请考虑你会侧重考虑搜索网页的那些方面,给出你对搜索网页进行排序的方法; 3.如果你是某新网站的建设者,请考虑使你的网站在第2题中你建立的搜索引擎中排名靠前的方法。 二、问题分析 互联网的迅速发展,使现有的搜索引擎面临着巨大的挑战,面对众多杂乱无章的信息,如何对数以亿计的相关网页进行排序成为搜索引擎算法的核心问题,因此,搜索引擎排序算法也就称为众多搜索引擎关注的关键问题之一。 对于问题1,根据题目要求,结合Google的Pagerank算法,PageRank算法的基本思想是:页面的重要程度用PageRank值来衡量,PageRank值主要体现在两个方面:引用该页面的页面个数和引用该页面的页面重要程度。若B网页设置有连接A网页的链接(B为A的导入链接时),说明B认为A有链接价值,是一个“重要”的网页。当B网页级别(重要性)比较高时,则A网页可从B网页这个导入链接分得一定的级别(重要性),并平均分配给A网页上的导出链接,由此建立了网上冲浪模型,用迭代算法计算出网页的PR值。 对于问题2,经过对Google的Pagerank算法的分析,发现该算法仅考虑了搜索出的网页的外链和内链的数量,以此来确定网页的PR值偏重于旧网页,即越旧的网页排名越靠前;对一个刚放到网上不久的新网页,指向它的网页就很少,通过计算后的PR 值就很低,在搜索结果中也就被排在了靠后的位置。然而在有些时候,比如新闻类网页和商务性信息,用户当然是希望先看到新的网页,因此我们在计算PR值时考虑加入时间反馈因子,使得在网络上存在时间比较长的网页被沉下去,在搜索结果中被排在靠后的位置;存在时间短的网页就会浮上来,在搜索结果中被排在较靠前的位置,方便用户查看。时间反馈因子利用搜索引擎的搜索周期来表征,即如果一个网页存在时间较长,它将在每个搜索周期中都能被搜到,对网页采取在同一个周期里不管搜到该网页几次,都算一次处理的方法,网页的存在时间正比于搜索引擎搜到该网页的次数,时间反馈因子与网页的存在时间成反比关系。 另外,Google的Pagerank算法是基于网页链接结构进行分析的算法,不能区分网页中的链接与网页的主题是否相关,这样就容易出现搜索引擎排序结果中大量与查询主题无关的网页的现象,即产生主题漂移现象。为解决这个问题,引入主题相关度这个概念。主题相关度就是搜索出的网页与其链入和链出网页的相似度,可用余弦相似度来度量计算。 在加入了时间反馈因子和相关性因素后,改进网页的PR值的算法,以PR值高低的来对搜索的网页进行排序。 对于问题三,主要通过模型二的结果,加强有力的因素,避免不利的方面 三、模型假设与符号说明

计算机中的常用算法

奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)做了一个调查,投票选出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)——计算离散的傅里叶变换(DF T)及其反转。该算法应用范围很广,从数字信号处理到解决偏微分方程,到快速计算大整数乘积。 14.梯度下降(Gradient descent)——一种数学上的最优化算法。 15.哈希算法(Hashing) 16.堆排序(Heaps) 17.Karatsuba乘法——需要完成上千位整数的乘法的系统中使用,比如计算机代数系统 和大数程序库,如果使用长乘法,速度太慢。该算法发现于1962年。 18.LLL算法(Lenstra-Lenstra-Lovasz lattice reduction)——以格规约(lattice)基数 为输入,输出短正交向量基数。LLL算法在以下公共密钥加密方法中有大量使用: 背包加密系统(knapsack)、有特定设置的RSA加密等等。

基于Java的计算器算法(源代码).(精选)

import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; /** * 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。但还不支持键盘操作。 */ public class Calculator extends JFrame implements ActionListener { /** 计算器上的键的显示名字*/ private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" }; /** 计算器上的功能键的显示名字*/ private final String[] COMMAND = { "Backspace", "CE", "C" }; /** 计算器左边的M的显示名字*/ private final String[] M = { " ", "MC", "MR", "MS", "M+" }; /** 计算器上键的按钮*/ private JButton keys[] = new JButton[KEYS.length]; /** 计算器上的功能键的按钮*/ private JButton commands[] = new JButton[COMMAND.length]; /** 计算器左边的M的按钮*/ private JButton m[] = new JButton[M.length]; /** 计算结果文本框*/ private JTextField resultText = new JTextField("0"); // 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字 private boolean firstDigit = true; // 计算的中间结果。 private double resultNum = 0.0; // 当前运算的运算符 private String operator = "="; // 操作是否合法 private boolean operateValidFlag = true; /** * 构造函数 */

pagerank算法实验报告

PageRank算法实验报告 一、算法介绍 PageRank是Google专有的算法,用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。它由Larry Page 和Sergey Brin在20世纪90年代后期发明。PageRank实现了将链接价值概念作为排名因素。 PageRank的核心思想有2点: 1.如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是pagerank值会相对较高; 2.如果一个pagerank值很高的网页链接到一个其他的网页,那么被链接到的网页的pagerank值会相应地因此而提高。 若页面表示有向图的顶点,有向边表示链接,w(i,j)=1表示页面i存在指向页面j的超链接,否则w(i,j)=0。如果页面A存在指向其他页面的超链接,就将A 的PageRank的份额平均地分给其所指向的所有页面,一次类推。虽然PageRank 会一直传递,但总的来说PageRank的计算是收敛的。 实际应用中可以采用幂法来计算PageRank,假如总共有m个页面,计算如公式所示: r=A*x 其中A=d*P+(1-d)*(e*e'/m) r表示当前迭代后的PageRank,它是一个m行的列向量,x是所有页面的PageRank初始值。 P由有向图的邻接矩阵变化而来,P'为邻接矩阵的每个元素除以每行元素之和得到。 e是m行的元素都为1的列向量。 二、算法代码实现

三、心得体会 在完成算法的过程中,我有以下几点体会: 1、在动手实现的过程中,先将算法的思想和思路理解清楚,对于后续动手实现 有很大帮助。 2、在实现之前,对于每步要做什么要有概念,然后对于不会实现的部分代码先 查找相应的用法,在进行整体编写。 3、在实现算法后,在寻找数据验证算法的过程中比较困难。作为初学者,对于 数据量大的数据的处理存在难度,但数据量的数据很难寻找,所以难以进行实例分析。

计算器程序

用VC++6实现计算器具有优先功能(一) 摘要在计算器的设计中,加、减、乘、除和括号功能是有优先级的,括号优先于乘除,乘除优先于加减,实现了这部分功能,就完成了计算器的主要框架的设计,在此基础上就可 扩充其它的功能,如各种函数功能。 关键词计算器,加、减、乘、除、括号,优先级 所使用的计算器一般具备加、减、乘、除功能,好一点的计算器还具有括号功能,使计算器能完成较复杂一些的设计,更好一点的计算器还具有各种函数功能,使计算器用起来更加实用和方便。总之,加、减、乘、除功能和括号功能是科学计算器所必须具有的功能,在此基础上可以很容易地扩充各种函数功能,如sin、cos、tan、log、lnx、x n等等,以实现复杂的运算。 一、优先功能 任何一个计算表达式,如a+b×c÷( d-e×f+g )-h,计算的规则是:先乘、除后,加、减,遇到括号先执行括号里的表达式,并且括号里的表达式同样遵循这一原则。因此,要获得正确的运算结果,首先是如何来实现先乘除后加减呢?这就要对操作符定义一个优先级,即谁先执行,而操作符的优先级通常是用自然数来表示的,称为优先数。+、-的优先数小于×、÷的优先数,而×、÷优先数小于括号〔〕,等号“=”的优先数最低,低于+、-的优先数;由于在一个计算表达式中既有操作数(整数或实数等)和操作符(+、-、×、÷、=等),还有操作符的优先数,这就至少需要二个堆栈,一个是暂存操作数或中间结果的堆栈,简称操作数栈;另一个是暂存操作符优先数的堆栈,称为操作符栈。为了编程的方便,这里操作符栈用了二个,一个用于暂存操作符的字符堆栈,另一个用于暂存操作符优先数(自然数)的堆栈。三个堆栈的栈深M取为常数,这里取M=50,用定长数组来表示,可保证堆栈不会出现上溢,当然用可变数组或链栈来表示则最好。 加、减的优先数,用整数int ADD=SUB=1来表示;乘、除的优先数用整数int MUL=DIV=2来表示。当然你可以取其它整数来表示,只要乘、除的优先数大于加、减的优先数即可。等号的优先数最低,用int EQU=0来表示。从上述表达式可看出,左括号“(”的优先数高于左边操作符的优先数,而低于右边操作符的优先数,这样一个左括号就有二个优先数,这样会使编程复杂化,因此须对左括号作特殊处理:就是遇到左括号直接压栈,而不做优先数的比较。另外,为了保证左括号右边的操作符能正常压栈,因此,左括号的优先数应低于加、减操作符的优先数,即左括号的优先数应取为int LPARENT=0;而对右括号的处理是:右括号一律不进栈。 实现加、减、乘、除和括号功能的算法步骤:首先从左向右读取计算表达式,读一个操作数或一个操作符,统称为读一个单词。 ⑴从左向右扫描表达式,读一个单词。 1)当前单词是操作数,压栈;继续本步。 2)当前单词是操作符,则转⑵。 3)当前单词是左括号“(”,则转⑶。 4)当前单词是右括号“)”,则转⑷。 5)当表达式扫描完毕,即单词是等号,则转⑸。 ⑵若操作符栈空,则操作符进栈,转⑴;若操作符栈不空,则比较当前操作符与栈顶操作符的优 先数。

计算器的设计与实现

J I A N G S U U N I V E R S I T Y 科学计算器的的设计 —windows窗体应用程序学院:计算机科学与通信工程 专业班级:计算机科学与技术1102班 姓名:戴桂明 学号: 3110602041 指导老师:曹汉青 日期:2013年12月20日

目录 1选题原因及理由..................... 错误!未定义书签。2设计思想及框架................................ 错误!未定义书签。 一. 主体功能.............................................. 错误!未定义书签。 二. 开发环境 (3) 3相关表格和流程图 ............................. 错误!未定义书签。 一. 系统功能表 (4) 二. 系统流程图 (5) 4设计特点及关键算法........................... 错误!未定义书签。 5 测试结果及测试分析 (6) 6设计总结 (7) 7附录(源代码) (8)

计算器的设计与实现 1 选题原因及理由 我们在学习生活中,常会遇到一些繁杂的数值运算,这时候我们就必须用到科学计算器,所以便着手开发了这个计算器程序,以便用于自己的学习工作。要计算功能有以下几个方面:加法,减法,乘法,除法,求幂,求e的指数次方,求平方根,求Sin,求Cos,求Tan及其反函数等。 也可达到以下目的: 1、巩固并加深学生对C++语言程序设计知识的理解; 2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别; 3、进一步掌握和应用VC++ 2008集成开发环境; 4、提高运用C++语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的窗体应用系统; 6、掌握书写程序设计开发文档的能力。 2 设计思想及框架 课题名称:高级计算器的实现 说明:实现一个计算器。 要求: 1)用“计算器”的标准视图执行简单的计算。 2)用其科学型视图执行高级的科学计算。 一.主体功能 1、十进制数的加、减、乘、除、乘方、取模等简单计算。 2、科学计算函数,包括(反)正弦、(反)余弦、(反)正切、(反)余切、开方、指数等函数运算。 3、以角度、弧度两种方式实现上述部分函数。 二.开发环境 VC++ 2008

相关文档
最新文档