📜  对数与双对数时间复杂度

📅  最后修改于: 2022-05-13 01:56:06.495000             🧑  作者: Mango

对数与双对数时间复杂度

时间复杂度是描述运行算法所需时间的计算复杂度。”

现在,我们知道可以有多种方法可以解决任何特定问题。但是,了解如何以最有效的方式解决问题在实际应用中很重要。要找到任何算法或问题的效率,最重要的是要知道它的时间和空间复杂度是多少。要了解有关这些的更多信息,请单击此处

红色 - O(log n),蓝色 - O(log(log n)),绿色 - O(n),紫色 - O(n 2 )

对数时间复杂度:

1. 什么是对数时间复杂度或 O(log N)?
现在,如果您已经在竞争性编程或一般编程方面有点脏,那么您可能在学习二分搜索时可能遇到过这个术语,O(log n)。如果你还没有,请继续阅读。

为了理解 O(log n),让我们以最经典的例子为例,字典问题,并在其中找到“程序”这个词。如果您打开字典并开始在从 1 到 n 的每一页上查找它……。这将是 O(N) 时间复杂度的一个例子,我们知道这不是一种有效的方法……

因此,我们将书大致打开到中间页面,看看我们以字母 P 开头的单词是落在当前所选页面上的单词之前还是之后。如果“程序”应该在它之后,我们现在尝试在最后一页和当前页面之间找到中心页面,依此类推……直到我们到达包含我们想要的单词的单个页面,即程序。

所以基本上我们在每一步都将问题分成两半,直到我们找到结果。这就是我们所说的 O(log N)。在这里,时间将线性增长,N 将呈指数增长。例如,如果计算 100 个元素需要 5 秒,那么计算 1000 个元素需要 6 秒,依此类推……

2. 什么是双对数时间复杂度或 O(log (log N))?
在实现 Van Emde Boas 树 (VEBT) 时,我们看到O(log(log N))时间复杂度,而不是更传统的二叉搜索树 (BST)。

范·埃德·博阿斯树

但是例如,如果我们取 N<10 6 ,那么在最好的情况下,双对数算法超过对数算法大约是 5 倍。而且,一般来说,它的实现更加困难。

现在,在现实世界中,5 倍是非常重要的,因此,这个数字的倍数的加速是巨大的!但通常,大多数实际用例中的数据大小大于 10 9甚至 10 15 。因此,鉴于您的数据小于 10 6 ,您可以使用任何O(log (log N))算法而不是任何O(log(N))算法来获得一些很好的结果。

然而,由于 VEB 树的实现涉及更高的常数,加速可能会受到阻碍,您可能必须分析不同的运行时常数以获得正确的想法。

无论如何,由于许多角色扮演因素,我们不能说一种特定的复杂性比另一种更好。可以根据要解决的问题的要求选择最合适的一种。