algorithm - 这个程序的确切复杂度是多少?

标签 algorithm complexity-theory

有人给我这段代码,我想找到确切的复杂度,或者换句话说,找到一个公式,让特定的 n 知道如何计算 L。

L = 0;
for (i = 1; i<n; i++)
    for (j = 1; j<i; j++)
        for (k = j; k<n; k++)
            L++;

我的第一个想法是 (n^3 + n^2)/2,但是错了。

例如 n=5 L=20 ; n=10 L=240

谢谢:D

编辑: 这个问题来自 Fundamentals of Algorithms, page 140 or slide 161 in pdf (this is a free book version) http://www.freebookspot.es/Comments.aspx?Element_ID=76025

最佳答案

首先:复杂性与 n 的具体数字无关。它是关于渐近行为的。当有人说算法的复杂度是 O(f(n)) 时,这并不意味着算法严格执行 f(n) 操作。事实上,它可以执行 2*f(n)1/2 * f(n)f(n) + sqrt(f(n) )。在谈论复杂性时,人们通常感兴趣的是操作数量随着输入的增长而增长的速度。

在您的情况下,您必须编写 3 个嵌套总和(每个循环一个)和内部操作的总和成本(假设为 1):

Process

这是精确的公式(不要相信我 - 使用 wolfram|alpha 检查),但在复杂性语言中它只是 O(n^3)

UPD:请注意,此公式对应于条件类型为 less-or-equal 而不仅仅是 less-than 的循环。

关于algorithm - 这个程序的确切复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14735184/

相关文章:

ruby - Anagrams Code Kata,Ruby 解决方案非常慢

c++ - 排序时如何找出 "progress"?

algorithm - 这个算法的时间复杂度是多少,它找到每个质数最多为 n

MySql性能查找1公里内的所有用户

c# - 从集合创建 HashSet<int> 的最坏情况复杂度

algorithm - 在 1 GB 内存中排序 10GB 数据。我将如何做?

c++ - 如何将 Lense Undistortion 从 Lens Distortion Model 转换为 opencv?

c++ - 使用 3D 障碍物进行寻路

java - 如何确定嵌套循环中语句的执行频率?

algorithm - 添加 log n log n 操作的复杂性