复杂度计算

Posted oliveQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复杂度计算相关的知识,希望对你有一定的参考价值。

复杂度计算和线性代数补充

矩阵结构和算法复杂度

  • 定义Flop Count

    • 浮点运算(浮点运算):两个浮点数的一个加法、减法、乘法或除法。
    • 估计算法的复杂性:将flop数表示为问题维数的(多项式)函数,并通过只保留前导项
    • 不是计算时间的准确预测器,支持读写,并行计算
    • 是近似估计
  • 举例

    • x , y ∈ R n , x T y = ∑ i x i y i    ⟹    n + ( n − 1 ) = 2 n − 1    ⟺    O ( n ) x,y\\isin R^n,x^Ty=\\sum_ix_iy_i\\implies n+(n-1)=2n-1\\iff O(n) x,yRnxTy=ixiyin+(n1)=2n1O(n)
    • A ∈ R m × n , x ∈ R n , A x    ⟹    m ( 2 n − 1 )    ⟺    O ( m n ) = m = n O ( n 2 ) A\\isin R^m\\times n,x\\isin R^n,Ax\\implies m(2n-1) \\iff O(mn)\\xlongequalm=n O(n^2) ARm×nxRnAxm(2n1)O(mn)m=n O(n2)
    • A ∈ R m × n , B ∈ R n × p , A B    ⟹    m p ( 2 n − 1 )    ⟺    O ( m n p ) = m = n = p O ( n 3 ) A\\isin R^m\\times n,B\\isin R^n\\times p,AB\\implies mp(2n-1) \\iff O(mnp)\\xlongequalm=n=p O(n^3) ARm×nBRn×pABmp(2n1)O(mnp)m=n=p O(n3)

    当A是稀疏,Banded,Toeplitz等状态下可以被分解,简化复杂度。

  • 特例:线性等式【Ax=b】

    • A是对角阵, O ( n ) O(n) O(n)

    • A是下三角阵, O ( n 2 ) O(n^2) O(n2)

    • A是正交矩阵orthogonal matrices, O ( n 2 ) O(n^2) O(n2)

    • A是置换(全错排)矩阵permutation matrices, O ( 0 ) O(0) O(0)

用分解矩阵求解线性方程Ax=b

  • 矩阵A可以由一些简单的矩阵组合得到, A = A 1 A 2 . . . A k , A i A=A_1A_2...A_k,A_i A=A1A2...AkAi可能是对角矩阵,上三角矩阵等
  • 求解x可以通过传递求解k个简单的等式
  • 整个x向量有m个未知数待求

简化Ax=b求解的复杂度

LU分解–A是非奇异矩阵

  • 简单得说就是先用矩阵L做消元,然后再左乘 L − 1 L^-1 L1
    比如

  • 于是L矩阵就是 [ 1 0 − 3 1 ] , A = L − 1 L A = L ′ U ′ \\beginbmatrix 1 & 0 \\\\ -3 & 1 \\endbmatrix,A=L^-1LA=L'U' [1301]A=L1LA=LU

注 : L ′ = L − 1 , U ′ = L A = [ 1 2 0 − 2 ] 注:L'=L^-1,U'=LA=\\beginbmatrix 1 & 2 \\\\ 0 & -2 \\endbmatrix L=L1,U=LA=[1022]

  • 对于需要多步消元的矩阵A,可以转化为 A = L 1 − 1 . . . L n − 1 − 1 ⏟ 下三角矩阵 L n − 1 . . . L 1 A ⏟ 上三角矩阵 = L ′ U ′ A=\\underbraceL_1^-1...L_n-1^-1_\\text下三角矩阵\\underbraceL_n-1...L_1A_\\text上三角矩阵=L'U' A=下三角矩阵 L11...Ln11上三角矩阵 Ln1...L1A=LU

  • 计算复杂度:每一k行都需要相乘和相加,于是第k行的flop=2(n-k+1)(n-k)

F l o p C o u n t = ∑ k = 1 n − 1 2 ( n − k + 1 ) ( n − k ) Flop Count=\\sum_k=1^n-12(n-k+1)(n-k) FlopCount=k=1n12(nk+1)(nk)

= 2 ∑ k = 1 n − 1 ( n − k ) 2 + ∑ ( n − k ) ⏟ 可忽略 =2\\sum_k=1^n-1(n-k)^2+\\underbrace\\sum(n-k)_\\text可忽略 =2k=1n1(nk)2+可忽略以上是关于复杂度计算的主要内容,如果未能解决你的问题,请参考以下文章

计算时间复杂度[重复]

拟牛顿条件

线性代数之——正定矩阵

matlab 判断矩阵是正定半正定还是负定

matlab 判断矩阵是正定半正定还是负定

EM算法(转)