【发布时间】:2011-03-14 19:15:28
【问题描述】:
我正在尝试编写一个线性时间算法 O(n),它给定一个表 A[0..n-1] (用升序的自然值填充) 检查是否存在对 A[i], A[j] 满足 f(A[i], A[j]) = C (C 是一个预定义的常数).
假设 f(a,b) = a+b 算法将是:
Algo Paires(A[0..N-1], C)
in: Tab A[0..n-1] and C a constant
out : Boolean
Init indice ← 0
For i ← 0..n-1 do
if indice ≠ i & A[indice] + A[i] = C
return true
else if i = n-1 & indice ≤ n-2
indice++; i ← 0;
End for
return False
但是如果:
那么算法是什么?有什么建议吗?
【问题讨论】:
-
听起来您希望我们为您做作业。
-
我只是在寻求帮助,我认为我在正确的地方......我自己编写了算法,现在我想概括它,但不幸的是我无法弄清楚如何。 ..我不想让你帮我做,但请帮我一些提示或建议....
-
它在
indice上迭代n次,在每次迭代中它在i上迭代n次。 -
嗯,这是真的:/关于如何将执行时间更改为 O(n) 的任何建议?
-
@aaz:对不起,我投票赞成 Mooh 的评论,但现在我实际查看了解决方案,我认为您是正确的;它是 O(n²)。 @Mooh:但是,它仍然可以简单地在 O(n) 中完成(提示:一种方法需要两个索引,它们并不都从 0 开始......)