【问题标题】:Algorithm analysis: Choosing the best algorithm算法分析:选择最佳算法
【发布时间】:2013-08-06 00:51:22
【问题描述】:

我正在尝试解决一个问题,即比较两种算法在最坏情况下的运行时间,并找出一种算法比另一种算法运行时间更快的输入大小。

这两种算法是:
A1 = 2n log10 n
A2 = 0.1n2

基本上,我正在尝试解决以下 n 的不等式:
2n 对数10 n 2

谁能指出我正确的方向?
我已经设法达到:
日志10 n n 0.05n

但我不知道从这里该怎么做(或者我可能尝试了错误的方法来解决它)。

提前感谢您的帮助!

【问题讨论】:

  • 可能更适合math.stackexchange.com
  • 有人应该指出说2n log_10 n < 0.1n^2是不正确的(等式不适用于n=1),你需要说O(2n log_10 n) < O(0.1n^2),为n指定一个值,或者说'渐近地'。

标签: algorithm time inequality


【解决方案1】:

其实你是在尝试解决不等式

因为 算法只会在很短的时间内变得更快,然后对于任何更大的 n 值, 算法会更快。

忽略n

然后除以 20 并以 10 为底对两边取幂:

使用数值求解器在区间 [1, 40] 上找到 的零点,因为显然 40 是一个上限(因为 )。

例如,在 Matlab 中:

>> fzero(@(x) 10^(x/20)- x, 20)

ans =

   29.3531

因此,对于任何一个直到 29 的整数, 算法更快,对于 n > 29, 算法获胜。

【讨论】:

  • 感谢您的回复!我能问一下为什么 40 显然是一个上限吗?
  • 我在回答中进行了解释,但有人对其进行了编辑并造成了拼写错误,我不知道如何更正他们的拼写错误。错字是它说 10040 而不是 100 不小于 40。看不等式就很容易理解了:10^(n/20)
  • 哦,是的,现在这更有意义了。但是,30 不是上限,而不是 40 吗?因为:10^(30/20) = 31.6228 和 10^(29/20) = 28.1838 不过,29 的最终答案仍然是正确的。
  • @user2654949 是的,术语“上限”并不意味着单个数字。 30是上限,40是上限。上限是不等式为假且高于不等式为真的数字集中包含的值的任何数字。
  • 是的,当然 :) 我想我的意思是它是最小的上限。感谢您的帮助!
【解决方案2】:

只需使用 sagemath 绘制函数的图像:plot(0.1 * n * n - 2 * n * log(n, 10), n, 0, 50)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 2015-06-30
    相关资源
    最近更新 更多