java - 这段代码的复杂度是 O(n^2) 还是 O(n^2 * n^(1/2))?

标签 java time-complexity

我认为复杂度是 O(n^2)。我错了吗?如果是这样,您能解释一下原因吗?

 public int countXs(char[][] m)


{
    int rows = m.length, cols = m[0].length;
    int r = 0, c = 0, count = 0;
    while (r < rows || c < cols)
    {
      count += r;
      while (r < rows && m[r][c] == 'x')
      {
        count++;
        r++;
      }
      c++;
    }
    return count;
  }

最佳答案

首先,您的代码可能会因c索引的arrayIndexOutofBound而崩溃。

接下来,当你投入时间复杂度时,首先需要定义什么是n。通常n表示输入的大小,在本例中n是二维数组的大小。

因此,您需要设置时间复杂度公式并指定代码的最坏情况来计算时间复杂度。假设数组 mpxq (p + q = n) 并且我们表示 O(1) = 1

T(n) = Sum(i->max(p, q)) {1 + sum(j->p)(1)}
     = max(p,q) + sum(i->max(p,q)){p}
     = max(p, n-p) + sum(i-> max(p, n-p)) {p}
     = max(p, n-p) + p(n-p)

基于Cauchy inequality :

4*ab <= (a+b)^2 we have: p(n - p) < (p + n - p)^2 /4  = n^2/4

所以:

T(n) <= n + n^2/4 = O(n^2) . Q.E.D

了解更多:http://en.wikipedia.org/wiki/Time_complexity

关于java - 这段代码的复杂度是 O(n^2) 还是 O(n^2 * n^(1/2))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575593/

相关文章:

Java:循环字符串长度时间复杂度

java - 无法在 Java API 中运行 Tensorflow 预测

maven-2 - 使用maven2用jdk1.5编译项目

java - 无法将输出写入JAVA中的文本文件

java - 进度条 NullPointerException

javascript - 暴力破解对数

java - (简单)允许 24 :00:00 and 00:00:00 as inputs 的日期格式

c++ - 时间复杂度是 O(n) 而不是 O(n^2)?

c# - 对象数组到索引数组

algorithm - 为什么 O(n) 优于 O( nlog(n) )?