基于分级相关性的预期排序倒数

基于分级相关性的预期排序倒数

摘要

评价信息检索结果的许多指标可用于二元相关性情况,而只有一个通常能用于分级相关性情况的指标,即折扣累积增益(DCG)。这个指标的一个缺点是它附加的性质和潜在的独立性假设:在一个给定的位置的文档总是具有一样的增益和折损,独立于显示在其之前的文档。启发自“级联”的用户模型,我们提出一个基于分级相关性的新指标克服这个困难并且隐式地折扣位于十分相关文档之下的文档的分数。更确切地说,这个新指标被定义为用户被引导找到相关文档所花费时间的预期倒数。这可以被看作是传统排序倒数指标被扩展至用于分级相关性情况,我们称这种指标为预期排序倒数(ERR)。我们基于一个商业搜索引擎的查询日志进行了广泛的评价,发现ERR指标比其他的社论指标更加贴合点击率度量结果。

分类和主题描述

H.3.4 [信息存储和检索]:系统与软件–性能评价(有效性和效率)

通用术语

实验、度量

关键词

评价,非二元相关性,网络搜索,用户模型

1. 简介

近期信息检索领域的评价工作获得了极大的关注,主要是由于信息检索系统的急剧变化。Cranfield评价范式和TREC 风格的评价方法背后的假设的有效性受到质疑,特别是根据不断增长的测试集,新类型的信息需求,和新相关数据源的可用性,如点击日志与众包。

如何正确评估Web搜索引擎仍然是一个具有挑战性、开放性的研究问题。大多数网络搜索信息检索文献的评价指标以累积收益为基础,如折扣累积增益(DCG)。这些指标是流行的,因为他们支持常用在判断网页文档相关与否的分级相关性。虽然支持分级的相关性是很重要的,但是评估标准还有其他重要的应该考虑的因素。

DCG无法解释的一个重要因素是用户实际中如何与文档排名列表交互。这个度量假设用户会根据一些仅依赖于位置的概率浏览至排序列表某一位置。然而,在现实中,一个用户浏览至排序列表某一位置取决于许多其他因素而不只是位置因素。DCG的一个严重问题是做出假定:排在第i位的文档的有益性独立于排在其之前的文档的有益性。最近有关为用户点击行为建模的研究已经表明DCG背后基于位置的浏览假设是无效的。相反,这些研究表明一个用户检验排在第i位文档的可能性取决于用户对排序列表中已察文档的满意程度。这种类型的用户模型称为级联模型。

更具体来讲,让我们考虑一个简单的例子。假设我们正在评价两个排名列表,判断是5分制(完美,优秀,良好,一般,和差)。假设第一个列表包含20个良好的文档,第二个列表中有1个完美的文档之后是19个差文档。哪一个排序列表更好?在大多数设置,DCG显示第一个列表是更好的。然而,在第二个列表中有一个完美的文档完全满足用户的信息需求,从而用户将观察第一个文档,被满足,停止浏览,并没有看到任何相关性差的文档。另一方面,根据第一个排名列表,用户将不得不花费更多的精力来满足他的信息需求,因为每一个良好文档仅仅部分满足需求。因此,相对于第一个列表用户实际上更喜欢第二个排序列表,因为它不仅满足了他们的信息需求,而且还最大程度上降低查询的精力耗费。

Moffat和Zobel最近提出的偏差排序精度(RBP)指标包含了一个简单的用户模型,但并未直接解决这里所描述的问题。这个度量为用户寻找相关文档的耐性建模。没有耐心的用户只会看结果的一小部分,而有耐性的用户将在排序列表中看得更加深入。这个简单用户模型的主要问题是真正的用户浏览行为是不可能完全取决于用户的耐性,还取决于排序列表结果的质量,正如上面的例子所阐述的。的确,Moffat和Zobel承认这一点并且解释到可以使用一个更复杂的用户模型,但留待扩展。

本文的主要目标是设计一个指标为RBP匹配一个更为精准的用户模型,从而提供比DCG和RBP更好的选择。为实现此目标,我们提出了一个新的指标称为预期排序倒数(ERR)。度量支持分级相关性判断并且假定一个级联浏览模型。以这种方式,指标以位于其之前的文档的相关程度作为前提条件来量化排在第i位文档的有益性。我们提出并在实践中证明,我们的指标比DCG更好的建模用户满意度,因此是评估检索系统的一个更合适的标准,特别是那些分级判断相关性的系统,例如Web搜索引擎。

