为了账号安全,请及时绑定邮箱和手机立即绑定

用 Big-O 表示法计算运行时间

用 Big-O 表示法计算运行时间

慕尼黑5688855 2021-11-11 13:52:11
1 int sum=0;2 long start = System.currentTimeMillis();3 for (int i = 1; i <= N; i++) {4 for (int j = 1; j <= N; j++) {5 sum=sum+1;}}6 long stop = System.currentTimeMillis();7 long elapsed = (long)(stop - start);我被困在这个问题上我知道线条1,2,5,6 and 7是它们在O(1)恒定时间运行的原始操作。我对我认为的循环有疑问O(n^2)任何人都可以详细说明这一点,谢谢。
查看完整描述

2 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

你是对的,一个 for 循环本身就是 O(n) 因为它的运行时间与输入的大小成线性比例,与第二个循环一起它是 O(n^2) 因为你重复了一个 O(n) 函数n次。


查看完整回答
反对 回复 2021-11-11
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

这是 Reddit 的评论,给出了一些不同 O 运行时的好例子。

关联

在这个场景中,一位老师丢失了他/她的钢笔,并试图找出哪个学生拿走了它。

O(n2):我问一个学生,问他们:“杰夫有钢笔吗?没有?鲍勃有钢笔吗?” 依此类推,为每个学生命名。如果我没有从第一个学生那里得到答案,我就会转到下一个。在最坏的情况下,我需要问 n2 个问题 - 询问每个学生关于其他学生的信息。

O(n):我问每个学生是否有笔。如果没有,我继续下一个。在最坏的情况下,我需要问 n 个问题。

O(log n):我把班级分成两部分,然后问:“是在教室的左边还是右边?” 然后我把那个小组分成两部分,然后再问,依此类推。在最坏的情况下,我需要问 log n 个问题。

我还应该补充一点,O(1) 基本上是在问全班同学“谁拿了我的笔?” 无论班上有多少人,询问谁有笔将花费相同的时间,使其保持不变。


查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信