循环代码的递归时间复杂度

时间:2011-11-27 19:11:08

标签: c# time-complexity

我有这段代码,

void Generate(List<string> comb, string prefix, string remaining)
{
       int currentDigit = Int32.Parse(remaining.Substring(0, 1));

            if (remaining.Length == 1)
            {
                for (int i = 0; i < dictionary[currentDigit].Length; i++)
                {
                    comb.Add(prefix + dictionary[currentDigit][i]);
                }
            }
            else
            {
                for (int i = 0; i < dictionary[currentDigit].Length; i++)
                {
                    Generate(comb, prefix + dictionary[currentDigit][i], remaining.Substring(1));
                }
            }
}

上述代码的时间复杂度是多少?

生成是否为O(n)并且本身正在执行n次,所以O(n ^ 2)?

字典是len = 10并且电话键盘存储在其中.2 =“abc”等

对此代码的初始调用将类似于

生成(新列表(),“”,“12345”);

感谢。

1 个答案:

答案 0 :(得分:1)

假设字典大小为m,输入字符串大小为n(剩余),这将是:

T(1) = m + constant;
T(n) = m T(n-1) + O(n) ==> T(n) = O(m^n)

事实上,在else部分的每次运行中,你将运行m次,O(n)的函数。