最常见的一些算法复杂度

news/2024/7/6 1:26:36 标签: 算法, matrix, fft, 优化

这里总结一些最常见计算的计算复杂度(常见意义上的)

矩阵相乘:

 

§       最原始的方法:2*n^3+n^2=O(N^3)

§       Strassen算法O(N^(Log2^7))

§       Winograd&Coppersmith:O(N^2.37)


矩阵向量相乘:

 

§       原始方法:O(N^2)

矩阵方程求解:

 

§       高斯消去:O(N^3) [正向迭代:O(N^3),反向迭代:O(N^2)]

§       完全矩阵LU分解:O(N^2) [正向迭代:O(N^2),反向迭代:O(N^2)]

§       带状矩阵LU分解:O(M*N) (M为带宽)

§       三对角阵LU分解:O(N)

矩阵求逆:

 

§       与矩阵相乘类似(三种结果)

有限元法:

 

§       二维有限元LU分解:O(N^(3/2))

§       三维有限元LU分解:O(N^2)

§       二、三维有限元迭代算法(CG/BCG)O(N)

时域有限差分:

 

§       二维FDTD(确定时间T)O(N^(3/2))

§       三维FDTD(确定时间T)O(N^(4/3))

排序:

 

§       quicksortO(N*Log(N))

§       bucketsort:O(N) (最好的情况)


FFT
O(N*Log(N))
快速多极子FMM O(N*Log(N))

大多基于二叉树的算法都可以优化O(N*Log(N))

[有待补充]

参考文献:
GH Golub/van Loan "Matrix Computations", 1989
PC Hansen "Rank-Deficient and Discreate Ill-Posed Problems", 1998
WC Chew "Waves and Fields in inhomogeneous Media", 1990

多谢kimbtsing@yahoo.com.cn的建议,发现在computational cpxFMM的计算复杂度是错误的,应该是O(N^1.5),而MLFMA(多层快速多极子)才是O(NLog(N))
文献参见原文的跟贴.


http://www.niftyadmin.cn/n/1374570.html

相关文章

机器学习-评估方法与性能度量

学习模型的泛化能力需要进行评估,现将主要的评估方法和性能度量总结如下 评估方法 留出法(hold-out) 将数据集D划分为互斥的两部分,一个作为训练集S,另一个作为测试集T,其中T的规模大约为D的1/5到1/3。该法…

Java日记(2)

方法篇 Java的方法等同于c语言的函数,稍有些不同,如下: public class Test5 {static void myPrint(){System.out.println("12345");}static void putA(int a){System.out.println("a "a);}public static void main(St…

Java 开发人员标准配置

现在对于 Java 开发人员,我觉得如下的工具可以说是一个标准配置: 1、Eclipse 以及集成在其中的各种工具。 2、Tomcat/Jetty 或者 JBoss/JOnAS 3、Ant 4、CVS 5、JUnit/HttpUnit/Cactus 6、Bugzilla 或其它 Bug Tracking 系统。如果能基于 Java 是最好的&…

Java日记(3)

封装类,可以联想以下c语言的结构体;定义类,定义其属性、方法的过程称为封装类。 class Students {int age;String name;//Java中没有char,所以字符型用Stringdouble score;//上面定义了数据,以下要定义方法void intro…

分享spring、spring boot、spring cloud一些学习资源,从基础知识到项目实战

1、spring注解驱动开发,学习spring boot和spring cloud必备知识 链接: https://pan.baidu.com/s/1xhULzLlpkERhoMi1G5Lgfg 密码: mfw1 2、尚硅谷springboot视频,建议先学习第一个,因为springboot是全部使用注解的。 链接: https://pan.baidu.…

Java日记(4)

this关键字特点: 1、在类的方法中,使用this关键字代表的是调用此方法的对象的引用。2、this可以看做是一个变量,它的值是当前对象的引用(也就是把this看作一个引用该方法的对象,跟特点1性质差不多)3、使用…

心要安静

弱水只取一瓢饮 不可忘记东南西北,静下来写一些真正有用的东西才是最重要的!!切记

Java日记(5)

包: 在一个类中如何让使用其他包中的公开类: 1、可以把此过程想象成一个寻地址的过程,即在要使用的类前加上完整包名 2、使用import来导包(在eclipse中,光标移至类名处并按ctrlshifto,直接导包)…