证明算法的大哦等
proving the big-oh etc for an algorithm
我正在学习如何 prove/disprove big-Oh、big-Omega 和 little-oh,并且我有以下算法 f(n)。但是我不确定如何证明这个 f(n) 因为它有一个我以前从未遇到过的 if 语句。例如,我如何证明这个 f(n) 是 O( n^2 )?
if n is even
4 sum(n/2,n)
else
2n-1 sum(n−3,n)
其中 sum(j,k) 是从 j 到 k 的整数的“部分算术和”,即 sum(j,k)=
if j > k
0
else
j+(j+1)+(j+2)+...+j
例如sum(3,4) = 3 + 4 = 7 等
请注意 sum(j,k) = sum(1,k) – sum(1,j-1).
好的。得到它不用担心。我会尽力帮助您理解这一点。
大 O 表示法用于定义程序在其输入大小方面将花费多少时间的上限。
让我们试试看这个函数中每条语句需要多少时间
f(n) {
if n is even // O(1) .....#1
4 * sum(n/2,n) // O(n) .....#2
else // O(1) ................#3
(2n-1) * sum(n−3,n) // O(n) .......#4
}
if n is even
这可以通过像 if ((n%2) == 0))
这样的检查来完成,正如您所看到的,这是一个恒定时间的操作。没有循环 什么都没有 只是一次计算。
sum(j, k)
函数是通过在 j <= k
时从 j
迭代到 k
来计算的。所以,它将 运行 (k - j + 1)
次,即线性时间
因此,总复杂度将是 if
块或 else
块的复杂度之和
为了分析复杂性,需要考虑最坏的时间。
if
块的复杂度 = #1 + #2 = O(1) + O(n)
= O(n)
同样对于 else
块 = #3 + #4 = O(1) + O(n)
= O(n)
两者的最大值 = maximum of(O(n), O(n)) = O(n)
因此,整体复杂度 = O(n)
我正在学习如何 prove/disprove big-Oh、big-Omega 和 little-oh,并且我有以下算法 f(n)。但是我不确定如何证明这个 f(n) 因为它有一个我以前从未遇到过的 if 语句。例如,我如何证明这个 f(n) 是 O( n^2 )?
if n is even
4 sum(n/2,n)
else
2n-1 sum(n−3,n)
其中 sum(j,k) 是从 j 到 k 的整数的“部分算术和”,即 sum(j,k)=
if j > k
0
else
j+(j+1)+(j+2)+...+j
例如sum(3,4) = 3 + 4 = 7 等 请注意 sum(j,k) = sum(1,k) – sum(1,j-1).
好的。得到它不用担心。我会尽力帮助您理解这一点。
大 O 表示法用于定义程序在其输入大小方面将花费多少时间的上限。
让我们试试看这个函数中每条语句需要多少时间
f(n) {
if n is even // O(1) .....#1
4 * sum(n/2,n) // O(n) .....#2
else // O(1) ................#3
(2n-1) * sum(n−3,n) // O(n) .......#4
}
if n is even
这可以通过像 if ((n%2) == 0))
这样的检查来完成,正如您所看到的,这是一个恒定时间的操作。没有循环 什么都没有 只是一次计算。
sum(j, k)
函数是通过在 j <= k
时从 j
迭代到 k
来计算的。所以,它将 运行 (k - j + 1)
次,即线性时间
因此,总复杂度将是 if
块或 else
块的复杂度之和
为了分析复杂性,需要考虑最坏的时间。
if
块的复杂度 = #1 + #2 = O(1) + O(n)
= O(n)
同样对于 else
块 = #3 + #4 = O(1) + O(n)
= O(n)
两者的最大值 = maximum of(O(n), O(n)) = O(n)
因此,整体复杂度 = O(n)