微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

算法的时间复杂度 - 大 O

如何解决算法的时间复杂度 - 大 O

我想知道这个算法的复杂度,我对 O(mn) 和 O(mn + n) 感到困惑:

i = 1; j=1;
while(j <= n)
{
  if(i <= m) i++;
  else
     {
       j++; i=1;
     }
}

感谢您的帮助!

解决方法

令 f(m,n) 为算法采用给定输入 mn.

当我们说 f(m,n) 是 O(mn) 或“在 mn”,我们并不是说有两个等价的函数。这是一种简写方式:

  • 有一些m0n0和一些常数C 超过这个值 f(m,n) 总是小于或等于 Cmn。 “超越哪个”是指 m0mn0n.

假设算法需要 mn+n 步,所以 f(m,n) = mn+n.

考虑 m0 = 1、n0 = 0 和 C = 2. 然后我们证明 m0mn0n 意味着 f(m,n) ≤ 2mn:

  • f(m,n) = mn+n
  • 由于 1 ≤ m,mn+nmn + mn
  • mn + mn = 2mn
  • 所以 f(m,n) ≤ 2mn

因此 f(m,n) = mn+n 是 O(mn); f(m,n) 是“mn 的顺序。”

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。