我无法使我的标题具有描述性,道歉!
对于每个数据结构,是否支持某些具有分摊运行时间的操作,在最坏的情况下是否支持相同运行时间内相同操作的另一个数据结构?我对迭代,ephermal数据结构和功能性数据结构都感兴趣。
我确信以前一定要问过这个问题。我似乎无法找到正确的搜索关键字(在Google,SO,TCS中)。我在{yes,no,open}中寻找引用的答案。
答案 0 :(得分:2)
不,至少在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
显然append
和rotationalsimilarity
(因为它清除了列表)是摊销的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