📜  自组织列表|设置1(简介)

📅  最后修改于: 2021-04-17 12:33:56             🧑  作者: Mango

排序链表的最坏情况搜索时间为O(n)。使用平衡二进制搜索树,在与root进行一次比较之后,我们可以跳过几乎一半的节点。对于排序的数组,我们具有随机访问权限,可以对数组应用二进制搜索。

加快搜索链接列表的一种方法是“跳过列表”。另一个想法(在这篇文章中讨论)是将更常访问的物品放在靠近头部的地方。 。可能有两种可能性。离线(我们事先知道完整的搜索顺序)和在线(我们不知道搜索顺序)。
在离线的情况下,我们可以根据搜索频率的降低来放置节点(具有最大搜索数的元素放在第一位)。对于许多实际应用,可能难以预先获得搜索序列。自组织列表会根据搜索结果对节点进行重新排序。这个想法是使用引用的局部性(在典型的数据库中,80%的访问权是20%的项目)。以下是自组织列表使用的不同策略。

1)移至最前方法:将搜索到的所有节点移至最前。此策略易于实现,但是由于它总是将项目移至最前面,因此可能会过度奖励不经常访问的项目。

2)计数方法:每个节点都存储其被搜索次数的计数。节点通过减少计数来排序。此策略需要额外的空间来存储计数。

3)移置方法:搜索到的任何节点都将与前一个节点交换。与向前移动不同,此方法无法快速适应不断变化的访问模式。

竞争分析:
所有方法中最坏的情况是时间复杂度为O(n)。在最坏的情况下,搜索到的元素始终是列表中的最后一个元素。对于平均情况分析,我们需要搜索序列的概率分布,这种分布不是很多次。
对于上述在线策略和算法,我们有一种完全不同的分析方法,称为竞争分析,该方法将在线算法的性能与最佳离线算法(可以预先查看请求的顺序)的性能进行比较。竞争分析被用于许多实用算法中,例如缓存,磁盘分页,高性能计算机。关于竞争分析的最好的事情是,我们不需要假设任何有关输入概率分布的信息。向前移动方法具有4竞争性,这意味着它比脱机算法执行的操作最多不超过4倍(请参见MIT视频讲座以获取证明)。

我们将很快讨论视频讲座中给出的分析的实施和证明。

参考:
http://en.wikipedia.org/wiki/Self-organizing_list
麻省理工学院视频讲座
http://www.eecs.yorku.ca/course_archive/2003-04/F/2011/2011A/DatStr_071_SOLists.pdf
http://en.wikipedia.org/wiki/Competitive_analysis_(online_algorithm)