【发布时间】:2020-03-07 01:39:06
【问题描述】:
这段代码的时间复杂度是多少?
i = n;
while(i > 1) {
j = i;
while (j < n) {
k = 0;
while (k < n) {
k = k + 2;
}
j = j * 2;
}
i = i / 2;
}
我尝试分析这段代码,得到了Log^2n * n 的复杂性,我以 for 循环格式重写了代码,以便更容易看出是这样的。
for (i = n; i > 1; i = i / 2) // log2n + 1
{
for(j = i; j < n; j = j * 2) // log2n + 1
{
for (k = 0; k < n; k = k + 2) // n + 1 times
{
cout << "I = " << i << " J = " << j << " and K = " << k << endl;
}
cout << endl;
}
}
正确吗?如果不是,为什么?我是算法的新手,试图理解但不知道还能问哪里,抱歉。
【问题讨论】:
-
教师的工作不是决定你的作业是否正确吗?
-
是的,但我想在课堂之外理解。如果我已经尽我所能并理解代码的复杂性,因为这不是一个简单的主题,那么在课堂外获得帮助有什么害处吗?
-
如果我们告诉您您的解决方案不正确以及如何解决它,并且您使用它来获得比您在作业中获得的更好的成绩,这是一个问题。首先,你作弊是为了获得更好的成绩。其次,你没有从课堂上学到你应该学到的东西,你的老师也没有得到家庭作业应该提供的反馈。
-
这是考试练习,我没有得到评分。在向某人寻求帮助之前,我在 Youtube 上观看了多个关于该主题的优秀讲师的课外视频,因为我不确定。我知道您可以(并且很可能)成为一名出色的程序员,但每个人都必须从某个地方开始。我敢肯定,您在生活中并非处处都了解编程。我向比我更了解该主题的人寻求帮助,我不能一直与我的导师联系。
-
@Ken 如果他努力理解答案,这不是作弊;至于反馈是教授的问题,而不是他的