【发布时间】:2019-03-23 20:26:12
【问题描述】:
我知道这对你来说似乎很容易,但这些天有一些事情让我全神贯注。这两个方程的运行时间是否相同?
1) T(n)= T(n/2) + T(n/2) + n^2 ?
2) T(n)= 2T(n/2) + n^2 ?
因为在 1 中编译器必须为每个 T 每次调用,但在 2 中只有 on call 返回结果将乘以 2。在 1 中我们有一个树,我的意思是每次我们需要调用两次对于 T,
我想我发现了我不确定的错误, F(n) = F(n/2) + .... 与 T(n) 不同!!
如果我们编写代码 { return f(n) + f(n)} 它必须与基于运行时间的 return 2*f(n) 不同。不优化编译器
【问题讨论】:
-
这取决于你的“方程式”中的
T是代表运行时间,还是别的什么。 -
如果编译器可以看到
T()和T()的代码没有副作用,那么优化是可能的。至少据我所知,对于类 C 语言来说是这样的,但我相信如果我错了,有人会纠正我! -
@BenVoigt 它正在运行时间。
-
@KenY-N 我没有谈到特殊的编译器,所以我认为我的 Q 不值得一个减号!!!!!!
标签: algorithm performance recursion