【问题标题】:Sorting Algorithms By Efficiency按效率排序算法
【发布时间】:2013-01-23 17:25:15
【问题描述】:

伙计们,我的作业还有最后一个问题。问题问:

Reorder the following efficiencies from smallest to largest:
2^n
n!
n^5
10,000
nlog(n)

再次......请不要直接回答这个问题。

我的问题:

1.) 从最小到最大是什么意思?从最低效率到最高效率?

2.) 鉴于 10,000 是恒定的,我认为这是我最有效的,其次是 nlog(n),然后是 n!,然后是有效的 n^5,最后是 2^n。这是正确的吗?

【问题讨论】:

  • 为什么不将此问题作为电子邮件发送给教授?
  • 因为这是一个定时的家庭作业。他甚至说不要担心它是对还是错,只要尽力而为,但我真的很想了解材料,我想听到从你们那里帮助我学习。
  • @MBarnett 是“尽力而为”在这里问它吗?要真正理解这些材料,您必须自己研究。
  • @mmgp 他不喜欢这个文本,所以我们不使用它,而且我的数学技能还不够强,无法理解我得到的谷歌答案。你们似乎是能够使其易于理解,所以我通常先看这里

标签: performance algorithm sorting big-o


【解决方案1】:

对于n!、n^5、2^n的情况,考虑它们在n+1处是如何增加的,即比较(n+1)!到 n!、(n+1)^5 到 n^5、2^(n+1) 到 2^n。

至于您的第一个问题,请按照您认为最有意义的方式进行解释,并确保明确说明这是您对它们进行排序的方式(对大多数人来说效率最低或相反),以便您的教授知道您的意思。

【讨论】:

    【解决方案2】:

    f(n) = O(g(n)) 意味着对于某些常数c 和足够大的n,|f(n)| 总是小于或等于c * |g(n)|。这意味着您正在比较函数值,因为 n 趋于无穷大。

    例如,对于小的n,100 * n 小于n²,但从n = 100 到n² 始终大于或等于100 n,因此被视为“更大”。

    反过来就不行了——不管你选择多大的常数c,总会有一些n0,所以对于所有n > n0n² > c * 100 * n。如果你例如从n = 100,000,000 上选择c = 1,000,000 n² 仍然大于或等于c * 100 * n。

    【讨论】:

      【解决方案3】:

      如果可以,请尝试绘制它们。查看图表的外观并进行比较,使用 x 而不是 n。

      【讨论】:

        【解决方案4】:

        从小到大是什么意思?从最低效率到最高效率?

        我会说可能是效率最高到最低效率,所以 O(1) -> O(n) -> O(n2) 顺序。

        鉴于 10,000 是恒定的,我认为这是我最有效的,其次是 nlog(n),然后是 n!,然后是有效的 n^5,最后是 2^n。这是正确的吗?

        这里只是一个提示。用几个 n 值代替其中的每一个,看看哪个增长最快。确保使用相当广泛的值,例如 10 的前 7 或 8 次方。

        【讨论】:

        • 在听取您的建议后,我将顺序更改为-- 1)10K, 2.)nlog(n) 3.) 2^n 4.) n^5 5.) n! --- 看起来对吗?
        • @mmgp 你能解释一下吗?
        • @MBarnett 您可能没有使用足够大的 n 值。 n^5 总是 会大于 2^n,还是最终会遇到 2^n 更大的 n? n! 同样的问题。
        • @BilltheLizard 现在我明白你所说的 10 的 7 或 8 次方是什么意思了……也就是说 3.)n^5 4.)n! 5.) 2^n ---?
        • #3 是对的。 2^n 最终会变得比 n 大吗!?我的电子表格显示的数字不够大。 :)
        【解决方案5】:
        1. 我会反其道而行之 - 从最高效到最不高效排序,但正如 Johnny 评论的那样 - 问教授 :)
        2. 前 2 个是正确的 - 然后你得到的就被打乱了。

        【讨论】:

          【解决方案6】:

          对于这个作业,只需用大输入代替并进行比较。 供您学习.. 有 Big O 、 Omega 表示法和 Theta Θ。

          Big O 是你在这个作业中应该得到的,因为这是你的函数永远不会超过的上限,.. 在大值中。

          Omega Ω 是下限,这是函数永远不会低于小值的下限。以 1,000,000 为例。

          Theta Θ 介于两者之间。

          但在现实生活中,我总是只面对大 O 符号。

          let n = 1000    
          2^n =~ 1e30  
          n!  =~ too BIG!  
          n^5 =~ 1e15  
          10,000 =~ 10000  
          nlog(n) 3000  
          

          从某种意义上说,您现在会发现正确的顺序。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-27
            • 2013-03-17
            • 2017-07-05
            • 1970-01-01
            • 2014-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多