いいえ、少なくともn 個の要素の要素の区別に時間 Ω(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
に and rotationalsimilarity
(リストをクリアするため) は O(1) に償却されます。最悪の場合O(1) の場合、データ構造を以前の状態に復元するrotationalsimilarity
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