1

我被要求确定使用简单算法的时间和空间复杂性。问题是我不完全了解这些数字的来源。从示例中我们得到它把加法、减法、除法和乘法计算为基本操作。

在这里,我发布了我的算法的伪代码,它使用我们提供的公式计算标准偏差。

我看到 2 * (n - 1) 个加法符号、1 个除法符号、2 个乘法符号和 1 个减法符号。

对于时间复杂度,我还必须在这里计算什么?以及如何处理空间复杂度?

// X is passed array, and N is number of elements in array.
Algorithm calculateStandardDeviation(X, N)
{
    private double arraySum;
    private double arrayMean;
    private double xi2;
    private double standardDeviation;

    foreach (arrayValue in X)
    {
        arraySum = arraySum + arrayValue;
    }

    arrayMean = sum / N;

    foreach (arrayValue in X)
    {
        xi2 = xi2 + Math.Pow(arrayValue, 2);
    }

    standardDeviation = Math. Sqrt(((1/N) * () * xi2) - Math.Pow(arrayMean, 2));

    return standardDeviation;
}
4

1 回答 1

3

具有讽刺意味的是,算法复杂性可以随心所欲地通用或复杂。如果您正在努力实现大 O(...) 符号复杂性 - 这是计算机科学中的规范 - @david robinson 对于您当前的情况是正确的。

for循环通常会增加 N 时间复杂度的维度 - 其中 N 是循环包含的运行次数。您所做的所有其他事情都在 O(1)“恒定”时间内运行(并不意味着与另一个 O(1) 时间操作花费相同的物理时间)。因此,您的时间复杂度是所有​​操作的线性相加或 O(N + N + 1 + 1+...) = O(2N)。我相信你在课堂上学到了这个,减少到 O(N)。时间复杂度。

现在对于空间复杂性 - 同样的事情。随着输入大小的增长,任何东西都会增长吗?那将是肯定的 - 随着您向数组中添加更多元素,您的数组会增长。因此它也增长为 O(N)。你还有其他不变的空间因素,但我们放弃了它,因为大哦,给你

线性 - O(N) - 时间和空间复杂度。

于 2012-09-18T19:20:48.350 回答