O(log n)究竟意味着什么?
我正在学习Big O Notation运行时间和摊销时间。 我理解 O(n) 线性时间的概念,意味着输入的大小成比例地影响算法的增长...例如,二次时间 O(n 2 )等 也是如此。即使算法也是如此。 ,例如置换生成器,具有 O(n!) 倍,通过阶乘生长。 例如,以下函数是 O(n), 因为算法与其输入 n 成比例增长: f(int n) { int i; for (i = 0; i < n; ++i) printf("%d", i); } 同样,如果有嵌套循环,则时间为O(n 2 )。 但究竟什么是 O(log n) ? 例如,说完整二叉树的高度是 O(log n)是 什么意思? 我知道(可能不是非常详细)什么是对数,在这个意义上:log 10 100 = 2,但我无法理解如何识别具有对数时间的函数。 #1楼 下面的解释是使用完全 平衡的 二叉树的情况来帮助您了解我们如何获得对数时间复杂度。 二叉树是这样一种情况,其中大小为n的问题被分成大小为n / 2的子问题,直到我们达到大小为1的问题: 这就是你得到O(log n)的方法,这是在上面的树上需要完成的工作量才能达到解决方案。 具有O(log n)时间复杂度的通用算法是二进制搜索,其递归关系是T(n / 2)+ O(1),即在树的每个后续级别,您将问题分成一半并且执行恒定量的额外工作。 #2楼 但究竟什么是O(log n)?