C 嵌套循环分析(每个循环限制内部循环) 在我的数据结构讲座中,我做了关于算法和时间复杂性的家庭作业。我真的找不到我需要做什么
问题:此算法的时间复杂度是多少C 嵌套循环分析(每个循环限制内部循环) 在我的数据结构讲座中,我做了关于算法和时间复杂性的家庭作业。我真的找不到我需要做什么,c,for-loop,complexity-theory,C,For Loop,Complexity Theory,问题:此算法的时间复杂度是多少 我的解决方案是逐循环分析,去掉每个循环本身的常数项和低阶项。由于这个原因,彼此之间有三个循环。复杂性应该是O(n3)。关键点是最里面的循环是动态有界的。 此表上有什么错误(如果有): intc=0; 对于(int i=0;i
- 我的解决方案是逐循环分析,去掉每个循环本身的常数项和低阶项。由于这个原因,彼此之间有三个循环。复杂性应该是O(n3)。关键点是最里面的循环是动态有界的。
intc=0;
对于(int i=0;i
欢迎所有答案。为了计算时间复杂度,您可以尝试评估最内部循环的迭代次数
上的循环计算简单表达式k
次2*j
上的循环运行j
n次。因此,内部循环运行
,从而简化为2*n*(n+1)/2
n*(n+1)
- 外部循环运行
次。因此,内部循环精确地运行n*n
次n*n*n*(n+1)
return n * n * n * (n + 1);
尝试这一点表明,到目前为止,没有一种常见的编译器能够实现这一点,尽管clang花了大量时间试图用深不可测的SIMD代码优化代码。概述您的想法,我们可以帮助您发现问题。我们告诉你答案对你没有帮助。只有最里面的循环受外部循环的影响。中间的循环不受外部的影响。这是我混淆的一点。边界是动态的,我不知道如何分析。你知道将0…1000中的所有数字相加的快速方法吗?是的,让我们假设我有一个数字序列,比如{1,2,3,4……,n},这个序列中所有数字的总和必须是(n*(n+1))/2,不是吗?你们认为外循环的复杂性是什么?中间循环的复杂性是什么?你知道外两个循环的复杂性是什么吗?这给了你一部分答案。内部循环也有最坏情况的复杂性;那是什么?你能得到的最大的
j
是什么?那么,内部循环的复杂性是什么?你是如何将其与之前的结果结合起来的?你删除了整个算法的常数项和低阶项了吗?在你的例子中,算法非常简单:你可以用一个简单的公式计算出精确的迭代次数,从而得到结果。唯一的低阶项是(n+1)
中的1
。当你去掉它时,你得到n的四次方。我们能谈谈这个算法的最佳、最差和平均情况吗?它有意义吗?@nevzatseferoglu:尝试区分这些情况没有多大意义,它们都是相同的,迭代次数只取决于n
:最佳和最差之间没有区别,最坏和一般情况。在分析处理未知数据的算法时,这种区别是相关的,因为这些算法的行为取决于它们的特征,例如排序方法,其性能可能会随着数据集的实际分布而发生很大变化。@nevzatseferoglu:如果算法对可变数据有条件语句,复杂性更难分析,最佳、平均和最坏情况的结果可能会有很大不同。很好的例子是和。