【发布时间】:2013-07-25 07:25:55
【问题描述】:
是否有一个数据结构表示一个大集合S(64 位)整数,它开始为空并支持以下两个操作:
-
insert(s)将数字s插入S; -
minmod(m)在S中返回数字s,使得s mod m最小。
一个例子:
插入(11) 插入(15) minmod(7) -> 答案是 15(mod 7 = 1) 插入物(14) minmod(7) -> 答案是 14(mod 7 = 0) minmod(10) -> 答案是 11(其中 mod 10 = 1)我有兴趣最小化花费在n 此类操作序列上的最大总时间。显然可以只为S 维护一个元素列表,并为每个minmod 操作迭代它们;那么insert是O(1),minmod是O(|S|),这将花费O(n^2)时间进行n操作(例如,n/2insert操作,然后是n/2minmod操作大约需要n^2/4操作)。
那么:对于一系列n 操作,是否有可能比O(n^2) 做得更好?也许O(n sqrt(n)) 或O(n log(n))?如果这是可能的,那么我也很想知道是否有数据结构另外允许从S 中删除单个元素,或者删除一个区间内的所有数字。
【问题讨论】:
-
如果
n是数组中元素的数量,那么这肯定是O(n) 吗?对于每个元素,计算x % m,并跟踪当前最小值。 -
抱歉,需要动态插入查询,在线回答查询,插入查询操作海量。
-
我已经编辑了问题以使其清楚。
-
模数有界吗?
-
@MatthewStrawbridge 我不认为他们都可以是 O(1) 你可能误解了这个问题