【发布时间】:2017-08-08 00:56:04
【问题描述】:
我正在解决黑客等级的this problem。我解决问题的算法是:
- 获取所有玩家得分的数组。遍历所有玩家得分并创建一个新数组。让一共有n个玩家。
其中不包含任何重复的玩家分数。让我们称新 数组,playerScores。- 设 Alice 要玩的总关卡为 m。
- 让爱丽丝第一轮后的得分为S。
- 让 Alice 的初始等级 R 为 0。
- 从后端开始迭代 playerScores 数组,直到得到分数小于 S 的玩家分数。
- 将 R 设置为在步骤 5 中找到的玩家的排名。
- 将 m 减 1。
- 打印 R.
- 现在开始在循环内处理 Alice 在所有后续 m-1 级别中的分数
- 将 S 设置为 Alice 的下一级分数。
- 从排名为 R-1 的玩家开始向前端迭代 playerScores 数组。
- 继续迭代,直到得到一个分数小于 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) 复杂度公式有缺陷,谁能帮我理解?
【问题讨论】:
-
什么是“n”?什么是“米”?
-
9.2是9内部的一个嵌套循环,所以它不会是其中任何一个。除此之外,一些伪代码项还不够清楚,无法确定它们的复杂性。 -
请注意,图上的算法(带有
n顶点和m = O(n^2)边)通常以n和m而不仅仅是n来指定它们的运行时间。这抓住了算法的运行时间取决于图的密度的想法。这通常是由于需要迭代图的边缘;显然更少的边会导致更快的迭代时间。 -
@GordonLinoff n 是游戏中的玩家数量。这是作为输入。我将所有玩家的分数存储在一个长度为 n 的数组中。
-
@GordonLinoff 我更新了我的算法步骤,现在可以正确展示
n和m。
标签: algorithm time-complexity big-o asymptotic-complexity