级联矩阵算法和可能的二叉树数量有什么关系?
What is the relationship between the concatenated matrix algorithm and the number of possible binary trees?
表示n个矩阵相乘时,可能的情况数P(n)
等于C(n-1)
。 (C是加泰罗尼亚数)此时,C(n)
就说是n个节点可以创建的不同二叉树的个数。我没有认知理解。如果你能解释一下,我将不胜感激。
请解释为什么n矩阵乘法n-1个结点能做出的二叉树的个数和n矩阵乘法的例数一样
了解需要 2 个步骤:
第1步:N个矩阵相乘的不同方式的数量是完整个有N个叶子的二叉树的数量。
请注意,“完整”二叉树是其中每个节点都有 0 或 2 children。
矩阵乘法不可交换,所以矩阵必须按原来的顺序相乘。每个案例都可以这样形成:
- 按顺序写下所有矩阵
- 重复将两个相邻的矩阵或中间乘积相乘,直到只剩下一个。
并非所有执行此操作的方法实际上都是不同的。例如:
ABCDE -> (AB)CDE -> (AB)C(DE) -> (ABC)(DE) -> (ABCDE)
包括与以下完全相同的乘法:
ABCDE -> ABC(DE) -> (AB)C(DE) -> (ABC)(DE) -> (ABCDE)
在这两种情况下,我们都生产产品 AB 和 DE。先做哪一个并不重要,因为我们以相同的方式组合它们。
您可以将任何不同的情况映射为二叉树,其中每个内部节点都是一个乘积,而叶子是原始矩阵。以上案例的树是:
*
/ \
* \
/ \ \
* C *
/ \ / \
A B D E
树显示了哪些矩阵对形成的每个乘积有贡献,与我们实际执行它们的顺序无关,因此每个不同的树实际上是矩阵相乘的不同方式。
第二步:有N个叶子的完全二叉树的个数就是有N-1个节点的二叉树的个数
对于任何有 N 个叶子的完全二叉树,都有 N-1 个内部节点——每对相邻叶子之间有一个。这些节点本身形成一个(不一定是完整的)二叉树。上面树中的 * 节点就是一个例子。
对于任何具有N-1个节点的二叉树,只有一种方法可以连接N个叶子以形成一棵完整的树。原来的树有N个空闲位置children,所以你要全部填满
因此,具有N个叶子的完全二叉树的数量等于具有N-1个节点的二叉树的数量,因为这些事物之间存在one-to-one对应关系。
表示n个矩阵相乘时,可能的情况数P(n)
等于C(n-1)
。 (C是加泰罗尼亚数)此时,C(n)
就说是n个节点可以创建的不同二叉树的个数。我没有认知理解。如果你能解释一下,我将不胜感激。
请解释为什么n矩阵乘法n-1个结点能做出的二叉树的个数和n矩阵乘法的例数一样
了解需要 2 个步骤:
第1步:N个矩阵相乘的不同方式的数量是完整个有N个叶子的二叉树的数量。
请注意,“完整”二叉树是其中每个节点都有 0 或 2 children。
矩阵乘法不可交换,所以矩阵必须按原来的顺序相乘。每个案例都可以这样形成:
- 按顺序写下所有矩阵
- 重复将两个相邻的矩阵或中间乘积相乘,直到只剩下一个。
并非所有执行此操作的方法实际上都是不同的。例如:
ABCDE -> (AB)CDE -> (AB)C(DE) -> (ABC)(DE) -> (ABCDE)
包括与以下完全相同的乘法:
ABCDE -> ABC(DE) -> (AB)C(DE) -> (ABC)(DE) -> (ABCDE)
在这两种情况下,我们都生产产品 AB 和 DE。先做哪一个并不重要,因为我们以相同的方式组合它们。
您可以将任何不同的情况映射为二叉树,其中每个内部节点都是一个乘积,而叶子是原始矩阵。以上案例的树是:
*
/ \
* \
/ \ \
* C *
/ \ / \
A B D E
树显示了哪些矩阵对形成的每个乘积有贡献,与我们实际执行它们的顺序无关,因此每个不同的树实际上是矩阵相乘的不同方式。
第二步:有N个叶子的完全二叉树的个数就是有N-1个节点的二叉树的个数
对于任何有 N 个叶子的完全二叉树,都有 N-1 个内部节点——每对相邻叶子之间有一个。这些节点本身形成一个(不一定是完整的)二叉树。上面树中的 * 节点就是一个例子。
对于任何具有N-1个节点的二叉树,只有一种方法可以连接N个叶子以形成一棵完整的树。原来的树有N个空闲位置children,所以你要全部填满
因此,具有N个叶子的完全二叉树的数量等于具有N-1个节点的二叉树的数量,因为这些事物之间存在one-to-one对应关系。