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

Algorithm 时间复杂度算法中的对数基,algorithm,Algorithm,所有时间复杂度算法的对数基数是多少?是10号垒还是e号垒 当我们说平均排序复杂度是O(n logn)时。是logn10或e的基数吗?在大O复杂性分析中,对数基数实际上并不重要。(它们是渐近相同的,即它们只相差一个常数因子): 大多数时候,数学家谈论日志时,他们的含蓄意思是basee。计算机科学家倾向于支持base 2,但实际上这并不重要。在计算机科学中,通常是base 2。这是因为许多表现出这种复杂性的分治算法在每一步都将问题一分为二 二进制搜索是一个典型的例子。在每一步中,我们将数组分成两部分

所有时间复杂度算法的对数基数是多少?是10号垒还是e号垒


当我们说平均排序复杂度是O(n logn)时。是logn10或e的基数吗?

在大O复杂性分析中,对数基数实际上并不重要。(它们是渐近相同的,即它们只相差一个常数因子):


大多数时候,数学家谈论日志时,他们的含蓄意思是base
e
。计算机科学家倾向于支持base 2,但实际上这并不重要。

在计算机科学中,通常是base 2。这是因为许多表现出这种复杂性的分治算法在每一步都将问题一分为二

二进制搜索是一个典型的例子。在每一步中,我们将数组分成两部分,并且只在其中一部分中递归搜索,直到达到一个元素(或零元素)的子数组的基本情况。将长度为
n
的数组一分为二时,到达一个元素数组之前的总分割数为
log2(n)


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

这取决于问题的不同,并且在大多数情况下是不相关的。然而,在许多情况下,它是以2为基数的,例如二进制搜索是log(base 2)n。你可以更详细地了解它。

对于Big-O,基数并不重要,因为基数公式的变化意味着它只是一个常数因子差


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

中有一些解释

基本上,从10底、2底或e底开始的对数可以通过添加常数交换(转换)到任何其他底。因此,日志的基础并不重要

需要注意的关键是log2N增长缓慢。加倍氮的影响相对较小。对数曲线平滑得很好。

事实上,在复杂性分析中,基础确实很重要。这取决于您正在分析的函数。例如,
O(2^(log_2(n))=O(n)
,而
O(2^(ln(n)))=O(n^0.69…
,因此这些复杂性是不同的。但那是因为,在函数
2^logn
中,如果你改变对数的底,你会改变一个“常数”,它是某物的指数,而不是乘法加常数。
O(log2 N) = O(log10 N) = O(loge N)