这里总结一些最常见计算的计算复杂度(常见意义上的):
矩阵相乘:
§ 最原始的方法: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))
排序:
§ quicksort:O(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 cpx中FMM的计算复杂度是错误的,应该是O(N^1.5),而MLFMA(多层快速多极子)才是O(NLog(N))
文献参见原文的跟贴.