该算法的Big-O复杂度
Big-O complexity of this algorithm
代码:
void fun(int n){
if(n>2){
for(int i=0;i<n;i++){
j=0;
while(j<n){
cout<<j;
j++;
}
}
fun(n/2);
}
}
以下是我的想法:递归部分正在运行log(n)次?在每次递归调用期间,for循环将运行n^2次,每次递归调用中n将变为一半。所以它是n^2+(n^2)/4+(n^ 2)/16+…+1.
你是对的,所以大(O)是n^2,因为级数n^2+(n^2)/4+(n^ 2)/16+…+1从不超过2n^2
对cout
的写入次数由以下递归给出:
T(N) = N² + T(N/2).
通过有根据的猜测,T(N)
可以是一个二次多项式。因此
T(N) = aN²+bN+c = N² + T(N/2) = N² + aN²/4+bN/2+c.
通过识别,我们有
3a/4 = 1
b/2 = 0
c = c.
和
T(N) = 4N²/3 + c.
使用T(2)= 0
、
T(N) = 4(N²-4)/3
明显为CCD_ 4。
这是一个简单的数学。复杂度为n^2+(n^2)/4+(n^ 2)/16+…+1.它是(n²*(1+1/4+…)。数学上说无穷级数收敛到4/3(公式为:1/(1-1/4))。
它实际上给出了O(n2)。
相关文章:
- 函数复杂度分析
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 函数的时间复杂度是多少?
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 如何计算此排序函数的时间复杂度?
- 计算两个代码块的时间复杂度
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- C++ 中具有 O(1) 搜索时间复杂度的数据结构
- 具有嵌套 if-else 的循环的时间复杂度
- C++中 std::map 的运行时复杂度是多少?
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 如何计算函数的时间复杂度?
- 求解包含"variables"的 T(n) 时间复杂度
- 确定 for 循环的不同大 O 复杂度
- 此print_star函数的运行时复杂度是多少?
- 查找数字是否为 2 的幂的时间复杂度
- 该算法的Big-O复杂度