如何解决三重嵌套循环的时间复杂度
我正在努力寻找以下三重嵌套for循环的确切时间和大哦时间复杂度,如果做得正确,我会感到困惑。
for (int i=1; i<=n; i++)
for (int j=i; j<=n; j++)
for (int k=i; k<j; k++)
sum++;
我知道外部循环运行了n次。然后,第二个循环从i处开始每次都运行不同的时间:
n +(n-1)+(n-2)+ ... + 2 + 1。
但是,由于我们只关心最坏的情况(即当i = n时),因此第二个循环将运行n-n次,因为它将从i = n开始。当然,这没有任何意义,但这就是我遇到的问题。我已经运行了此代码,并找到了序列的前四个元素:S = 0 + 1 + 4 + 10 + ... +(不确定其余部分)。
很抱歉,如果这没有任何意义,但我们将不胜感激!
解决方法
重要的是要知道1+2+3+...+n
之类的所有算术级数都在O(n^2)
中。因此,您将获得三个嵌套循环,每个循环都位于O(n)
中,因此总时间复杂度为O(n^3)
,或者更确切地说是Θ(n^3)
。
请注意,这里没有“最坏情况”或“最坏情况”,因为步数仅取决于n
,而没有别的。将其与例如分类算法,其中步数不仅取决于要排序的元素n
的数量,还取决于元素的值及其特定顺序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。