这项工作有两项主要贡献。首先,我们提出了一个基于级联式用户浏览模型的新颖指标。我们将证明绝大多数之指标是基于位置的浏览,它已被证明是一个不好的假设,而且级联模型能够更好的捕获真实的用户浏览行为。其次,我们的实验进行在一个来自于商业搜索引擎的非常大的测试集的背景下,实验结果表明,ERR指标在与一系列基于点击的指标对应时远远优于其它社论指标,例如DCG。

本文的其余部分如下。首先,第2节提供了一些有关信息检索评价各个方面的背景信息。然后第3节介绍了用户浏览模型最近的研究。我们提出的ERR指标在第4节中解释。第5节探讨ERR与几个现有检索指标的相关性。严格、综合的实验评价在第6节给出。最后,在第7节中,我们讨论对模型可能的扩展,并在第8节总结本文。

2. 信息检索评价

评价在信息检索领域中起着至关重要的作用。检索系统通常被评估的是它们的有效性和效率。效能评价量化搜索系统如何满足用户的需求搜索需求,而效率评价测量系统的速度。既然我们的重点是有效性,我们将提供信息检索中已提出的各种有效性度量标准的简要概述。

绝大多数信息检索的有效性度量依赖于不明确的相关性概念。这很大程度上是由于Cranfield评价范式和TREC风格评价方法的流行和普及。这些评价是基于一组固定的查询,一组固定的文件,和一套固定的相关性判断。相关性判断根据社论人员对给定查询一个文档的相关性的评估来收集。以这种方式,相关性判断捕捉用户相关性的概念。然后通过比较检索系统的输出来计算检索指标,通常根据评价集的查询以及相关性判断,最后以排序列表的形式给出。

虽然相关性判断和指标可以解耦,但他们是密切相关的。因为这个原因,每当提出了一种新的方法收集相关性判断,它通常伴随着一个新的检索度量。不过,反之却不常见,如新提出一个指标并不总是需要新的相关性判断标准。

相关性判断有许多不同的方法。Cranfield实验,以及后来的评价,作出一系列关于判断的假设。例如,假定相关性是论题的(相关文档与查询主题相同),判断是二元的(相关/不相关),独立的(文档A的相关性独立于文档B的相关性),稳定的(判断不随时间变化),一致的(专家判断是一致的),和完整的(没有遗漏的判断)。这些假设构成大多数经典的信息检索指标的基础,例如精度,平均精度,以及召回率。

这些假设在一定程度上简化了编辑过程,许多是不现实的,没有很好地贴合用户相关性。因此,研究人员着眼于假设放宽后产生新的检索指标。我们现在举几个例子。首先,Jarvelin和KeKalainen着眼于分级的相关性判断并提出能够利用这种判断的DCG指标。其次,TREC新颖性追踪致力于相关的相关性评估。TREC互动追踪评为每个查询分配子主题。要求专家依据子主题来判断每个文档的相关性。这已经产生了各种各样的子主题检索和多样性指标。最后,不同的研究人员展示了完整性假设可以放宽,通过以不同的方式推断缺少判断的文档的相关性,忽略未经审判的文档,或是智能地选择未经审判的文档以获取判断。

评价指标本身往往要简单得多并且相对相关性判断有更少的问题。评价指标根据给定的检索系统的输出及相关性判断计算。大多数度量对什么有助于一个“良好”的排序列表作各种各样的假设,均基于现有的社论判断和利用一些简单的数学计算公式的操作。例如,对于一给定查询位置K处的DCG值计算为:

这里gi是指排在第i位文档的相关性级别。公式的分子用大的相关性级别评价文档的收益,而分母当排名越低时不同程度折扣文档的收益。这个简单的指标启用了概念:将相关度高的文档排在前面比将其排在后面的系统更优。这个通用的想法构成多数基于精度指标的基础,包括了介绍中讲到的平均精度和RBP指标,计算如下:

这里gi是指排在第i位文档的相关性程度,p是一个参数(模拟了用户浏览排序列表时的耐性)。这项指标与DCG进行了类似的假设,除了耐性参数p建模了用户浏览行为的一些概念,这是DCG所缺失的。我们将回到这个重要的方面,它如何涉及到我们提出的指标将在后文阐述。

