答案 0 :(得分:16)
计算机科学中最常见的对数方法之一是将一些数组重复分成两半,这通常发生在二元搜索,mergesort等分而治之的算法中。在这些情况下,次数在进入单元素数组之前,可以将长度为n的数组除以log 2 n。
另一种非常常见的对数方式是通过查看数字的位。以二进制形式写出数字大致使用log 2 n位作为数字n。像基数排序这样的算法有时会一次一点地工作,这通常会产生这样的日志。其他算法(如二进制GCD算法)的工作方法是将2的幂除以最终得到的对数因子浮动。
物理,数学和其他科学的对数经常出现,因为你正在处理随时间增长的连续过程。自然对数出现在这些情境中,因为某些过程随时间的“自然”增长率由e x 建模(对于“自然”增长率的某些定义)。但是在计算机科学中,指数增长通常是由于离散过程的结果,如上面描述的分而治之算法或操纵二进制值。因此,我们通常使用log 2 n作为对数函数,因为它只是频繁出现。
这并不是说我们总是在CS中使用基数为2的对数。例如,AVL树的分析通常涉及对数,其基数是由于Fibonacci数的存在而的黄金比率φ。许多随机算法确实以某种方式涉及e,例如快速排序的标准分析,其涉及谐波数并因此连接回自然对数。这些是增长率由其他东西建模的过程的例子 - 斐波纳契数或指数函数 - 因此我们在那里选择不同的日志基数。这只是因为使用二进制数或将事物分成两半而非常常见 - 两个对数最终成为默认值。
在许多情况下,您选择的基数甚至不重要。例如,在big-O表示法中,所有对数都是渐近等价的(它们只相乘乘法常数因子),因此我们通常甚至在写O(n log n)或O(log n)时都不指定基数。 )。