我在哪里可以了解对数?

时间:2008-09-23 15:44:59

标签: math logarithm

我在编程环境中听到相当多的对数。它们似乎是许多问题的解决方案,但我似乎无法找到一种利用它们的现实方式。我已经阅读了Wikipedia entry,而且坦率地说,这让我毫不在意。

那么,我在哪里可以了解对数解决的实际编程问题?有没有人有任何他们遇到的问题的例子,这些问题是通过实现对数来解决的?

19 个答案:

答案 0 :(得分:13)

编程中的对数也经常用于描述使用Big O notation的算法的效率。

例如,二元搜索算法最糟糕的情况是O(log(n))(在排序集上),而线性搜索的最坏情况是O(n)

答案 1 :(得分:11)

假设你有1000美元,它是一个储蓄账户,利息为2.4%。

你有多少年要等到2000美元购买一台新笔记本电脑?

1000×1.024 x = 2000

1.024 x = 2

x = log 1.024 2 = 29。23年

答案 2 :(得分:9)

在我自己的研究中,我发现了一些有用的资源:

Khan Academy logarithms section

这是一组关于对数的很棒的课程。这位来自六年级学生的评论总结得很好:

  

非常感谢你。本周,我的数学老师告诉我要挑战   我自己,所以我尝试了对数。起初我想,'我不能这样做,   太难了'。然后我看了视频,现在他们甚至都很有趣!   我六年级,我的数学老师印象深刻。我不能谢谢你   够了。

Ruby Quiz #105: Tournament Matchups

本文包含一个很好的示例,使用基数2日志来确定在 x 团队中完成淘汰赛所需的回合数。

An Intuitive Guide To Exponential Functions & E

优秀,直观(正如您所期望的,给定标题),指向 e ,自然对数的基础。大量的插图和例子使这成为一篇文章的宝石。

Demystifying the Natural Logarithm (ln)

这是关于 e 的文章的后续内容,并讨论自然对数(ln),使用文章中给出的直观解释,“给你达到一定增长水平所需的时间“。

Better Explained 网站上实际上有很多好内容。真的,一个辉煌的资源。

我之前遇到的另一个工具是 Instacalc ,但完全被遗忘了。它似乎是由同一个人 - Kalid Azad--创作了Better Explained网站。这是一个非常有用的工具,无法用数学进行攻击。

答案 3 :(得分:5)

日志是一种元算术。这是一种思考每个数字作为一个(可能是固定的)基数的方式。仅对指数执行操作。这意味着您可以通过添加和减少日志来进行乘法和除法。换句话说,您将数据放入日志空间,执行一套算术,然后将其拉回到非日志空间。如果浮点精度损失以及变换进出日志空间的开销很便宜,那么您可能会获得整体胜利。

你可以用日志做一个光滑的技巧,计算一个数字打印时的字符数,取数字的log-base-2除以log-base-10(2),与一组乘法相比,它是恒定的时间。

答案 4 :(得分:4)

我见过用于显示标签云的对数。这是一个解释它的页面:

Tag Cloud Font Distribution Algorithm

答案 5 :(得分:4)

我假设您已经听说过具有上下文的对数来计算时间。

一个具体的例子是搜索算法。给定一组有序数据(想想一个有序的int数组),你想要找到该数据中一个值的索引键。我们可以受益于阵列的排序(例如,1,2,6,192,404,9595,50000)。假设我们想要找到值2的索引。我们可以通过在每一步中剔除(忽略)一半数组来最小化我们的搜索空间。我们通过测试数组中间的值来开始此搜索。数组中有7个值,然后我们将索引7/2 = 3.5 = 3作为int。 array [3]是192.我们要查找的值是2,因此我们希望在搜索空间的下半部分继续搜索。我们完全忽略了索引4,5,6,因为它们都高于192,反过来也高于2.现在我们有一个看起来像(1,2,6)的搜索空间。然后我们再次索引到中间(重复过程),我们立即找到2。搜索完成,2的索引为1.

这是一个非常小的例子,但它显示了这种算法是如何工作的。

对于16个值,您需要最多搜索4次。对于32个值,最多搜索5次,64次搜索6次,依此类推.1088576值以20个步骤搜索。这比分别比较阵列中的每个项目要快得多。当然,这仅适用于已排序的数据集合。

答案 6 :(得分:3)

现实世界中的许多(很多!)关系都是对数的。例如,如果Stack Overflow上的信誉分数分布为log normal,我不会感到惊讶。绝大多数用户的声誉得分为1,少数人的声誉会高得无法提升。如果对该分布应用对数变换,则可能几乎是线性关系。快速扫描https://stackoverflow.com/users?page=667表明这是真的。

您可能更熟悉The Long Tail概念,它是对数分布的应用。

答案 7 :(得分:3)

另一种看待它的方法是查看数字中的基数乘数。我相信你可以在以下例子中看到这一切是如何相关的。

十进制(基数为10):

  • log10(1)= 0,(10 ^ 0)= 1
  • log10(10)= 1,(10 ^ 1)= 10
  • log10(100)= 2,(10 ^ 2)= 100
  • log10(1000)= 3,(10 ^ 3)= 1000
  • log10(10000)= 4,(10 ^ 4)= 10000
  • log10(100000)= 5,(10 ^ 5)= 100000

二进制(基数2):

  • log2(1)= 0,(2 ^ 0)= 1
  • log2(2)= 1,(2 ^ 1)= 2
  • log2(4)= 2,(2 ^ 2)= 4
  • log2(8)= 3,(2 ^ 3)= 8
  • log2(16)= 4,(2 ^ 4)= 16
  • log2(32)= 5,(2 ^ 5)= 32
  • log2(64)= 6,(2 ^ 6)= 64
  • log2(128)= 7,(2 ^ 7)= 128

