【问题标题】:Equivalent data structures with same bounds in worst case (vs. amortized)在最坏情况下具有相同边界的等效数据结构(与摊销相比)
【发布时间】:2012-01-31 21:56:55
【问题描述】:

我无法让我的标题非常具有描述性,抱歉!

对于每个支持某些摊销运行时间的操作的数据结构,在最坏的情况下,是否有另一个数据结构在相同的运行时间内支持相同的操作?我对迭代的、短暂的数据结构和功能性数据结构都感兴趣。

我确信这个问题之前一定被问过。我似乎找不到正确的搜索关键字(在 Google、SO、TCS 中)。我在 {yes, no, open} 中寻找引用的答案。

【问题讨论】:

  • 这是一个非常有趣的问题!我所知道的每个具有良好摊销界限的数据结构都有一些其他数据结构具有相同的最坏情况时间界限,但我不确定是否总是可以保证这一点。
  • 是的,通常是更丑陋的复杂!我有兴趣问这个问题,因为这个问题的每一个可能的答案都会让我感到非常惊讶:),也许除了开放。
  • 我持怀疑态度。我认为摊销真的给你带来了一些东西。例如,我不明白您如何设法进行 O(1) 最坏情况添加,O(1) 最坏情况访问可调整大小数组。
  • 你可能想看看cstheory.stackexchange.com——听起来你在寻找证据,而不是工程。
  • @rrenaud- 这样的数据结构存在!它被称为可扩展数组。我在这里有一个 Java 实现:keithschwarz.com/interesting/code/?dir=extendible-array

标签: algorithm data-structures complexity-theory time-complexity amortized-analysis


【解决方案1】:

不,至少在 n 个元素的 element distinctness 需要时间 Ω(n log n) 的模型中。

考虑以下我使用 Python 描述的数据结构。

class SpecialList:
    def __init__(self):
        self.lst = []
    def append(self, x):
        self.lst.append(x)
    def rotationalsimilarity(self, k):
        rotatedlst = self.lst[k:] + self.lst[:k]
        count = sum(1 if x == y else 0 for (x, y) in zip(self.lst, rotatedlst))
        self.lst = []
        return count

显然appendrotationalsimilarity(因为它清除了列表)摊销 O(1)。如果 rotationalsimilarity 是最坏情况 O(1),那么我们可以提供 O(1) undo 操作,将数据结构恢复到之前的状态。因此,我们可以在 O(n) 时间内实现元素区别。

def distinct(lst):
    slst = SpecialList()
    for x in lst:
        slst.append(x)
    for k in range(1, len(lst)):  # 1 <= k < len(lst)
        if slst.rotationalsimilarity(k) > 0:
            return False
        slst.undo()
    else:
        return True

【讨论】:

  • 你能证明为什么rotationSimilarity是摊销O(1)吗?这似乎不正确,因为它所做的第一件事是构建旋转列表的 O(n) 操作。
  • X 追加和 y rotsim 调用一起是最坏的情况 O(x + y)。我为最终的大删除预付了每次追加一个硬币,然后它只花费我这些硬币的价值来进行 rotsim 调用。
  • 我看不出 rotsim 和 undo 是如何 O(1) 摊销在一起的。我不能强迫你用一系列 rotsim 和 undos 做很多工作吗?
  • @rrenaud 这是在 rotsim 被重新实现为 O(1)worst-case 的假设下(导致矛盾)。如果是这样,我所要做的就是写时复制在 rotsim 调用期间写入的 O(1) 内存位置。
猜你喜欢
  • 2016-08-17
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2023-03-15
  • 2013-06-19
  • 2018-10-06
相关资源
最近更新 更多