我们现在解释所提出的指标适合于广泛的评价研究之处。我们指标的思想类似于DCG,因为我们假设相关性判断是分级,独立和完整的。然而,需要引起注意的是与DCG相比,我们的指标可以很容易地扩展至处理不完整性,但为简单起见我们假定完整性。但我们的指标不同于DCG,因为它集成了一个用户模型,作为依赖相关性判断的代理。DCG仅仅基于文档的排名折扣DCG折扣其值,却不考虑任何用户先前看到的文档。然而,我们的指标基于以前看到文档的相关性隐式折扣得分值。我们所用的折扣方法对应于用户浏览模型。

3. 用户模型

一个密切反映了用户与检索系统交互的准确的用户模型,是产生一个良好相关性度量的必要条件。在我们深入指标细节之前,首先回顾检索系统现有的用户模型是十分必要的。一般情况下,用户模型有两种主要类型︰位置模型和级联模型。这两种类型的模型都试图捕获搜索结果呈现的位置偏向。位置模型假设文档中不同位置的独立性并且将检验概率作为位置的函数,而级联模型在整个结果集为文档相关性和检验概率同时建模。

位置模型

基于位置的模型是一类为处理在排名的检索系统固有的呈现偏置问题的流行方法。其中,检验模型显式预测不同位置的检验概率。它依赖于假设:用户点击一个链接,当且仅当满足以下两个条件︰用户检查URL且发现它是相关的;另外,检验概率就仅仅依赖于位置。单击在位置p上的URL u的概率因此被建模为:

这里au是指URL u的吸引力或用户点击该URL的倾向(独立于位置)-并且bp位置p处的检验概率(只取决于位置)。

DCG指标和RBP指标都采用位置模型作为其用户浏览模型的基础并且应用到基于位置的即随着排名靠后逐渐减少文档所作的贡献的折现函数中。图 1比较了DCG和RBP的折扣函数,使用检验概率bp(使用上面描述的位置模型据商业搜索引擎单击日志估计的概率)。如图所示,p=0.7时的RBP更近似估计的检验概率。然而,如下所示,假定检验概率只取决位置有一些严重的基本缺陷。

例如在排在第3位的相关文档;如果排在第1位和第2位的文档都是非常相关的,那么很可能,此文档将不审查从而有很少的点击次数。另一方面,如果两个顶部的文档是非相关的,它就更有可能被审查并被点击多次。仅取决于位置的点击模型将不能够建模这两种情况–当之前的文档不一样时同一位置的同一文档有不同的点击率 (CTR)。从商业搜索引擎点击日志举一个关于这种现象的真实例子,如图2所示。

在此示例中,我们观察到在位置 1的URL www.myspace.com点击率是在位置2处的相同 URL的9倍。然而平均来说,位置1的点击率大约是位置2的两倍。区别如此之大的原因在于:位置1处显示的URL是完美的匹配故此用户甚至很少浏览到位置2。位置模型,假设其中URLs的独立性,难以解释这样一种急剧的CTR差异。

级联模型

上面的例子表明,为了准确地建模点击率和检验概率,位置是不充足的而且位于其上方文档的相关性必须予以考虑。级联模型不同于位置模型:它考虑到搜索结果页面上URLs的相关性。在其一般形式中,级联模型假定用户视图搜索结果从顶部到底部,在每个位置,用户有一定概率被满足。Ri是指在位置i用户被满足的概率。一旦用户对某一文档满意,他/她终止搜索于是不论以下文档如何排列都将不被审查。很自然地预期 Ri是关于相关性等级的增函数,而事实上下面我们将吸收松散定义的概念”相关性”。算法1将概述这个通用版本的级联模型。

两个模型文档满足用户的概率都被定为Ri。Ri值可以被估计为点击日志上的最大可能性。另外,如下面章节要做的,Ri 值可以设置为URL社论级别的函数。一组给定的 Ri,会话用户表示满意并停止在第i位的可能性是:

这将可能性简化为:用户对前i-1个结果不满意且对第i个结果满意。

4. 所提指标

我们现在介绍一下我们提出的指标,基于上一节所述的级联模型。一个关键的步

骤是定义用户查找到相关文档的概率作为文档等级的函数。gi是第 i 个文档的级别,然后︰

其中R是相关性等级向相关性概率的映射。以不同方式R是可选的;对应于DCG中使用的收益函数,我们将其确定为:

当文档不相关时(g=0),用户认为它相关的概率是0,然而当文档十分相关时(g=4,5分制),那相关的概率接近1.

我们首先以一个更通用的方式定义指标,考虑一个关于位置的效益函数φ。这个函数满足φ(1)=1且当r趋近于正无穷时φ(r)趋近于0.

