版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010026215/article/details/86296122
解决问题方法的效率与数据的组织结构、空间利用效率、算法巧妙程度有关。
数据结构问题比较好的示例是图书馆摆放书籍问题
空间复杂度例子:
循环打印n和递归打印 当n等于100000时会发现递归报错,为什么?
递归导致空间不足
时间复杂度例子:
多项式计算 普通算法和秦九韶算法对比
public class TestForAndRecursion {
public static void main(String[] args) {
// long num = 100000;
// long start = System.currentTimeMillis();
// for (int i = 0; i < num; i++) {
// System.out.print(i);
// }
// System.out.println();
// System.out.println("for loop cost time : " + (System.currentTimeMillis() - start));
// long start1 = System.currentTimeMillis();
// printNum(num);
// System.out.println();
// System.out.println("recursion cost time : " + (System.currentTimeMillis() - start1));
long start1 = System.currentTimeMillis();
double sum = 0;
for (int i = 0; i < 100000; i++) {
sum = caculateMulti(55, 3);
}
System.out.println();
System.out.println("for caculate multi value : " + sum);
System.out.println("for caculate multi cost time : " + (System.currentTimeMillis() - start1));
long start2 = System.currentTimeMillis();
double sum1= 0;
for (int i = 0; i < 100000; i++) {
sum1 = caculateMultiQin(55, 3);
}
System.out.println();
System.out.println("for caculate multi qinjiu value : " + sum1);
System.out.println("for caculate multi qinjiu cost time : " + (System.currentTimeMillis() - start2));
}
private static void printNum (long num) {
System.out.print(num);
if (num - 1 >= 0) {
num = num - 1;
printNum(num);
}
}
/**
* 多项式计算 笨方法
* @param total
* @param num
* @return
*/
private static double caculateMulti(int total, double num) {
double myconst = 10;
double sum = myconst;
for (int i = 1; i <= total; i++) {
sum += myconst * Math.pow(num, i);
}
return sum;
}
/**
* 多项式计算 秦九韶算法
* @param total
* @param num
* @return
*/
private static double caculateMultiQin(int total, double num) {
double myconst = 10;
double sum = (num + 1);
for (int i = total - 1; i > 0; i--) {
sum = sum * num + 1;
}
return sum * myconst;
}
}
结果: