如何解决if-else重复发生的最坏情况运行时
问题是询问g(n)的最坏情况下的时间复杂度,我对为什么第二个方程是c1n而不是c1n ^ 2感到困惑。
我认为最坏的情况应该具有更大的复杂性,对吗?还是因为if-else第二个分支中的“ b”是有界的,因此被视为常量?如果是这样,复发如何?因为在这种情况下n变为常数,递归的复杂度也会恒定吗?
解决方法
这里的窍门是,几乎从未选择过else分支。
您可以计算前几个值:
g(0) == 1
g(1) == 1
g(2) == 4
g(3) == 4
g(4) == 16
g(5) == 16
g(6) == 16
then for every n >= 4:
g(n) >= 16 > 5.
因此,每个n >= 12
,g(n/3) > 5
都会出现
因此,在任何执行中,else分支在最后两个递归调用中最多被选择两次,其n
的值小于11。
为求完美,我认为答案应该说恒定成本 c0 适用于n <= 11
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。