Algorithm 基于大O的算法比较&x27;s运行时间

Algorithm 基于大O的算法比较&x27;s运行时间,algorithm,data-structures,big-o,Algorithm,Data Structures,Big O,这是我在数据结构和算法课程中遇到的疑问。我已经在网上和网下查阅了一些资源,但仍然有疑问。我被要求计算一个算法的运行时间,我正确地计算了-O(n^3)。但让我困惑的是这个问题-如果n从90到900000,算法的运行速度会慢多少?我的疑问是: 该算法的运行时间为O(n^3),因此,对于较大的输入,显然需要更多的时间但如何仅根据最坏情况的时间复杂度来比较不同输入的算法性能 我们能插入n的值并除以大O得到一个比率吗 无论我哪里弄错了,请纠正我!谢谢 显然,你的想法是正确的 当算法计算大小(n)时,在最坏

这是我在数据结构和算法课程中遇到的疑问。我已经在网上和网下查阅了一些资源,但仍然有疑问。我被要求计算一个算法的运行时间,我正确地计算了-O(n^3)。但让我困惑的是这个问题-如果n从90到900000,算法的运行速度会慢多少?我的疑问是:

  • 该算法的运行时间为O(n^3),因此,对于较大的输入,显然需要更多的时间但如何仅根据最坏情况的时间复杂度来比较不同输入的算法性能
  • 我们能插入n的值并除以大O得到一个比率吗
    无论我哪里弄错了,请纠正我!谢谢

    显然,你的想法是正确的

    当算法计算大小(n)时,在最坏的情况下,如果大小增加,速度将与n^3成反比

    您的假设是正确的。您只需将n=900000的值除以n=90即可得到结果。此因子将是减速因子

    这里,
    减速系数=(900000)^3/(90)^3=10^12

    因此,慢系数=10^12。您的程序将慢10^12!!!如此剧烈的变化!或者换句话说,你的效率会下降10^(-12)倍

    根据建议的评论进行编辑:-

    但是如何比较不同输入的算法性能呢 基于最坏情况下的时间复杂度

    正如这篇文章的评论员之一G.Bach所暗示的,你问题背后的基本思想本身是矛盾的!你应该讨论
    Big-Theta
    符号,而不是
    Big-O
    来考虑一个通用的解决方案大-O是上界,而大θ是紧界。当人们只担心可能发生的最坏情况时,大O就足够了;i、 它说“再糟糕不过了”。当然,越紧的界限越好,但紧界限并不总是容易计算的

    因此,在最坏情况分析中,您的问题将以我们两人的回答方式得到回答。现在,人们使用
    O
    而不是
    Ω
    的一个狭义原因是放弃关于最坏或一般情况的免责声明。但是,为了进行更严密的分析,您必须检查
    O
    大欧米茄
    以及框架问题。这个问题可以在不同大小的n中找到合适的解决方案。我把它留给你们去解决。但是,如果你们有任何疑问,请随意评论

    总之,您的运行时间与最坏情况分析没有直接关系,但是,不知何故,它是相关的,可以这样重新定义

    附言-->我从中获得了一些想法/陈述。所以,也要感谢作者们


    我希望这能有所帮助。如果有任何信息被浏览,请随时发表评论

    你的理解是正确的

  • 如果您唯一的性能度量是最坏情况下的时间复杂度,那么这就是您所能比较的。如果你有更多的信息,你可以做出更好的估计

  • 是的,只需替换n的值并将9000003除以903即可得到比率


  • 不一定。90和900000都不等于无穷大。@OliCharlesworth为什么先生,他已经提到它依赖于n,是一个受(n^3)影响的算法?我认为问题是这两个问题的答案方向相反:(1)你是对的,
    O(n^3)
    没有告诉你实际的运行时间。(2) 您是正确的,请将
    n^3
    视为实际运行时间。我想OP正在寻找如何调和这两种说法。谢谢你的回答。但是,即使我向您展示了算法——比如C语言中的插入排序,它如何帮助您更好地进行估计?考虑到所有步骤和单个时间的复杂性,比如O(n^2)实际上应该是O(n^2+n+3)…@Noob,对于n的特定值,我想这是可行的。然而,随着n的增加,第一项最终将压倒所有其他项。我考虑的是最佳案例和平均案例时间复杂性。如果你有这些,你可以给出一个预期性能的估计范围;虽然程序员在谈论算法的最坏情况运行时间时通常指的是大θ,但使用大θ,这是您可能需要注意的一点微妙之处。另外,无论如何,试图从Landau符号中获得特定的值有点愚蠢。它隐藏了低阶项,所以从中派生的任何特定值都会附加错误,有时会很重要。对于一个大概的数字,你可以按照你的建议去做。@G.Bach-谢谢,我已经修改了答案,包括了你的名字,并暗示了你美丽的评论。请在我的答案下面对答案进行评论。此外,如果发现任何严重的错误,请指出!您的理解是错误的,因为您忽略了这些复杂性声明中的第一句:“存在一个n_0,因此对于所有n>n_0,以下内容适用”。如果您的n_0很大,并且在现实中很容易是数十万个元素,那么您的方法将失败。