首页 > 试题广场 >

矩阵乘法计算量估算

[编程题]矩阵乘法计算量估算
  • 热度指数:71656 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

矩阵乘法的运算量与矩阵乘法的顺序强相关。
例如:

A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵

计算A*B*C有两种顺序:((AB)C)或者(A(BC)),前者需要计算15000次乘法,后者只需要3500次。

编写程序计算不同的计算顺序需要进行的乘法次数。

数据范围:矩阵个数:,行列数:保证给出的字符串表示的计算顺序唯一
进阶:时间复杂度:,空间复杂度:



输入描述:

输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则
计算的法则为一个字符串,仅由左右括号和大写字母('A'~'Z')组成,保证括号是匹配的且输入合法!



输出描述:

输出需要进行的乘法次数

示例1

输入

3
50 10
10 20
20 5
(A(BC))

输出

3500
头像 从8开始倒车
发表于 2020-07-03 19:00:55
输入和输出部分都很常规,我直接写中间的处理过程。 一、前提 假设矩阵乘法的矩阵存在arr_list中,计算的规则存在role_str中。arr_list = [[m,n], [n,p], [p,q]]role_str = (A(BC)) 二、运算 2.1.整体思路 通过对role_str进行逐个字符 展开全文
头像 不会做题的小菜鸡
发表于 2021-12-10 02:38:16
题目分析 题目给出了矩阵的个数n,并紧接着给出n行矩阵的行和列,最后给出一个矩阵相乘的顺序,其中A、B、C等等分别直接对应每一个按顺序输入的矩阵 最终题目要求输出按照既定顺序规定的运算次数 方法一:栈思路处理 实现思路 我们发现在规定的矩阵相乘的顺序中,是由括号所规定的 每次我们读到一 展开全文
头像 牛客834002708号
发表于 2021-08-13 21:44:59
import java.util.*; public class Main {     public static void main(String[] args) { 展开全文
头像 AimerAimer
发表于 2021-12-06 21:19:17
题意:         A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵         计算 展开全文
头像 朱德康
发表于 2022-05-15 12:30:19
1、字符 是左括号,什么也不做 2、字符 是右括号,出栈 3、字符 是非括号,入栈 import java.util.Scanner; import java.util.Stack; // 注意类名必须为&nbs 展开全文
头像 牛客825869540号
发表于 2021-07-17 18:34:19
Python3: 栈 while True: try: n,dic,stk,num = int(input()),{},[],0 for i in range(n): key = chr(ord('A')+i) 展开全文
头像 必不可能秃头
发表于 2022-03-18 19:56:59
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.ne 展开全文
头像 牛客940206908号
发表于 2021-10-10 14:55:02
#计算式的题目,考出入栈处理括号 #先摘抄优秀答案: #按照出入栈处理括号的思路,自己重写如下代码。 while True: try: n = int(input()) mdict = {} for i in range(n): 展开全文
头像 daydayup牛
发表于 2022-03-29 10:50:45
其实这道题抽象一下,我们可以发现它其实就是表达式求值,唯一的问题就是矩阵乘法需要自己定义,还有一个问题就是让输入的字符串和具体的数据如何对应,看代码。 这道题它说的很简单就是总是会有括号,你可以通过括号来判断是否要乘,但下面这个更普适,只要矩阵能够相乘,他可以按乘法结合律从左至右,不需要括号。 这道 展开全文
头像 Python_zhang
发表于 2022-01-24 11:40:12
#include <stdio.h> #include <string.h> //录入矩阵 //右括号与计算次数相匹配 int main(){ int n; while(scanf("%d",&n)!=EOF){ int edge[n][2]; for(int 展开全文

问题信息

难度:
315条回答 33455浏览

热门推荐

通过挑战的用户

查看代码