algorithm - 确定以下代码的运行时间(内部循环递归)
问题描述
我有以下代码,需要确定这个算法的运行时间。
int res=0;
if (n <= 1)
return 1;
for (int i = 0; i < n; i++)
res += Catalan(i) * (Catalan(n - i - 1);
return res;
由于递归内部的循环,我很难确定运行时间。我知道我需要将其转换为回归公式,然后对其进行分析,但我不知道该怎么做。
解决方案
让我们将您的功能简化为:
for (int i=0; i< n; i++)
res += Catalan(i)*(Catalan(i-1);
return res;
这种简化不应影响时间复杂度。
让 n = 1:
1
/\
0 0
然后我们将有 3 次加泰罗尼亚语函数调用。
如果 n = 2,那么对于 Catalan(i),我们将有:
2
/
1
/\
0 0
对于加泰罗尼亚语(i-1)
1
/\
0 0
所以总的来说,我们将拥有:
2
/\
1 1
/\ /\
0 0 0 0
如果 i=3,则:
3
/ \
2 2
/\ /\
1 1 1 1
/\ /\ /\ /\
0 0 0 0 0 0 0 0
在我看来,这很O(2^n)
复杂
推荐阅读
- python - 将 Pandas 时间戳的时区设置为 Boise
- .net - 在构造函数参数中指定依赖实现
- html - 如何使用 Xidel 从具有@srcset 属性的图像中提取所有@srcset 宽度字符串?
- typescript - 在 Typescript 中优雅地将两种类型组合成一个界面
- python-2.7 - 找不到 pocketsphinx(缺少:pocketsphinx_DIR)
- machine-learning - Word2Vec:单词不在词汇表中,即使它在语料库中
- python - Python中单元测试的最佳实践——多个函数适用于同一个对象
- python - 线性回归负载模型未按预期进行预测
- python - 根据现有的制作多个列
- html - 拉拉维尔 5.8。如何上传文件?