下文我们将考虑特殊情况:φ(r)=1/r,但这个选择并没有特殊用意,例如,我们也可以选择像DCG中的折扣函数一样使φ(r)=1/log2(r+1)。

似乎从前面的定义计算ERR并不简单因为有一个期望值。然而它可以很容易计算,如下所示︰

n是排序列表中文档的个数。用户停在位置r的概率由级联模型的定义得出。将它代入上面的等式,我们最后得到:

初始计算需要O(n2)的时间复杂度。但如算法2所示,ERR可以时间复杂度O(n)来容易的计算。

相比基于位置的度量标准,例如仅仅依据位置进行折扣的DCG和RBP,ERR中的折扣取决于在其之前文档的相关性。在位置r处文档的“有效”ERR是:

因此排在之前的文档越是相关,则相应折扣越大。这个折扣返回满意的结果因为它反应了真实的用户行为。

图3总结了我们到这里为止的讨论。图中显示了用户模型与度量指标的联系。如图所示,多数传统的指标,如 DCG和RBP假定基于位置的用户浏览模型。正如我们已经讨论过,这些模型已经被表明较差的反映实际用户的行为。基于级联的用户模型,一个更准确的用户模型,构成了我们提出的ERR指标的基础。

5. 与其他指标的相关性

正如我们在第2节中所讨论的,我们的指标一定程度上是类似于DCG。指标也与几个其他指标有共同点,我们将在这一节描述。

首先,我们的指标与预期的搜索长度(ESL)指标相关,它是由Cooper在1968年提出。这个指标,定义在弱顺序文档,量化的用户查找 K个相关文档所需工作量。这项指标计算预期用户在找到第K个相关文档之前,按顺序浏览搜索结果列表将要看到的非相关文档的数量。最简单的情况,弱的顺序是作为系统的排名输出,此时ESL可以通过简单统计第K个相关文档前不相关文档的个数统计得出。我们的指标衡量期望的用户满意所需的努力,而不是假定用户想要找到K相关文档。

其次,ERR与Moffat和Zobel提出的RBP指标密切相关。我们的指标可以视作是对其的一个拓展,通过使用级联模型作为用户浏览模型来泛化RBP。级联模型与RBP的结合是自然的并且提供了许多益处,包括不需要设置先验概率并且在一个统一框架中无缝结合了人的判断和点击率,正如7.3节所讨论的。

再次,对应于二元相关性背景,假定所有的Ri值不是0就是1。这里可简化为:

即刚好是排名倒数(RR)指标。因此,在二元相关性情况下,ERR简化至RR。

第四,ERR可以被视作特殊情况的规范化累计效益(NCU),计算如下:

p(r)是指用户停在位置r的概率,并且NU(r)是效益—被定义为用户从位置1检验至位置r的益处与努力的组合。ERR情形下,p(r)由级联模型(2)给出,而NU(r)=1/r。但是我们可以考虑其他的效益函数NU,例如精度或是规范化的累计效益。ERR与NCU重要的共同点是将用户停止的概率从效益中分离出来。

最后,当Ri很小时ERR可以看作其它指标附加的情况,例如DCG。这种情况下, ,等式(5)近似等于:

从用户模型角度看要考虑无穷小Ri当然没有道理,但这里的要点是,当Ri远小于1时,ERR被证实与DCG更相似。特别是对只有轻微相关文件的困难查询极易发生。这种行为也被在实践中证实,具体请参阅第6.2节末尾。

6. 评价

新指标的评价具有挑战性,因为没有标准与之进行比较。因此,大多数提出了新的衡量标准的论文并没有直接评价。例如在 [16,17] 表明新介绍的指标与其他标准的度量度量相关。然而,这并不意味着这些衡量标准在用户满意度上是”更好的”。

我们试图在本文通过考虑点击率指标缩小这种差距。即使点击率包含间接、嘈杂的用户反馈,他们仍然包含一些关于用户喜好的有价值的信息。事实上,通过点击率数据分析已被证明能够更好的估计检索系统的质量。在这次评估,我们将计算各种单击度量和社论度量标准的相关度。

6.1 数据集

6.2与点击率指标的相关度

6.3两种排序方法的比较

7. 扩展

这一章节讨论几种可能的ERR扩展方式,可能会在众多评价中有所用处。

7.1 参数R

