big-o - Big-O 运行时间分析(for循环)
问题描述
sum = 0;
for (i = 0; i < m; i++)
for (j = 0; j < i*i; j++)
for (k = 0; k < j; k++)
sum++;
是 (1+2+...+((m-1)^2 -1)+ (m-1)^2) = (m-1)^2 *((m-1)^2 + 1) / 2 = O(m^4) 对吗?如果没有,你能帮我找到真正的解决方案和答案吗?
解决方案
在这里我们有
sum(i=0..m, sum(j=0..i^2, sum(k=0..j, 1))) =
= sum(i=0..m, sum(j=0..i^2, j)) =
= sum(i=0..m, i^2*(i^2 - 1)/2) =
= sum(i=0..m, (i^4 - i^2)/2) =
= sum(i=0..m, (i^4 - i^2))/2
这是O(m^5)
根据Wolfram Alpha的。
看起来您只计算了外循环最后一次迭代的结果。
这是 Wolfram Alpha 的精确计算,再次证明了O(m^5)
结果
推荐阅读
- mysql - 来自具有单个记录的查询的多个结果
- php - 如何执行 getHead 函数
- c - 从 c 文件中读取行并将 int 放入数组中(上一行有一个整数,该整数是下一行具有不同整数的大小
- r - 在 (r)yacas 中象征性地计算 Hessian
- python - numpy:对可变大小数组块中的值进行有效求和
- java - Java单元测试:从公共方法或包私有方法测试
- pyspark - 如何删除pyspark中列标题中的空格以及如何将字符串日期转换为日期时间格式
- c++ - 无论如何在 C++ 中使用编码类型进行编码
- firebase - Firebase Firestore - 基于“where”查询参数的安全规则
- reactjs - 通过所有道具的HOC