我的问题是从岗位“大O的纯英文的解释” 。我不知道对数的复杂性的确切含义。我知道,我可以和时间之间的回归操作的数量,并计算X平方值,并确定这样的复杂性。不过,我想知道的方法来快速确定在纸上。

你如何确定对数的复杂性?是否有一些很好的基准?

有帮助吗?

解决方案

不知道这是你的意思,但是......对数的复杂性,当你与像一个平衡二叉树,其中包含1个节点在根部处展开的数据结构通常工作产生,2名儿童,4孙子,8曾孙等,基本上在每一级节点的数量得到由一些因素(2),但仍仅其中之一涉及迭代相乘。或者作为另一示例,一个循环,其中索引加倍在各步骤:

for (int i = 1; i < N; i *= 2) { ... }

那样的话是对数的复杂性的签名。

其他提示

不严谨,但是你已经到了一半每次迭代完成一个算法,本质上是将所需的工作,那么你有对数的复杂性。典型的例子是二进制搜索。

主定理的通常工作。

如果你只是想了解对数大哦,是在寻找当你的数据在复发的一半每一步会被切断。

这是因为,如果你正在处理的数据是1/2大如之前的步骤中,它是一个无穷级数。

下面是说它的另一种方式。

假设你的算法是数字的问题的大小的数量线性。所以,也许你有一个新的算法因素大一些,就可以显示的位数是线性的。一个20位的数字,从而需要两倍的时间因素,因为使用的算法采用10位数字。这将有日志的复杂性。 (那将是值得的东西为发明人。)

对分具有相同的行为。这需要大约10二等分的步骤由1024 = 2 ^ 10倍切割间隔长度,但只有20个步骤将通过2 ^ 20的一个因素。

切割间隔

日志复杂性并不总是意味着一种算法是所有问题快。在O(的log(n))的前部的线性因子可以是大的。所以,你的算法可能是小问题,可怕的,直到问题规模明显较大,其他算法死亡指数(或多项式)死亡,不能成为有用的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top