我在这个函数中有 3 个问题,
Sum = 0
MyFunction (N)
M = 1,000,000
If (N > 1)
For I = 1 to M do
Sum = 0
J = 1
Do
Sum = Sum + J
J = J + 2
While J < N
End For
If (MyFunction(N / 2) % 3 == 0)
Return (2 * MyFunction(N / 2))
Else
Return (4 * MyFunction(N / 2))
End If
Else
Return 1
End If
End MyFunction
第一个问题是:代码的非递归部分的复杂性是什么?
我认为非递归部分是那个循环
For I = 1 to M do
Sum = 0
J = 1
Do
Sum = Sum + J
J = J + 2
While J < N
End For
我的回答是M * log(n)
,但我的幻灯片说不是M * log (n)
!我需要对此作出解释。
第二个问题是: MyFunction 前面代码的正确复现是什么?
当我看到这些代码行时
If (MyFunction(N / 2) % 3 == 0)
Return (2 * MyFunction(N / 2))
Else
Return (4 * MyFunction(N / 2))
End If
我认为它是T(n) = T(n/2) + Theta(non-recursive)
,因为 if 将执行 2 个调用之一。
这个答案又是错误的。
第三个是: MyFunction 的复杂度是多少?
我基于 2 个问题的回答是T(n) = T(n/2) + M * lg n
,总运行时间是M * lg n
。