我很快就会在考试中提出这样的问题。我在书中发现了这一点,但遗憾的是没有解决方案。所以我解决了它,我希望你能告诉我,如果我做得对吗?
a。)算法计算什么?
b。)根据n
Input: Array A of length |A|=n with n >= 2
Output: Number x
x := 0;
for i := 1 to n do
for j := i+1 to n do
if x < |A[i] - A[j]| then
x := |A[i] - A[j]|;
end if
end for
end for
return x;
对于a。)我在java中输入了伪代码作为完整代码并执行了程序。经过几次输出比较后,我意识到算法会计算出最小和最大的数组元素(如果需要,你可以在这里查看我的代码:https://gist.github.com/anonymous/b27877536f3c9f553500388af78ee962)
b。)我不确定这是如何正确完成的,但我也确实试过了:
Input: Array A of length |A|=n with n >= 2 O(1)
Output: Number x
x := 0; O(1)
for i := 1 to n do O(n)
for j := i+1 to n do *O(n)
if x < |A[i] - A[j]| then *O(1)
x := |A[i] - A[j]|; *O(1)
end if *O(1)
end for *O(1)
end for *O(1)
return x; O(1)
= O(n*n) = O(n^2)
答案 0 :(得分:2)
您在 A部分中的回答是不正确的,因为|A[i] - A[j]|
表示绝对值而不是 factorial 。例如:|1-3| = 2
。因此,算法计算数组值之间的最大差异。
在 B部分中,您是对的,它是O(n ^ 2),它被称为二次方,您可以找到更多信息here。