簡體   English   中英

此代碼的復雜度是O(n ^ 2)還是O(n ^ 2 * n ^(1/2))?

[英]Is the complexity of this code O(n^2) or O(n^2 * n^(1/2))?

我當時認為復雜度為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)

基於柯西不等式

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM