我在编程环境中听到相当多的对数。它们似乎是许多问题的解决方案,但我似乎无法找到一种利用它们的现实方式。我已经阅读了Wikipedia entry,而且坦率地说,这让我毫不在意。
那么,我在哪里可以了解对数解决的实际编程问题?有没有人有任何他们遇到的问题的例子,这些问题是通过实现对数来解决的?
答案 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)
在我自己的研究中,我发现了一些有用的资源:
这是一组关于对数的很棒的课程。这位来自六年级学生的评论总结得很好:
非常感谢你。本周,我的数学老师告诉我要挑战 我自己,所以我尝试了对数。起初我想,'我不能这样做, 太难了'。然后我看了视频,现在他们甚至都很有趣! 我六年级,我的数学老师印象深刻。我不能谢谢你 够了。
本文包含一个很好的示例,使用基数2日志来确定在 x 团队中完成淘汰赛所需的回合数。
优秀,直观(正如您所期望的,给定标题),指向 e ,自然对数的基础。大量的插图和例子使这成为一篇文章的宝石。
这是关于 e 的文章的后续内容,并讨论自然对数(ln),使用文章中给出的直观解释,“给你达到一定增长水平所需的时间“。
Better Explained 网站上实际上有很多好内容。真的,一个辉煌的资源。
我之前遇到的另一个工具是 Instacalc ,但完全被遗忘了。它似乎是由同一个人 - Kalid Azad--创作了Better Explained网站。这是一个非常有用的工具,无法用数学进行攻击。
答案 3 :(得分:5)
日志是一种元算术。这是一种思考每个数字作为一个(可能是固定的)基数的方式。仅对指数执行操作。这意味着您可以通过添加和减少日志来进行乘法和除法。换句话说,您将数据放入日志空间,执行一套算术,然后将其拉回到非日志空间。如果浮点精度损失以及变换进出日志空间的开销很便宜,那么您可能会获得整体胜利。
你可以用日志做一个光滑的技巧,计算一个数字打印时的字符数,取数字的log-base-2除以log-base-10(2),与一组乘法相比,它是恒定的时间。
答案 4 :(得分:4)
我见过用于显示标签云的对数。这是一个解释它的页面:
答案 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):
二进制(基数2):
十六进制(基数为16):
如果你想考虑变量:
答案 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 * (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