下面代码的时间复杂度

时间:2012-02-12 16:10:09

标签: c# algorithm big-o

我正在尝试检查以下简单程序的时间复杂度。 该程序用'%20'替换字符串中的空格。

  1. 计算空格的循环(O(1)时间)

        foreach (char k in s)
        {
            if (k == ' ')
            {
                spaces_cnt++;
            }
        }
    
  2. 替换空格的循环(O(n),其中n是字符串的大小)

        char[] c = new char[s.Length + spaces_cnt * 3];
        int i = 0;
        int j = 0;
        while (i<s.Length)
        {
            if (s[i] != ' ')
            {
                c[j] = s[i];
                j++;
                i++;
            }
            else
            {
    
                c[j] = '%';
                c[j + 1] = '2';
                c[j + 2] = '0';
                j = j + 3;
                i++;
            }
        }
    
  3. 所以我猜这是一个“O(n)+ O(1)”解决方案。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:6)

计算空格的循环需要O(n),而不是O(1),因为您正在迭代 - 并对字符串中的每个n字符执行检查。

正如您所说,替换循环需要O(n)。顺序执行的两个O(n)操作具有O(n)的组合复杂度(以Big-O表示法丢弃常数因子)。

P.S。您知道可以使用一行来实现所有代码的等效吗?

s = s.Replace(" ", "%20");

答案 1 :(得分:0)

看起来你正在尝试编码一个字符串。如果是这种情况,您可以使用UrlPathEncode()方法。如果您只是尝试编码空格,请使用Replace()(如Douglas所述)。