是否有一个数据结构,该数据结构接受个无序数组,在执行预处理并回答查询:列表中是否有一些元素,每个查询的时间最差?
我真的认为没有,因此也欢迎提供证明。
是否有一个数据结构,该数据结构接受个无序数组,在执行预处理并回答查询:列表中是否有一些元素,每个查询的时间最差?
我真的认为没有,因此也欢迎提供证明。
Answers:
这是不可能的证明。假设您可以构建这样的数据结构。建立它。然后,选择随机从列表项中添加ε他们每个人,其中ε比名单上的任何两个项目之间的差异较小,并进行查询,以确认所产生的项目是否在清单。到目前为止,您已经执行了O (n )个查询。
我想声称您所做的比较足以确定原始列表中的项目是否小于或大于任何新项目b。假设你不知道。然后,因为这是一个基于比较的模型,所以您将不知道a是否等于b,这与您的数据结构有效的假设相矛盾。
现在,由于您选择的项目是随机的,因此比较有很高的可能性,因为有足够的信息可以将原始列表分为n / log n个列表,每个列表的大小均为O (log n )。通过对这些列表中的每一个进行排序,您将获得仅基于比较(一个矛盾)的随机O (n log log n )时间排序算法。
我相信这里是另一种证明,证明了使用O(n )预处理的查询时间结构是不可能的。
假设在预处理中进行比较,从而导致部分排序。
现在考虑其中最大的反链的大小由于这些元素不可比较,因此对于我们来说,要使用O(log k n )查询算法,必须使A = O(log k n )。
现在,根据迪尔沃思定理,将大小为的分区分成链。
现在我们可以对算法进行补充以确定分区中的链。通过创建比较的有向图并进行可达性分析,我们可以确定两个元素是否可比较。无需任何其他比较即可完成此操作。现在,只需强行删除大小为每个可能分区,即可确定它是否是链的分区。
一旦有了链,我们可以将它们合并以给出比较算法,以对整个列表进行排序。
正如彼得·索尔(Peter Shor)的回答所指出的,要排除基于比较的模型中的成员资格,我们需要知道元素与每个成员的比较方式。因此,使用随机查询(小于查询的非成员的成员数是随机的),相对于具有n个未排序的值,我们可以获得Θ(n log k )信息。因此,对于某些常数c > 0,使用c预处理的,我们不能有 ≤ Ç查询成本。这是一个常数因子最佳起来,因为我们可以将数据分成排序 ķ ' = ķ /日志ķ ≤ ñ /登录Ñ近似等于桶中(每个桶未分选的) ø (Ñ 登录ķ ')= Ö (Ñ 登录ķ )时间,这允许 O (n / k ')查询成本。