如何解决算法和数据结构-我是否可以解决这些复杂性问题?
这是我的第一篇文章,对不起,如果我可以做得更好,请告诉tho;)
我目前正在研究算法和数据结构,我们需要计算时间和空间复杂度。由于某种原因,如果我采用正确的方法或完全错误的方法,我会发现它非常困难并且无法获得任何确认/指导。所以我想我可以去这里。
static void f1(int n) {
for (int i = 0; i < n; i++) {
for (int j = i; j < i * i; j++) {
for (int k = 2; k < j; k++) {
System.out.println("*");
}
}
}
}
时间复杂度 所以我不确定上述所有方法是否正确,但是现在步骤是将所有复杂度相乘,因此总复杂度将为Big O(n * i ^ 2 * j),然后将为i ^ 2? 所以,如果我做对了,那将是大O(i ^ 2)时间复杂度。 空间复杂度 提前感谢您的帮助! 亲切的问候
我到目前为止所做的步骤:
第一个for循环的时间复杂度为O(n),因为i
我不太确定如何从空间复杂度入手,但是我猜它只是Big O(j),因为它仅保存函数调用和for循环,即O(1)和最后一个for的打印循环是调用打印线的j-2次。
我完全不确定这是否是正确的思考方式,但如果不正确,对我来说也很好;)
解决方法
您的答案不正确,因为它们提到了变量i
和j
,它们没有出现在输入中。显然,任何正确答案都只能提及n
。
最外面的循环在n
中具有线性的迭代计数,而两个内部循环都具有随n^2
增长的迭代计数,因此嵌套在一起的三个循环为O(n^5)
。由于println
语句的参数与n
是无关的,因此它是O(1)
,因此,由于时间复杂度,我们总共有O(n^5)
。
对于空间复杂度,该函数中仅声明了三个单值计数变量,因此为O(1)
。
最里面的循环的时间复杂度为O(j)
。
现在中间循环有点棘手。它从i
到i^2
运行,并且每次迭代就j
而言都是线性的。您可以将其表示为Sum[i..i^2] j
。这是算术级数的总和。回想一下Sum[a..b] j = O(b^2 - a^2)
。替换限制(a = i,b = i*2
可获得中间循环复杂度O((i^2)^2 - i^2) = O(i^4)
。
最后,外部循环从0
到n
,每次迭代为O(i^4)
。重要的是要知道,度数k
的多项式之和会产生度数k+1
的多项式。这意味着整个功能的时间复杂度为 O(n^5)
。
关于空间复杂度,它不可能是O(j)
,因为j
是一个自由变量。它在函数外部不存在。尝试证明它是O(1)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。