如何解决算法的时间复杂度 - 大 O
我想知道这个算法的复杂度,我对 O(mn) 和 O(mn + n) 感到困惑:
i = 1; j=1;
while(j <= n)
{
if(i <= m) i++;
else
{
j++; i=1;
}
}
感谢您的帮助!
解决方法
令 f(m,n) 为算法采用给定输入 m 和 n.
当我们说 f(m,n) 是 O(mn) 或“在 mn”,我们并不是说有两个等价的函数。这是一种简写方式:
- 有一些m0、n0和一些常数C 超过这个值 f(m,n) 总是小于或等于 Cmn。 “超越哪个”是指 m0 ≤ m 和 n0 ≤ n.
假设算法需要 mn+n 步,所以 f(m,n) = mn+n.
考虑 m0 = 1、n0 = 0 和 C = 2. 然后我们证明 m0 ≤ m 和 n0 ≤ n 意味着 f(m,n) ≤ 2mn:
- f(m,n) = mn+n。
- 由于 1 ≤ m,mn+n ≤ mn + mn。
- mn + mn = 2mn。
- 所以 f(m,n) ≤ 2mn。
因此 f(m,n) = mn+n 是 O(mn); f(m,n) 是“mn 的顺序。”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。