时间复杂度算法中的对数基数



所有时间复杂度算法的对数底是什么?它是以10为底还是以e为底?

当我们说平均排序复杂度是O(n log n)时,log n的底数是10还是e?

在计算机科学中,通常是以2为基数。这是因为许多表现出这种复杂性的分治算法在每一步中将问题分成两部分。

二分查找就是一个经典的例子。在每一步中,我们将数组分成两部分,并且只递归地搜索其中一半,直到您到达一个元素(或零元素)的子数组的基本情况。当将长度为n的数组分成两部分时,在得到一个单元素数组之前的总除数为log2(n)

这通常被简化,因为在讨论算法分析时,不同基数的对数实际上是等价的。

在Big-O复杂度分析中,对数底是多少并不重要。(它们渐近相同,即它们仅相差一个常数因子):

O(log2 N) = O(log10 N) = O(loge N)

大多数时候,当数学家谈论对数时,他们隐含地指的是基数e。计算机科学家倾向于使用2进制,但这并不重要。

对于大0来说,底数不重要,因为底数公式的变化意味着它只是一个常数因子差。

然而,有时计算一个算法执行了多少操作是有用的。在这种情况下,由于大多数分治算法的性质,大多数情况下它是以2为底。

这个网站有一些解释

基本上,以10为底或以2为底或以e为底的对数可以通过添加一个常数来交换(转换)到任何其他以常数为底的对数。所以,log的底是多少并不重要。

需要注意的关键是log2N增长缓慢。将N加倍的影响相对较小。对数曲线很容易变平。源

这取决于问题,并且在大多数情况下是不相关的。然而,在许多情况下,它是以2为基数的,例如二分查找是log(以2为基数)n。

最新更新