大O日志问题解决

时间:2010-07-28 17:38:31

标签: math big-o logarithm

我有一个问题来自我正在阅读的算法书,我对如何解决它感到难过(自从我完成日志或指数数学以来已经很长时间了)。问题如下:

假设我们正在比较插入排序和合并排序的实现 机。对于大小为n的输入,插入排序以8n ^ 2步进行,而合并排序以64n log n步进行。对于n的值,插入排序是否合并排序?

日志是基础2.我开始试图解决相等问题,但是在n = 8 log n时陷入困境。

我想答案讨论如何用数学方法解决这个问题(蛮力与excel不允许抱歉;))。任何指向日志数学描述的链接都会对我理解你的答案非常有帮助。

提前谢谢!

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

你最好的选择是使用牛顿法。

http://en.wikipedia.org/wiki/Newton%27s_method

答案 2 :(得分:1)

解决这个问题的一种方法是简单地抓取图形计算器并绘制两个函数的图形(参见另一个答案中的Wolfram链接)。找到您感兴趣的交叉点(如果有多个交叉点,就像您的示例中那样)。

在任何情况下,都没有一个简单的表达式来解决n = 8 log 2 n(据我所知)。将问题重新描述为:“找到f(n)= n = 8 log 2 n的零”可能更简单。首先,找到一个包含您感兴趣的交叉点的区域,并继续缩小该区域。例如,假设您知道目标n大于42但小于44. f(42)小于0,f(44)大于0.尝试f(43)。它小于0,所以尝试43.5。它仍然小于0,所以尝试43.75。它大于0,所以尝试43.625。它大于0,所以继续下去,依此类推。这种技术称为binary search

对不起,这只是“蛮力与excel”的变种: - )

修改

为了好玩,我制作了一个电子表格,用二分搜索解决了这个问题:binary‑search.xls。二进制搜索逻辑位于第二个数据列中,我只是自动扩展它。