关闭

算法提高 矩阵相乘

标签: 蓝桥杯Java
1066人阅读 评论(0) 收藏 举报
分类:

问题描述
  小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容。
  当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的。
  小明希望你来帮他完成这个任务。

  现在给你一个ai行aj列的矩阵和一个bi行bj列的矩阵,
  要你求出他们相乘的积(当然也是矩阵)。
  (输入数据保证aj=bi,不需要判断)
输入格式
  输入文件共有ai+bi+2行,并且输入的所有数为整数(long long范围内)。
  第1行:ai 和 aj
  第2~ai+2行:矩阵a的所有元素
  第ai+3行:bi 和 bj
  第ai+3~ai+bi+3行:矩阵b的所有元素
输出格式
  输出矩阵a和矩阵b的积(矩阵c)
  (ai行bj列)
样例输入
2 2
12 23
45 56
2 2
78 89
45 56
样例输出
1971 2356
6030 7141

import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;

public class Main {

    public static BigInteger[][] Mul(BigInteger[][] A ,int col1,BigInteger[][] B,int col2){
        BigInteger[][] C = new BigInteger[A.length][col2];
        for ( int i = 0 ; i < A.length ; i++){
            for ( int k = 0 ; k < col2 ; k++){
                BigInteger sum = BigInteger.ZERO;
                for ( int j = 0 ; j < col1 ; j++){
                    sum = sum.add(A[i][j].multiply(B[j][k]));
                }
                C[i][k] = sum; 
            }
        }
        return C;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(new BufferedInputStream(System.in));
        int i,j,m,n;
        i = in.nextInt();
        j = in.nextInt();
        BigInteger[][] A = new BigInteger[i][j];
        for ( int a = 0 ; a < i ; a++){
            for ( int b = 0 ; b < j ; b++){
                A[a][b] = new BigInteger(in.next());
            }
        }
        m = in.nextInt();
        n = in.nextInt();
        BigInteger[][] B = new BigInteger[m][n];
        for ( int a = 0 ; a < m ; a++){
            for ( int b = 0 ; b < n ; b++){
                B[a][b] = new BigInteger(in.next());
            }
        }
        BigInteger[][] C = Mul(A, j, B, n);
        for ( int p = 0 ; p < C.length ; p++){
            System.out.print(C[p][0]);
            for ( int q = 1 ; q < n ; q++){
                System.out.print(" "+C[p][q]);
            }
            System.out.println();
        }
        in.close();
    }

}

这里写图片描述

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【蓝桥】算法提高 矩阵乘法

算法提高 矩阵乘法   时间限制:3.0s   内存限制:256.0MB      问题描述   有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a...
  • Puyar_
  • Puyar_
  • 2017-02-05 23:18
  • 1347

算法提高 矩阵相乘

问题描述   小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容。   当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的。   小明希望你来...
  • qq_29656961
  • qq_29656961
  • 2017-01-12 20:01
  • 848

算法提高 矩阵乘法

问题描述   有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算。   两个大小分别为p*q和q...
  • qq_33501079
  • qq_33501079
  • 2017-04-05 23:32
  • 163

2016蓝桥杯算法训练——矩阵乘法

矩阵乘法 问题描述   输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。 输入格式   第一行,空格隔开的三个正整数m,s,n(均不超过200)。   接...
  • qq_21385857
  • qq_21385857
  • 2016-02-10 14:52
  • 1780

矩阵乘法的算法实现 [转载]

一般矩阵乘法算法: 原理:矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的栏数(column)和第二个矩阵的列数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为m×...
  • zhengqijun_
  • zhengqijun_
  • 2016-11-26 23:04
  • 3498

算法提高 矩阵相乘

问题描述   小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容。   当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的。   小明希望...
  • ruby_xc
  • ruby_xc
  • 2017-02-22 14:54
  • 171

矩阵相乘优化算法实现讲解

矩阵相乘算法优化详解!在学习矩阵算法的相关操作时,矩阵相乘是最基础的算法,也是比较简单的算法,但是也是非常重要的算法。
  • ydd97
  • ydd97
  • 2015-08-18 17:27
  • 6846

矩阵乘法优化算法

本篇文章大部分思路与代码都来自于微信公众号“CPP开发者”中2016年4月11日的文章《矩阵相乘优化算法实现讲解》,基本相当于这篇文章的重点重述。 矩阵是什么以及矩阵乘法是怎么操作的,我想点开这篇文...
  • dannis_bh
  • dannis_bh
  • 2016-04-12 22:25
  • 2742

n阶矩阵一般乘法-《算法导论》学习笔记五

A、B两个矩阵均是nxn的矩阵,则两个矩阵的乘法: 一般的矩阵乘法代码:#include #include #include #include #include class Square...
  • u012785877
  • u012785877
  • 2017-03-19 18:29
  • 509

【蓝桥】算法提高 矩阵乘法

算法提高 矩阵乘法   时间限制:3.0s   内存限制:256.0MB      问题描述   有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a...
  • Puyar_
  • Puyar_
  • 2017-02-05 23:18
  • 1347
    个人资料
    • 访问:138596次
    • 积分:4744
    • 等级:
    • 排名:第7079名
    • 原创:327篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论