• 矩阵连乘问题的算法复杂度的计算--卡塔兰数(Catalan数)的数学推导和近似公式


    author: cust-- ZKe

     ---------------------

    这里以连乘积加括号问题为背景:

      由于矩阵的乘积满足结合律,且矩阵乘积必须满足左边矩阵的列数的等于右边矩阵的行数,不同的计算顺序,需要的乘法运算次数不一样。加括号可以改变计算顺序,合理安排计算顺序可以大大降低计算次数。
      给乘积算式加括号的方法数是一个计数问题。它的模型是卡特兰数。
    比如有矩阵A,B,C,D,有五种加括号方式
    ((A*B)*C)*D
    (A*(B*C))*D
    (A*B)*(C*D)
    A*(B*(C*D))
    A*((B*C)*D)
      可见,无论是哪种加括号的方式,总有一个'*'运算符在最外面的括号的外面,以它作为分隔符,就好像是a*b一样只有两个参与运算的乘数,比如A*(B*C*D),而这里的B*C*D同样是一个有待加括号的乘积算式,这就说明,加括号可以作为一个递推问题求解。

      (不会用博客园编辑latex,再次截图编辑的latex.....)

    这样,就引入了卡塔兰数的定义,接下来我们证明该公式。大家只需要掌握《高等数学》的幂级数,柯西乘积,定积分和《离散数学》的牛顿二项式定理,生成函数即可

    这样就证明了该公式,最后我们来求解一下近似公式,毕竟在算法中我们需要估计函数的阶,才能了解算法的复杂度

    这个就更简单了,大家只需要了解斯特林公式即可,它仍然可以在《离散数学》计数问题里面找到

    ----------------------------------------------------------

    CUST, ZKe

  • 相关阅读:
    [ThreadStatic] dosen't work with instance fields
    Java XxlJob 必知必会<续篇>
    Python 数据可视化神器—Pyecharts
    PICT 生成正交测试用例教程
    Hive 分桶表核心知识点
    Python + Flask 实现接口接收内存信息
    数据工程师:必备的 Hive 安装&交互方式技能
    JvmSandboxRepeater 配置修改详解
    JavaDubbo 接口测试
    Hadoop + Hive 数据仓库原理与架构
  • 原文地址:https://www.cnblogs.com/zhaoke271828/p/12625792.html
Copyright © 2020-2023  润新知