如何知道Big O何时是对数?

Léo*_* 준영 10 algorithm math big-o recurrence logarithm

我的问题来自于"大O的简单英语解释".我不知道对数复杂性的确切含义.我知道我可以在时间和操作次数之间进行回归并计算X平方值,并确定复杂度.但是,我想知道一种在纸上快速确定它的方法.

您如何确定对数复杂度?有一些很好的基准吗?

Mit*_*eat 17

虽然不严谨,但是你有一个算法,它基本上将每次迭代需要完成的工作分成两半,然后你就具有对数的复杂性.典型的例子是二分搜索.

  • 不必要.我明白你想要暗示什么,但仅仅因为你把工作分成两半并不意味着你得到了一个对数的复杂性,你甚至可以指出这个问题.您必须注意解决方案是如何重新组合的,以及如何解决分开的问题.有很多情况下重组步骤占主导地位.参见主定理或更好地解决没有定理的重复.在简单的复发之下有很多惊喜. (3认同)
  • @unjaan:我觉得你误解了我.我不只是说将工作分成两半,我说"每次迭代需要完成一半的工作".我的意思是,如果在每一步都有一半的工作要做,与前一步相比,那么你就具有对数的复杂性(对于工作,读取计算). (3认同)

Dav*_*d Z 12

不确定这是不是你的意思,但是......对数复杂性通常出现在你使用扩展数据结构时,比如平衡二叉树,它包含1个根节点,2个孩子,4个孙子,8个基本上在每个级别节点的数量乘以某个因子(2)但仍然只有其中一个参与迭代.或者作为另一个例子,一个循环,其中索引在每一步加倍:

for (int i = 1; i < N; i *= 2) { ... }
Run Code Online (Sandbox Code Playgroud)

这样的事情是对数复杂性的签名.

  • 1/2在整数除法中为零,但如果使用"i/= 2",则为是.(如果这是您想知道的特定算法,那么将它包含在您的问题中可能是个好主意.) (2认同)

Meh*_*ari 5

主定理通常有效.