如果L是相关性级别数目,然后在我们的指标有L个可调参数对应R(g)值。我们可以通过最大化与点击率的相关性或是并行测试的一致性优化他们,而不是修正等式(4)中的这些值。后者是为DCG而做。除了研究映射函数R,也可以研究效益函数φ(见定义1),也就是说,不取φ(r)=1/r,而是研究φ(1),…φ(K)的值,其中K是位置的个数。

7.2 扩展的级联模型

原级联模型之后延伸至包括放弃概率中︰如果用户是在给定的位置不满意,他将研究下一URL的概率为γ,但同时有1-γ的概率放弃。在该模型中,用户在r处停止的概率是︰

除了乘γr-1以外与等式(2)相同。由用户放弃的概率,它能够使得定义一个更简单的效益函数变得合理:用户放弃的话取值0,否则为1;即定义1中的φ(r)=1.结果的指标定义为:

与ERR公式(5)十分类似,唯一的不同是衰减因子1/r被一个几何衰减因子γr-1所替代。

7.3与点击率联系

从相关性等级到相关性概率映射函数目前是选择匹配DCG的增益函数。另一种定义映射函数就是直接从点击日志研究它。例如 R(g)可以是从所有等级为g的URL的点击日志中估计的。

我们提出的度量也可以容易地扩展。到目前为止多数前面的指标已完全基于一种类型的相关性判断并且不容易扩展以使用多于一个。因为我们的指标基于点击模型,指标中点击可以无缝地结合相关性判断。当存在一个文档缺少编辑判断,我们可以使用其预测的相关性概率,这个概率将级联模型与点击日志结合。这可以帮助缺少判断

的问题。另一方面,我们也在评价方面很大程度上依靠点击率,而且当我们不能自信地从点击日志预言概率只有积极收集编辑判断。后者将会是评价搜索引擎更具成本效益的方式。

7.4 多样性

研究纳入多样性概念的指标最近得到关注。本文提出的指标和背后的级联模型可以轻松地扩展以处理这一概念。

以P(t|q)作为给定查询q的主题的概率分布。每个文档现在就依据可能的主题进行判断,git表示相对于主题t位置i处的文档的级别。关联的相关性概率就是Rit:=R(git).正如标准级联模型,对主题t感兴趣的用户将在r处停止的概率为:

边缘化主题,用户停在r处的概率为:

于是多样化版本的ERR可以写作:

有趣的是与(6)类似的方程已在[1]得到推导,但是是为了找到一整套不同的结果,而不是为了评价 (他们的评价基于期望的DCG,我们看来,对尾端意图没有足够的重视)。精确的说,[1]的目标函数是该用户找到相关结果的概率,不是预期排序倒数。但两者是类似的。而且 [1]在结论中指出,在今后的工作,它会更好的优化为”用户将找到有效信息的预期排序”而不是找到一些的概率︰那正是公式(6)所实现的。

8. 总结

在本文中,我们提出一个新颖的信息检索评价指标称为预期排序倒数或ERR。这个指标,由级联用户浏览模型激发,衡量用户以满足他们的信息需要的(逆)预期工作量。该指标不同于平均精度、 偏向排名精度和DCG:它很大程度上折扣出现在高度相关的文档之后的文档的贡献。这种从级联模型汲取的直觉,假定用户如果已经看到一个或多个高度相关的文档更可能会停止浏览。ERR支持分级的相关性判断并且在二元相关性判断情况下简化至排序倒数。

在从商业搜索引擎的数据集上面进行了一套严格的实证评估。结果表明,ERR与DCG及其他社论指标相比而言,和基于点击率的指标有更好的相关度。相关度的差异在导航的、短的,和页头查询尤为突出,ERR是比DCG更高度相关的。我们的实验结果表明,ERR比DCG更好地反映了真实的用户浏览行为并且更准确地量化用户满意度。

最后,我们提出了几个ERR可能的扩展,这些能使得该指标更具备鲁棒性和吸引力。这些扩展包括一个自动估算指标参数的方法,在指标中使用人的社论判断和点击率数据两者的能力,以及一个简单的将多样性的概念纳入指标的方式。

因此,我们主张ERR应该替换web搜索引擎实际的评价指标DCG,因为它是启发自准确的用户浏览模型,与广泛的基于点击率的指标贴合度更好,并且拥有许多极具实践性、有用的扩展。

时间: 2024-10-18 17:12:27

基于分级相关性的预期排序倒数的相关文章

基于相邻元素交换的排序算法的下界

