c - 函数的时间复杂度和空间

标签 c algorithm time-complexity computer-science

<分区>

我正在努力寻找下一个函数的复杂性

void what(int n) {
    int i;
    for (i = 1; i <= n; i++) {
        int x = n;
        while (x > 0)
            x -= i;
    }
}

我试图通过接下来的事情来解决它 在查看空间时,我发现它只有 O(1),因为没有使用它。 想时间的时候 我认为因为它每次被划分它将是 n(1+1/2 +1/4+....)=O(N.log(N)) 这是对的吗? 谢谢

最佳答案

简单的分析给出了 O(N.log(N)) 的时间复杂度,但应该注意的是循环不计算任何东西:局部变量 x 递减 n/i 次并被丢弃。一个好的编译器应该能够将整个函数编译为空操作:void what(int n) {},这导致了 O(1) 的复杂性,空间和时间。

关于c - 函数的时间复杂度和空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38940785/

相关文章:

c - 函数之间的文件指针上的 SegmentFault

C、杀死所有进程

java - for 循环的运行时,其中变量依赖于外部循环

c - 关于C9 9's array size "保证”功能参数中的特性的实际优势?

c - 在同一语句中声明和使用变量

algorithm - 分析 QuickSort 算法

c++ - 如果求和是通过循环完成,则以下程序找到正确答案,但如果通过 GP 公式完成,则不正确。为什么?

algorithm - 在 Scala 中编写 `indexBy` 的最佳方法是什么?

list - Data.map 中 haskell 列表的复杂性

complexity-theory - 空间复杂度的定义