算法7-- 二叉树的应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8
优点:
在算法执行过程中,通过建立一个高度为2p 的满二叉树来实现对一个2PX2P的二维数组的动 态说明,p可以是一个变量。可以自由地使用动 态数组。 付出的代价: 数组的说明不再是常数时间可完成的了,它 需耗时O(22P),与矩阵中元素个数成正比。类似 地,对一个元素(i,j)的存取也不再是常数时间的 操作,它耗时O(p),与矩阵中元素个数的对数成 正比。在一般情况下,动态地说明一个m*n矩阵, 耗时O(mn),存取其中的元素耗时O (logm+logn)。
2
A00 A01 B00 B01 C 00 C 01 A10 A11 B10 B11 C 10 C 11 Cij Ai 0 B0 j Ai 1 B1 j( 0 i , j 1 )
图4-22 分块矩阵乘法
容易看出,如果每个子矩阵的乘积 也用上 述方法递归地进行计算,我们便需要使用动 态数组。
3
用二叉树可以解决该问题
设矩阵A、B和C均为n*n矩阵,且n=2p, p>0。当p=0时,n=1,此时A、B和C均 由单个元素组成。假设各矩阵的行、列下 标为0…n-1,而不是1…n。我们用一个高 度为2p的满二叉树来表示每一个2p*2p的 矩将矩阵中的元素存储在这棵满二叉树的 叶结点中,如图所示。
4
在表示矩阵A的满二叉树中,各边的0、1标记 按从上层到下层的次序交替地指示出子矩阵的行 列划分。 例如,A00 和A01的元素在根结点的左子树 中,而A10和A11的元素在根结点的右子树中。
5
一般地,矩阵A的第I行第J列(0≤i,j≤n-1)元素 在满二叉树中的存储位置可按如下方法找到。 首先分别将i和j表示成p位的二进制数
二叉树的应用
树和二叉树在计算机科学中有广泛的 应用。在程序设计语言的编译和符号代数 系统中对表达式进行代数处理。在这里, 我们要讨论二叉树的另外一个应用,即用 二叉树来实现动态数组。
1
wenku.baidu.com
我们不能在一个过程或一个函数中对数 组作动态的说明,如:
Var A:array[l..m] of integer;其中m 是一个变量。 例如:在计算两个 2n*2n 的矩阵 A 和 B 的 积时,我们可以用矩阵分块的方法来递归地 进行计算。我们将 A 和 B 各划分成4个 n*n 的子矩阵,则 A 和 B 的乘积 C=AB 可分 块地表示为如下图所示。
7
二叉树中存储矩阵元素(0,0)的叶结点可沿路径 0000找到;存储矩阵元素(0,3)的结点可沿路径
0101找到;存储矩阵元素(1,1)的结点可沿路径
0011找到;
子矩阵A00由路径00所确定的子树给出;子矩阵A10
由路径10所确定的子树给出;等等。在这种二叉 树表示方式下,很容易对矩阵进行分块处理。 对于任何 0≤ q < p,容易将矩阵划分成的子矩阵。
i i0 i1 ... i p1和j j0 j1 ... j p1
i p 1 j p 1 然后按照二进位串 i0 j0 i1 j1 ...
指示的边的标号序列,从根结点开始搜索到叶 结点,则该叶结点中存储的就是A的第i行第j列 元素。
6
图4—24是当P=2时,一个4X4矩阵 的二叉树表示。
9
相关文档
最新文档