逆序(inversion)是指序列中具有性质“i<j,但a[i]>a[j]“的序偶(a[i].a[j]). 例如:在序列34,8,64,51,32,21中具有9个逆序:(34,8),(34,32),(34,21),(64,51),(64,32),(64,21),(51,32),(51,21),(32,21): 显而易见的是,排序完成之后,序列中将不会存在逆序.因此我们可以通过计算序列中的逆序数来及算排序平均运行时间的精确的界.为了可以定义出“平均”,这里假设序列中不存在重复元素.利用这个假设,

基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)

计数排序 条件:要排序的数组的元素必须是在一定范围的,比方是1~100.在排序之前我们必须知道数组元素的范围. 思路:顾名思义:就是用一个数组来计数的. 步骤: 1.用一个数组来计数count[ ],将要排序的数组arr[ ]的元素记为数组count[ ]数组的下标,假设数组arr[]中有两个数同样就在count[]++.如count[arr[i]]++. 2. 再一次遍历数组count[ ],将count[i]  +=  count[i-1]+count[i-2]+....+count[0],

#研发解决方案介绍#基于ES的搜索+筛选+排序解决方案

郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中心 本文档适用人员:研发和运维 提纲: 曾经的基于MongoDB的筛选+排序解决方案 MongoDB方案的缺陷 看中了搜索引擎的facet特性 看中了ES的简洁 看中了ES的天生分布式设计 窝窝的ES方案 ES的几次事故和教训 ES自身存在的问题 首先要感谢王超和胡耀华两位研发经理以严谨治学的研究精

基于AngularJS的过滤与排序

前面了解了AngularJS的使用方法,这里就简单的写个小程序,实现查询过滤以及排序的功能. 本程序中可以了解到: 1 angularjs的过滤器 2 ng-repeat的使用方法 3 控制器的使用 4 数据的绑定 程序设计分析 首先,如果要是先查询过滤,就要使用到AngularJS中的 过滤器filter 了. 直接在表达式的后面使用管道命令符 | ,按照下面的写法就可以达到一个过滤的效果: {{ persons | filter:query }} 通过使用filter实现过滤操作,query

基于js鼠标拖动图片排序

分享一款基于js的图片排序效果.鼠标拖动图片,重新排列图片的排列顺序.该插件适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗.效果图如下: 在线预览   源码下载 实现的代码. html代码: <ul id="ul1"> <li> <img src="images/1.jpg" width="200" height="150" />&l

基于python语言的经典排序法(冒泡法和选择排序法)

前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 在之前,曾写过使用java和C语言实现该两种排序法,详情见https://www.cnblogs.com/hong-fithing/p/7615907.html 搭建环境,准备工作就不冗余介绍了,网上搜罗一大堆 目录 冒泡排序法 选择排序法 冒泡排序法 冒泡类似于汽水现象,摇动一下,就有很多泡往上冒

基于邻接表的拓扑排序实现

上一篇博客实现了图的基本操作(使用邻接表),包括图的创建.输出.遍历等,这次来实现一下拓扑排序.拓扑排序基本原理可以参考以前转载的一篇博客 http://www.cnblogs.com/zhangbaochong/p/5406159.html 由于代码比较简单,就直接贴出来了 1 #include <queue> 2 #include <vector> 3 #include <stack> 4 #include <iostream> 5 using name

基于Java实现的选择排序算法

选择排序和冒泡排序同样是基础排序算法,现在也做个学习积累. 简述 选择排序算法较为稳定,基本上都是O(n2)的时间复杂度,规模越小排序越快,不需要占用额外空间.其实选择排序原理很简单,就是在未排序序列中找到最小(大)的元素然后放到数组前面,然后再从剩下的未排序序列中找到最小(大)的元素放在上一次找到最小(大)元素的后面,以此类推完成排序. 动图演示 看下动图上的演示,就能够找出排序规律,非常之简明易懂. (算法动图来源于参考资料,详细请往下翻阅) 代码实现 1 /** 2 * 选择排序 3 *

基于比较的内部排序总结

★ 基于“比较”操作的内部排序性能大PK 我们首先总结一下<排序结构专题1-4>中的十种方法的性能((N个关键字的待排序列)): 排序方法        平均时间   最坏时间    辅助存储空间   稳定性   直接插入排序 O(N^2)   O(N^2)    O(1)                √      折半插入排序 O(N^2) O(N^2)  O(1)      √ 希尔排序  O(N*logN) O(N*logN) O(1)        × 起泡排序        O(N