为什么计算机科学中的对数被假定为以 2 为底的对数?

Why are logarithms in computer science presumed to be base-2 logarithms?

我在计算机科学教科书上看到以下内容,

... 所以,我想知道是否有人可以向我解释为什么。

计算机科学中出现对数的最常见方式之一是将一些数组重复分成两半,这通常出现在分而治之的算法中,如二分查找、归并排序等。在这些情况下,数字在你得到单元素数组之前,你可以将长度为 n 的数组分成两半的次数是 log2 n.

另一种非常常见的对数产生方式是查看数字的位。以二进制形式写出数字 n 大约使用 log2 n 位。像基数排序这样的算法有时一次只工作一位,通常会产生这样的日志。其他算法,如二进制 GCD 算法,通过除以 2 的幂来工作,因此最终会出现浮动的对数因子。

物理、数学和其他科学中的对数经常出现,因为您处理的是随时间增长的连续过程。在这些情况下会出现自然对数​​,因为某些过程随时间的 "natural" 增长率由 ex 建模(对于 "natural" 增长率的某些定义) .但在计算机科学中,指数增长通常是离散过程的结果,例如上述分而治之算法或二进制值的处理。因此,我们通常使用 log2 n 作为对数函数,因为它出现得如此频繁。

这并不是说我们在 CS 中总是使用以二为底的对数。例如,由于斐波那契数列的存在,AVL 树的分析经常涉及以黄金比例 φ 为底的对数。许多随机算法确实以某种方式涉及 e,例如快速排序的标准分析,它涉及调和数,因此连接回自然对数。这些是增长率由其他东西(斐波那契数或指数函数)建模的过程示例,因此我们在那里选择不同的对数基数。只是使用二进制数或将事物分成两半非常常见,以二为底的对数最终成为默认值。

在很多情况下,选择什么基地都没有关系。例如,在大 O 表示法中,所有对数都是渐近等价的(它们仅相差一个乘法常数因子),因此我们通常在写类似 O(n log n) 或 O(log n ).