十六进制(基数为16):

  • log16(1)= 0,(16 ^ 0)= 1
  • log16(16)= 1,(16 ^ 1)= 16
  • log16(256)= 2,(16 ^ 2)= 256
  • log16(4096)= 3,(16 ^ 3)= 4096
  • log16(65536)= 4,(16 ^ 4)= 65536

如果你想考虑变量:

  • log N X )= Y
  • N ^ Y )= X

答案 8 :(得分:3)

我建议e: The Story of a Number为对数的重要性,它们的发现以及与自然现象的相关性建立良好的基础。

答案 9 :(得分:2)

查看麻省理工学院的开放课件:Introduction to Algorithms。免费教育。真棒。

答案 10 :(得分:2)

我发现的一个比较“酷”的对数应用是Spiral Storage。这是一个哈希表,允许您随着表的增长一次拆分一个桶,将该桶中不到一半的记录重新定位到同一个新桶中。与线性散列不同,在线性散列中,性能会周期性地变化,并且所有的散列都会在大约相同的时间内分开,螺旋散列可以使平稳的平滑生长。

大约30年前由G. N. N. Martin发表,除了他还发明了Range Encoding这个事实之外我还没有学到很多东西。好像一个聪明的家伙!我无法获得原始论文的副本,但Per-ÅkeLarson的论文"Dynamic hash tables"有一个非常明确的描述。

答案 11 :(得分:2)

我唯一记得的问题是必须在SQL中计算列的乘积。 SQL Server没有PRODUCT()聚合函数,因此这是使用每个值的对数(使用LOG10()函数)的总和来完成的。主要缺点是列中的所有数字都必须为正数且非零(您无法计算负数或零的对数)。

答案 12 :(得分:2)

许多例子中的一个例子:以非常小的比率计算复合利息,并且有很多期间。

你可以用最直接的方式做到这一点,即使使用快速求幂,但由于浮点数的存储方式和计算s * r幂n仍需要O(ln(n))运算,精度可能会受到影响。

使用对数,它更准确。

A = ln(s * r power n)= ln(s)+ n * ln(r)
在对数数据库中的两次查找给出ln(s)和ln(r),ln(r)开始非常小,并且浮点数在0附近以最佳精度工作 result = exp(A),这里是反向查找。

如果你使用非整数指数,例如提取立方根,它也是唯一真正有效的方法。

答案 13 :(得分:2)

每个编程示例中最明显的用法是精度。简而言之,考虑存储无符号整数。存储X需要多少位?那么,你可以存储在n位中的最大值是2 ^ n - 1,所以你需要log_2 X + 1位来存储X.现在你可以轻松选择short,int,word,long等。

答案 14 :(得分:1)

当一个或两个轴覆盖大范围的值时,对数在图表和图形中经常使用。

一些自然现象最好以对数标度表示;一些例子是声压级(SPL以dB为单位)和地震震级(Richter scale)。

答案 15 :(得分:1)

作为Chris所讨论的一个例子,基于值中位数改变复杂度的算法(可能)将具有由O(log(n))描述的效率。

指数的另一个日常例子(因此也就是对数)的格式为IEEE floating point numbers

答案 16 :(得分:1)

对数函数只是指数函数的倒数,与减法是加法的倒数相同。正如这个等式:

a = b + c

陈述与此等式相同的事实:

a - c = b

这个等式:

b ** p = x

(其中**正在提升权力)陈述与此等式相同的事实:

log [base b] (x) = p

虽然b可以是任何数字(例如log [base 10] (10,000) = 4),但数学的“自然”基础是e(2.718281828 ...),其中see here

“常用”对数,在工程中使用更多,使用10的基数。快速和肮脏(强调脏)对某些数字x的公共(基数10)对数的解释是它比表示x大小的数字所需的小数位数少一个。

答案 17 :(得分:0)

揭开自然对数(ln)的神秘面纱 在BetterExplained是我发现的最好的。 它从基础中清除概念并帮助您理解基本概念。 在那之后,一切似乎都是一条小路。

答案 18 :(得分:0)

以下是我使用的一些网站:

我使用对数来计算房屋的年度升值,以确定卖方是否公平。

众议院欣赏方程式

这是基本的等式:

  • 以前的价格= p
  • 新价格= n
  • 感谢率= r
  • 多年的赞赏= y
  

p * (1 + r)^y = n

那么,如果6年前的价格是191,000美元(通过检查您的couty审计员的网站)并且要价是284,000美元,那么升值率是多少(不会考虑任何一次性改善费用)?

191,000 * (1 + r)^6 = 284,000

(1 + r)^6 = 284,000 / 191,000 = 1.486

Using a property of exponents and logarithms…

6 ( log (1 + r) ) = log 1.486
log (1 + r) = (log 1.486) / 6 = 0.02866

Using another property of exponents and logarithms…

10 0.02866 = 1 + r
1.068 = 1 + r
r = 1.068 – 1 = 0.068 = 6.8%  (kind of high!)

确定合理的价格是什么...使用4%并允许他们做出的任何改进(应该在网站上列出他们是主要的...但它不包括浴室/厨房改造等)< / p>

191,000 * (1 + 0.04)^6 = n
n = 241,675 + reasonable cost of improvement 
which of course will depreciate over time 
and should not represent 100% of the 
cost of the improvement