`
rappy
  • 浏览: 43717 次
  • 性别: Icon_minigender_1
  • 来自: 天涯海角
文章分类
社区版块
存档分类
最新评论

矩阵乘法:计算任给矩阵表达式(乘法)执行的元乘积次数

阅读更多
题见:http://acm.zju.edu.cn/show_problem.php?pid=1094
Sample Input
9
A 50 10
B 10 20
C 20 5
D 30 35
E 35 15
F 15 5
G 5 10
H 10 20
I 20 25
A
B
C
(AA)
(AB)
(AC)
(A(BC))
((AB)C)
(((((DE)F)G)H)I)
(D(E(F(G(HI)))))
((D(EF))((GH)I))

Sample Output
0
0
0
error
10000
error
3500
15000
40500
47500
15125
附代码如下:
public long calculateElementMul(Map<String, int[]> map, String exp)
			throws DataFormatException {
		Stack<String> expStack;
		long times = 0;
		// 0代表括号,1代表一个矩阵,2代表两个矩阵相乘
		int k = 0;
		// 0代表括号中没有矩阵,1代表括号中只有一个矩阵,类推
		int t = 0;
		int left[] = new int[2];
		int right[] = new int[2];
		int index = 0;
		while (exp.length() > 1) {
			expStack = new Stack<String>();
			for (int i = 0; i < exp.length(); i++) {
				String str = exp.substring(i, i + 1);
				expStack.push(str);
				if (str.matches("[A-Z]|([0-9])*")) {
					k++;
					t++;
				} else if (str.matches("\\(|\\)")) {
					if (str.equals(")") && t == 1) {
						expStack.pop();
						String temp = expStack.pop();
						expStack.pop();
						try {
							String pre = expStack.pop();
							if (pre.matches("[A-Z]|([0-9])*")) {
								t++;
								k++;
							}
							expStack.push(pre);
						} catch (EmptyStackException ese) {
						}
						expStack.push(temp);
					} else {
						t = 0;
						k = 0;
					}
				}

				if (k == 2) {
					right = (int[]) map.get(expStack.pop());
					left = (int[]) map.get(expStack.pop());
					if (left[1] != right[0])
						throw new DataFormatException("error");
					map.put(Integer.toString(index), new int[] { left[0],
							right[1] });
					times += left[0] * left[1] * right[1];
					expStack.push(Integer.toString(index));
					index++;
					k--;
					t--;
				}
			}
			StringBuffer sb = new StringBuffer();
			for (String string : expStack) {
				sb.append(string);
			}
			exp = sb.toString();
		}

		return times;
	}

代码只提供核心实现部分.
输入输出控制未提供.
可惜那边没有提供java的解答方式.
看来java在涉及到性能方面的运算时倍受排挤.
分享到:
评论

相关推荐

    KIS7.0_key.rar_矩阵乘法

    这些基本运算为构建更复杂的矩阵表达式提供了基础。 接下来,我们要深入讨论的是矩阵乘法,这是比加减法更为复杂也更为关键的概念。不同于普通数的乘法,矩阵乘法并不总是定义的。两个矩阵A和B可以相乘,当A的列数...

    2.2矩阵乘法1

    相反,如果A是一个2×3矩阵,B是一个3×3矩阵,像例2.4那样,可以计算AB,但不能计算BA,因为矩阵乘法不满足交换律,即AB≠BA。 2.2.2部分讨论了向量-矩阵乘法,这是矩阵乘法的一种特殊情况。当一个1×n行向量与一...

    矩阵乘法的并行化实验报告.pdf

    矩阵乘法的时间复杂度通常为O(n^3),对于两个n×n的矩阵A和B,其乘积C=AB的计算量会随着矩阵规模的增大而迅速增加。 其次,实验报告提到了并行化,这是指将计算任务分散到多个处理器上执行,以减少总计算时间的过程...

    精讲多练matlab习题.docx

    2. 矩阵运算:使用矩阵逆矩阵和矩阵乘法来计算矩阵的结果,学习矩阵逆矩阵的概念和矩阵乘法的使用方法。 知识点:矩阵逆矩阵、矩阵乘法、矩阵运算 线性代数 1. 线性代数:使用inv函数和eye函数来计算矩阵的逆矩阵...

    高中数学 第八课时:矩阵的乘法的概念课件 苏教版选修4-2数学知识.ppt

    - 计算矩阵乘积`AB`,用于求解变换后的坐标或表达式。 - 通过矩阵乘法可以解决图形在一系列连续变换下的新位置。 6. **矩阵与函数关系的变换**: - 曲线在矩阵变换下会得到新的函数解析式,可以通过矩阵乘法找到...

    C#,数值计算,矩阵相乘的源代码与数据可视化

    C#,数值计算,矩阵相乘的源代码与数据可视化。在线性代数中,矩阵在处理不同的概念中扮演着重要的角色。...矩阵乘法定义矩阵乘法,也称为矩阵乘积和两个矩阵的乘法,产生一个矩阵。这是一种二进制运算。

    符号计算篇:7matlab 符号表达式的加减乘除.zip

    5. **乘法**:乘法操作有多种方式,可以直接使用"*",或者使用`.*`(点乘)在向量或矩阵之间进行逐元素乘法。例如,`expr5 = x*y; expr6 = x.*y;`分别表示x和y的乘积以及它们的逐元素乘积。 6. **除法**:除法用"/...

    算法设计与分析矩阵链相乘

    如果两个矩阵A是p*q矩阵,B是q*r矩阵,它们的乘积C=AB是一个p*r矩阵,计算C的所有元素需要执行p*q*r次乘法操作。对于多个矩阵的连乘,矩阵乘法满足结合律,即(AB)(CD) = (A(BC))D = ((AB)C)D,这意味着不论括号如何...

    matlab符号计算:16matlab符号矩阵的四则运算.zip

    "16matlab符号矩阵的四则运算"这个主题将深入探讨如何在MATLAB中对符号矩阵执行加法、减法、乘法和除法操作。下面我们将详细介绍这些运算以及相关的知识点。 首先,要进行符号计算,我们需要使用MATLAB的符号工具箱...

    矩阵连乘积的动态规划算法设计.pdf

    当处理多个矩阵的乘法时,选择正确的计算顺序可以显著减少所需的计算次数,尤其是对于大型矩阵来说,这可以极大地提高计算效率。动态规划是一种解决这类问题的有效方法。 动态规划的核心思想是将复杂问题分解为更小...

    大学数学实验.pdf

    7. 矩阵乘法:在Mathematica中,两个矩阵相乘可以直接使用乘号运算符(*),例如A.B计算矩阵A和B的乘积。 8. 特殊矩阵:文档中提到的IdentityMatrix[n]用于生成n阶单位矩阵;DiagonalMatrix用于生成对角矩阵;Clear...

    符号计算篇:16matlab符号矩阵的四则运算.zip

    符号计算提供了一种精确且灵活的方式来执行加法、减法、乘法和除法,尤其在涉及复杂数学问题时,它可以避免浮点误差,确保结果的精确性。 一、符号变量与符号矩阵的创建 在MATLAB中,我们首先需要定义符号变量来...

    第一章 矩阵1

    - 示例中给出了多个矩阵乘法的计算,如(1)中的两个3x3矩阵相乘得到一个新的3x3矩阵,以及(2)和(4)中的列向量与矩阵的乘积。 - 对于矩阵乘法的计算,我们通常按照元素对应位置的乘积求和来确定结果矩阵的每个元素。...

    选修4-2+矩阵与变换.pdf

    - 矩阵乘法:两个矩阵A和B,若A的列数与B的行数相同,则可以进行矩阵乘法,结果矩阵C的每个元素c_ij是A的第i行与B的第j列对应元素乘积之和。 - 转置:将矩阵中的行换成列,列换成行,得到一个新的矩阵。 2. 矩阵...

    矩阵乘积的运算法则的证明.pdf

    在数学的线性代数领域,矩阵乘法是矩阵理论中的基本运算之一。矩阵乘法具有几个重要的运算法则,这些法则在处理矩阵运算时起着至关重要的作用。以下是矩阵乘法的三个基本法则及其证明: 1. **乘法结合律**:如果A是...

    矩阵连乘问题

    此外,“加括号形式”则要求我们不仅计算结果,还要给出最优的乘法顺序,即用括号表示的乘法表达式。 在实际编程实现中,例如`main.cpp`文件可能包含了计算矩阵连乘的C++代码。这通常包括定义矩阵结构,实现矩阵...

    北航研究生矩阵课程习题及答案

    2. 矩阵乘法:非同阶矩阵不能相乘,两个同阶矩阵相乘,每个元素是对应位置元素的乘积之和。矩阵乘法不满足交换律。 3. 数与矩阵相乘:数乘矩阵,每个元素都乘以该数。 4. 矩阵的转置:将矩阵的行变为列,列变为行,...

    利用MFC实现简单的矩阵运算

    乘法方法则更为复杂,需要两层循环,第一层遍历第一个矩阵的行,第二层遍历第二个矩阵的列,计算每个元素的乘积并累加。 5. **结果显示**:运算完成后,将结果矩阵显示在界面上,可以使用文本框或列表控件来展示。...

    matrixexp:矩阵代数表达式

    "matrixexp"可能就是这样一个库,提供矩阵表达式的构建、求解和优化,方便用户进行复杂的数学计算。 例如,使用matrixexp库,开发者可能可以轻松地执行以下操作: - 初始化矩阵:创建二维数组表示矩阵。 - 矩阵运算...

    16matlab符号矩阵的四则运算.zip

    例如,计算A和B的乘积: ```matlab E = A * B; ``` E会是一个2x2的新符号矩阵,由A和B按矩阵乘法规则计算得到。 5. 符号矩阵的除法: 对于符号矩阵,除法操作稍微复杂些。如果要进行元素级除法,可以使用`./`...

Global site tag (gtag.js) - Google Analytics