2025年数据结构(六)什么是好的算法

数据结构(六)什么是好的算法数据结构 六 什么是好的算法 要点 好的算法的最坏复杂度低 思考 如何降低复杂度 01 什么是复杂度 复杂度分为时间复杂度和空间复杂度 时间复杂度是 T n 空间复杂度是 S n 时间复杂度可以简单视为函数实现目标过程中执行的乘除法次数 空间复杂度可以简单视为函数实现目标过程中占用的系统内存 02

大家好,我是讯享网,很高兴认识大家。

数据结构(六)什么是好的算法

要点:好的算法的最坏复杂度低

思考:如何降低复杂度


讯享网

01 什么是复杂度

  • 复杂度分为时间复杂度和空间复杂度
    • 时间复杂度是T(n),空间复杂度是S(n)
    • 时间复杂度可以简单视为函数实现目标过程中执行的乘除法次数
    • 空间复杂度可以简单视为函数实现目标过程中占用的系统内存

02 例子:递归和多项式

1.空间复杂度是S(n)

例子:递归

  • 循环,设for循环占用的空间为N,则S(n)=N;
public static void printN1(int n) { for (int i = 1; i <= n; i++) { System.out.println(i); } } 

讯享网
  • 递归,设函数占用的空间为N,函数执行的次数为C次,则S(n)=CN;所以递归的空间复杂度随调用次数线性增加
讯享网public static void printN2(int n) { while (n>0) { printN2(n-1); System.out.println(n); return; } } 
  • 当递归执行10万次时,报错且程序终止,是因为当一个函数在调用的时候,会把函数的参数记录在栈空间(简单理解为系统空间),栈的空间是有序的,函数调用次数过多导致栈空间爆满,程序就终止了。
Exception in thread "main" java.lang.StackOverflowError 

2.时间复杂度是T(n)

例子:多项式

  • 循环,设for循环了n次,每次循环执行i(i的值为0到n)乘法,则T(n)=(n²+n)/2;
讯享网public static double f1(int n,double[] a,double x) { double rs=a[0]; for (int i = 1; i < a.length; i++) { rs+=a[i]*Math.pow(x, i); } return rs; } 
  • 循环,设for循环了n次,每次循环执行1次乘法,则T(n)=n;
public static double f1(int n,double[] a,double x) { double rs=a[0]; for (int i = 1; i < a.length; i++) { rs+=a[i]*Math.pow(x, i); } return rs; } 

03 我的总结

  • 算法的优劣一般就看复杂度,平均复杂度和最坏复杂度,但平均复杂度不容易计算,一般都是计算最坏复杂度,且平均复杂度<=最坏复杂度
  • 时间复杂度过高运行时间过久,数据量越大越要考虑好T(n),空间复杂度过高会导致系统终止,这都是不被允许的
小讯
上一篇 2025-03-17 13:44
下一篇 2025-01-19 08:26

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/50094.html