【问题标题】:Big O Log problem solving大O日志问题解决
【发布时间】:2010-07-28 17:38:31
【问题描述】:

我有一个来自我正在阅读的算法书的问题,我不知道如何解决它(我已经很久没有做过对数或指数数学了)。问题如下:

假设我们正在比较相同的插入排序和归并排序的实现 机器。对于大小为 n 的输入,插入排序以 8n^2 步运行,而合并排序以 64n log n 步运行。对于 n 的哪些值,插入排序优于合并排序?

Log 以 2 为底。我开始尝试求解相等性,但卡在 n = 8 log n 左右。

我想要讨论如何在数学上解决这个问题的答案(不接受 excel 的蛮力,抱歉;))。任何指向对数数学描述的链接也将非常有助于我理解您的答案。

提前谢谢你!

【问题讨论】:

    标签: math big-o logarithm


    【解决方案1】:

    【讨论】:

    • 嗯,谁能解释一下到底发生了什么?该图很棒,但我们已经知道答案在 44 左右。我想尝试了解如何到达那里的数学。 (没有 wolfram ;)
    • 你不能完全解决。您需要使用数值方法来获得十进制答案。
    • 谁能至少解释一下 wolfram alpha 使用的方程式吗?
    • W 函数定义为函数 f(W) = WeW 的逆函数。所以真的,wolfram 的“答案”实际上只是另一个方程(但我猜是一个标准的方程)。我想平方根函数是一样的,因为它是 f(x) = xx 的反函数。 mathworld.wolfram.com/LambertW-Function.html
    【解决方案2】:

    最好的办法是使用牛顿法。

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

    【讨论】:

    • 这将很快收敛到一个答案上,特别是因为只有 n 的整数值才有意义。当 (int)a == (int) b 时停止迭代
    【解决方案3】:

    解决此问题的一种技术是简单地使用图形计算器并绘制两个函数(请参阅另一个答案中的 Wolfram 链接)。找到您感兴趣的交叉路口(如果有多个交叉路口,如您的示例所示)。

    无论如何,没有一个简单的表达式可以解决 n = 8 log₂ n(据我所知)。将问题改写为:“找到 f(n) = n - 8 log₂ 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。二分搜索逻辑在第二个数据列中,我只是自动扩展了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      相关资源
      最近更新 更多