合并易碎对象列表


19

背景:徐超不久前发布了以下问题:“ 是否存在不减少到分类网络的已知比较分类算法,使得每个元素被比较次?O(logñ ”。看来我们对这个问题有些困惑;我曾在2009年与Valentin Polishchuk讨论过同样的问题,但我们一无所获。

为了获得一些新的想法,我试图提出一个最简单的问题,该问题具有相似的风格并且并非完全无关紧要。因此,下面的问题。


问题:将为您提供两个排序列表,每个列表包含元素。您可以合并列表,以便每个元素仅比较次吗?ñØ1个

自然,输出应为包含所有元素的排序列表。2ñ

[事实证明这很简单,答案是“否”。]


问题2:为您提供两个排序列表,每个列表包含元素。如果允许丢弃一小部分元素,是否可以合并列表,以便每个元素仅被比较次?ñØ1个

更精确地,输出应该是包含排序列表元素,和一个“垃圾箱”包含元素。值可以小到多少?使是微不足道的。像这样的事情应该可以直接实现。但是你能得到吗?T n T n T n = n T n = n / 100 T n = o n 2ñ-ŤñŤñŤñŤñ=ñŤñ=ñ/100Ťñ=Øñ


笔记:

  • 我们在这里使用比较模型。仅是确定性算法,我们对最坏情况的保证感兴趣。

  • 请注意,两个列表都恰好具有元素。如果我们有一个包含元素的列表,而另一个包含元素的列表,答案显然是“否”。但是,如果两个列表很长,似乎是一个可能能够做一些“负载平衡”。Ñ 1ññ1个

  • 这次,任何一种算法都是有效的。如果您的算法使用排序网络作为构建基块,那就很好了。

  • 首先,这里是一个简单的算法,该算法最多将每个元素进行200次比较:仅使用标准合并算法,但要维护列表开头的计数器。一旦达到200,就丢弃该元素。现在,对于您丢弃的每个元素,您已成功在输出数组中放置了200个元素。因此,您已实现。Ťñ=ñ/100


8
您说:“如果我们有一个包含n个元素的列表,而另一个包含1个元素的列表,则答案显然是“否”。每个列表中的n个元素不是一个更普遍的问题吗?例如,如果我们答应第二个列表中除第一个元素外的所有元素都比第一个列表中的所有元素大得多,这是否可以解决第一个问题?
罗宾·科塔里

@Robin:是的,所以我未能提出一个重要的问题,谢谢。如果我们坚持对所有元素进行排序,那么您的观察结果似乎给出了下限。让我稍微提一个问题……Ω日志ñ
Jukka Suomela 2011年

如果有人想知道问题2中看似奇怪的定义的意义是什么,如果我们可以使非常小,也许我们可以使用诸如归类排序之类的方法来几乎解决原始问题,并担心其中的一小部分垃圾箱中的元素集。Ťñ
Jukka Suomela 2011年

Answers:


5

不,这样的算法不存在。

假定每个元素的比较是允许的。Ť

首先,请考虑合并两个列表的情况,一个大小为1,另一个大小为。有2 t + 1的可能结果,一个简单的对抗性论证表明,小列表中的元素需要参与t + 1的比较,并且该元素必须被丢弃。2Ť2Ť+1个Ť+1个

由此很容易构造一个具有两个大小为列表的实例,该列表 由这样的小情况组成,因此必须将元素放入垃圾箱。n / 2 n / 2 ññ/2Ťñ/2Ť

因此,只要为常数,就不可能有的垃圾 ŤØñ

附带说明一下,似乎可以通过一种算法来匹配此界限,在该算法中,每个元素都与另一个列表周围部分的大小的对数进行比较。如果对此感兴趣,我将尝试得出详细信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.