Algorithm 什么时候是算法O(n+;m)时间?

Algorithm 什么时候是算法O(n+;m)时间?,algorithm,time-complexity,big-o,asymptotic-complexity,Algorithm,Time Complexity,Big O,Asymptotic Complexity,我是在黑客级别上解决的。我解决这个问题的算法是: 获取所有玩家分数的数组。迭代所有玩家分数并创建一个新数组。让总共有n个玩家。 不包含任何重复的球员得分。让我们称之为新的 阵列,播放器核心 让Alice玩的总关卡是m 让爱丽丝在第一轮比赛后得分 让Alice的初始秩R为0 从后端开始迭代PlayerCores数组,直到得到分数小于S的玩家分数 将R设置为步骤5中找到的玩家的等级 将m减少1 打印R 现在开始处理Alice在循环中所有后续m-1级别的分数 将S设置为Alice的下一级分数 从排名为

我是在黑客级别上解决的。我解决这个问题的算法是:

  • 获取所有玩家分数的数组。迭代所有玩家分数并创建一个新数组。让总共有n个玩家。
    不包含任何重复的球员得分。让我们称之为新的 阵列,播放器核心
  • 让Alice玩的总关卡是m
  • 让爱丽丝在第一轮比赛后得分
  • 让Alice的初始秩R为0
  • 从后端开始迭代PlayerCores数组,直到得到分数小于S的玩家分数
  • 将R设置为步骤5中找到的玩家的等级
  • 将m减少1
  • 打印R
  • 现在开始处理Alice在循环中所有后续m-1级别的分数
  • 将S设置为Alice的下一级分数
  • 从排名为R-1的玩家开始向前端迭代PlayerCores数组
  • 继续迭代直到你得到一个得分低于S的玩家
  • 将R设置为在上述步骤中找到的玩家的等级
  • 将m减少1
  • 打印R
  • 如果还有更多关卡要玩(即m>0),请转至步骤9.1
  • 现在当我开始计算上述算法的大O时间复杂度时,我意识到它应该是O(n),如下所示:

  • 需要一次扫描才能获得不重复的分数。这有助于因子n。所有分数都可能是唯一的
  • 需要从尾部到前部进行另一次扫描,以确定Alice在每个关卡后的排名。这又导致了因子n。在最坏的情况下,级别数(m)可以等于玩家数(n)

  • 加上以上两个因素,时间复杂度为O(n+n)=O(2n)=O(n)。而我的朋友声称这是O(n+m),尽管他无法充分解释。如果我对O(n+n)复杂性的表述有缺陷,有谁能帮助我理解同样的问题吗?

    O(n+m)
    不同于
    O(n+n)
    O(n)
    当你不知道
    m
    n
    之间的关系时。这可能是因为有时
    n
    可能比
    m
    大,而其他时间
    m
    可能更大,但没有明确的方法来判断。然而,如果你总是知道无论怎样,
    n>=m
    ,你可以说
    O(n+m)
    实际上是
    O(n)
    。在这种情况下,同样的规则适用。

    O(n+m)
    不同于
    O(n+n)
    O(n)
    当您不知道
    m
    n
    之间的关系时。这可能是因为有时
    n
    可能比
    m
    大,而其他时间
    m
    可能更大,但没有明确的方法来判断。然而,如果你总是知道无论怎样,
    n>=m
    ,你可以说
    O(n+m)
    实际上是
    O(n)
    。在这种情况下,同样的规则也适用。

    我能够从相关人员那里获取响应。引用Ryan Fehr的话:

    对于这个问题,O(n+n)和O(n+m)本质上是一样的, 因为它们都有相同的上限。我决定去看电影 O(n+m)表示,因为它确保 我的解决方案取决于它的级别数 在本例中由m表示

    这种差异很重要的一个例子是当我们有 n(如10)的值较小,m(如10^5)的值较大。在这个 在这种情况下,对m的依赖性对于问题的复杂性非常重要 问题这也是将其表示为O(n+m)的问题,因为 如果在这种情况下m很小,而n很大,那么我们将再次看到a 我提供了对问题复杂性的错误陈述 符号

    然而,Big-O表示法的优点是它代表了 所有情况下的最坏情况,因此O(n+n)的最坏情况与O(n+m)相同 因此它们是相当等价的。在这一点上,它只是一个 关于您希望如何表示对的依赖关系的偏好问题 m作为输入变量(如果您有这样的依赖项)

    当然,如果您不依赖于m作为输入,那么我 认为O(n+n)=>O(n)是对 问题是我给了什么


    我能从有关人员那里得到答复。引用Ryan Fehr的话:

    对于这个问题,O(n+n)和O(n+m)本质上是一样的, 因为它们都有相同的上限。我决定去看电影 O(n+m)表示,因为它确保 我的解决方案取决于它的级别数 在本例中由m表示

    这种差异很重要的一个例子是当我们有 n(如10)的值较小,m(如10^5)的值较大。在这个 在这种情况下,对m的依赖性对于问题的复杂性非常重要 问题这也是将其表示为O(n+m)的问题,因为 如果在这种情况下m很小,而n很大,那么我们将再次看到a 我提供了对问题复杂性的错误陈述 符号

    然而,Big-O表示法的优点是它代表了 所有情况下的最坏情况,因此O(n+n)的最坏情况与O(n+m)相同 因此它们是相当等价的。在这一点上,它只是一个 关于您希望如何表示对的依赖关系的偏好问题 m作为输入变量(如果您有这样的依赖项)

    当然,如果您不依赖于m作为输入,那么我 认为O(n+n)=>O(n)是对 问题是我给了什么


    什么是“n”?什么是“m”?
    9.2
    9
    内部的嵌套循环,因此它不是这两个循环中的任何一个。此外,一些伪代码项不够清晰,无法确定它们的复杂性