ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Matrix Chain Multiplication using Dynamic Programming Formula

2022-04-12 21:35:50  阅读:181  来源: 互联网

标签:出栈 Matrix Chain 矩阵 Dynamic 括号 序列 卡特兰 前缀


Matrix Chain Multiplication using Dynamic Programming Formula

what is matrix multiplication

image-20220411112259682

  • 做矩阵相乘的前提是第一个矩阵的列必须和第二个矩阵的行相等。

  • 结果的矩阵的dimension是2×2( first row × second column)

  • 我做了2×3×2次乘法 first row ×(first column/second row)× second column

What is matrix chain Multiplication

image-20220412191143169

这个问题不关心内部是如何计算的,我只在乎为了计算他们我花费了多少次乘法运算。

How to use DP Formula

image-20220412191548686

卡特兰数:规定h(0)=1,而h(1)=1,h(2)=2,h(3)=5,h(4)=14,h(5)=42,h(6)=132,h(7)=429,h(8)=1430,h(9)=4862,h(10)=16796,h(11)=58786,h(12)=208012,h(13)=742900,h(14)=2674440,h(15)=9694845·····················

通项公式为:

image-20220412192003400

作者:力扣(LeetCode)
链接:https://zhuanlan.zhihu.com/p/97619085

2.1 进出栈序列

这是一道 最经典 的入门级卡特兰数题目,如果能把这题看懂,相信后面的题目也能迎刃而解。

题目描述

n 个元素进栈序列为:1,2,3,4,...,n,则有多少种出栈序列。

思路

我们将进栈表示为 +1,出栈表示为 -1,则 1 3 2 的出栈序列可以表示为:+1 -1 +1 +1 -1 -1。

img

根据栈本身的特点,每次出栈的时候,必定之前有元素入栈,即对于每个 -1 前面都有一个 +1 相对应。因此,出栈序列的 所有前缀和 必然大于等于 0,并且 +1 的数量 等于 -1 的数量。

接下来让我们观察一下 n = 3 的一种出栈序列:+1 -1 -1 +1 -1 +1。序列前三项和小于 0,显然这是个非法的序列。

如果将 第一个 前缀和小于 0 的前缀,即前三项元素都进行取反,就会得到:-1 +1 +1 +1 -1 +1。此时有 3 + 1 个 +1 以及 3 - 1 个 -1。

因为这个小于 0 的前缀和必然是 -1,且 -1 比 +1 多一个,取反后,-1 比 +1 少一个,则 +1 变为 n + 1 个,且 -1 变为 n - 1 个。进一步推广,对于 n 元素的每种非法出栈序列,都会对应一个含有 n + 1 个 +1 以及 n - 1个 -1 的序列。

如何证明这两种序列是一一对应的?

假设非法序列为 A,对应的序列为 B。每个 A 只有一个"第一个前缀和小于 0 的前缀",所以每个 A 只能产生一个 B。而每个 B 想要还原到 A,就需要找到"第一个前缀和大于 0 的前缀",显然 B 也只能产生一个 A。

img

每个 B 都有 n + 1 个 +1 以及 n - 1 个 -1,因此 B 的数量为 [公式] ,相当于在长度为 2n 的序列中找到n + 1个位置存放 +1。相应的,非法序列的数量也就等于 [公式]

出栈序列的总数量共有 [公式] ,因此,合法的出栈序列的数量为 [公式]

此时我们就得到了卡特兰数的通项 [公式] ,至于具体如何计算结果将会在后面进行介绍。

2.2 括号序列

题目描述

n 对括号,则有多少种 “括号匹配” 的括号序列

img

思路

左括号看成 +1,右括号看成 -1,那么就和上题的进出栈一样,共有 [公式] 种序列。

Example

image-20220412202033167 image-20220412202906856

这里举个例子

c[1,1] = 0这里是因为:1≤k<1

image-20220412203138963

没有大于等于1又小于1的k所以这里是0

c[1,2]

image-20220412203800254

可以计算,这里1≤k<2,所以这里k可以取一个值1

image-20220412204114092

image-20220412205237499

image-20220412205806725

如何确定括号的序列?

首先先看右上角的那个数字,是3,我们确定了刚开始括起来的位置就是3这个地方。

image-20220412210026235

再看[1,3]的那个格子,是1,所以在1的地方加括号

image-20220412210637859

image-20220412210654425

标签:出栈,Matrix,Chain,矩阵,Dynamic,括号,序列,卡特兰,前缀
来源: https://www.cnblogs.com/MyBlogForRecord/p/16137330.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有