假设我们有一组数字P = { p1, p2, p3, ..., pn }
(长度(P)= n
)并选择一个数字q
。所以我想找到一个算法来获取集合P
的最近成员到q
。所以问题是:在p1, p2, ...
时间复杂度中,什么结构适合保持数据(O(1)
)和算法以找到P到q的最近成员。
答案 0 :(得分:6)
答案 1 :(得分:1)
我能想到获得O(1)
时间复杂度的唯一方法是,如果您可以使用O(pn)
空格和O(pn)
时间预先排序P并以pn
大小分配值阵列。
预订P
因此p1
是最小值,pn
是最大值(我假设它们是整数。)然后存储在大小为(pn-p1+1)
的数组中:
A(p1) = p1
for i = 2 to n
for q = p(i-1)+1 to (p(i-1)+p(i))/2
A(q) = p(i-1)
for q = (p(i-1)+p(i))/2 to p(i)
A(q) = p(i)
然后你需要检查某个q
是:
if q < A(p1)
closest = A(p1)
elif q > A(pn)
closest = A(pn)
else
closest = A(q)