ການຫັກລົບຂອງສອງ Matrices


ລະດັບຄວາມຫຍຸ້ງຍາກ Easy
ຖາມເລື້ອຍໆໃນ Capgemini MAQ o9 ວິທີແກ້ໄຂ
Array ມາຕຣິກເບື້ອງ ການຂຽນໂປຼແກຼມໂຮງຮຽນ

ຖະແຫຼງການບັນຫາ

ໃນບັນຫາ“ ການຫັກລົບຂອງສອງ Matrices”, ພວກເຮົາໄດ້ມອບສອງ matrices a ແລະ b. ພວກເຮົາຕ້ອງຊອກຫາຂັ້ນສຸດທ້າຍ matrix ຫຼັງຈາກການຫັກລົບມາຕຣິກເບື້ອງ b ຈາກມາຕຣິກເບື້ອງກ. ຖ້າ ຄຳ ສັ່ງແມ່ນດຽວກັນ ສຳ ລັບທັງສອງມັດທະຍົມຫຼັງຈາກນັ້ນພຽງແຕ່ພວກເຮົາສາມາດຫັກລົບພວກມັນຖ້າບໍ່ດັ່ງນັ້ນພວກເຮົາບໍ່ສາມາດເຮັດໄດ້.

ຮູບແບບການປ້ອນຂໍ້ມູນ

ເສັ້ນ ທຳ ອິດມີ 1 ຄ່າເລກເຕັມ r1, c2, r2, c1. ບ່ອນທີ່ r1 ແລະ c2 ສະແດງ ຈຳ ນວນແຖວແລະຄໍ ລຳ ຂອງຕາຕະລາງ ທຳ ອິດ. ແລະ r2, cXNUMX ສະແດງ ຈຳ ນວນແຖວ, ຄໍ ລຳ ຂອງຕາຕະລາງທີສອງ.

ສາຍ r1 ຕໍ່ໄປມີຄ່າ c1 integer.

ແລະສາຍ r2 ຕໍ່ໄປມີຄ່າ c2 integer.

ຮູບແບບຜົນໄດ້ຮັບ

ພິມຕາຕະລາງສຸດທ້າຍຫຼັງຈາກການຫັກລົບໃນແບບທີ່ທຸກໆແຖວເລີ່ມຈາກເສັ້ນ ໃໝ່ ແລະທຸກໆອົງປະກອບທີ່ແຍກອອກໂດຍຊ່ອງຫວ່າງໃນແຕ່ລະແຖວ.

ຂໍ້ ຈຳ ກັດ

  • 1 <= r1, c1, r2, c2 <= 5000.
  • 1 <= | m [i] [j] | <= 10 ^ 9 ບ່ອນທີ່ m ແມ່ນຕາຕະລາງແລະ ຕຳ ແໜ່ງ ຂອງອົງປະກອບທີ່ແຖວຖັນແລະແຖວ jth.

ຍົກຕົວຢ່າງ

2 2 2 2
2 8
0 9
5 6
11 3
-3 2
-11 6

ຄໍາອະທິບາຍ: ພວກເຮົາສາມາດຊອກຫາການຫັກລົບຂອງ matrices ໂດຍການຫັກລົບລາຍການທີ່ສອດຄ້ອງກັນໃນຕາຕະລາງ C ແລະ D.

ການຫັກລົບຂອງສອງ Matrices

ການຫັກລົບຂອງສອງ Matrices

ການຫັກລົບຂອງສອງ Matrices

ການຫັກລົບຂອງສອງ Matrices

ສູດການຄິດໄລ່ການຫັກລົບຂອງສອງ Matrices

1. ສຳ ລັບແຕ່ລະແຖວໃນສອງ matrices

1.1 ຫັກລົບອົງປະກອບທີ່ກ່ຽວຂ້ອງໃນຕາຕະລາງ B ກັບອົງປະກອບຕ່າງໆໃນ Matrix A.

1.2 ເກັບຮັກສາຜົນໄດ້ຮັບໃນ ຕຳ ແໜ່ງ ດຽວກັນໃນບາງຕາຕະລາງຊ່ວຍ.

2. ຍ້າຍໄປແຖວຕໍ່ໄປແລະປະຕິບັດຕາມຂັ້ນຕອນ 1.1 ແລະ 1.2 ຈົນຈົບມັດທະຍົມຕອນປາຍ.

3. ພິມມາຕຣິກເບື້ອງຊ່ວຍ.

ການປະຕິບັດ

ໂຄງການ C ++ ສຳ ລັບການຫັກລົບສອງ Matrices

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int r1,c1,r2,c2;
    cin>>r1>>c1>>r2>>c2;
    int a[r1][c1];
    int b[r2][c2];
    for(int i=0;i<r1;i++)
    {
        for(int j=0;j<c1;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=0;i<r2;i++)
    {
        for(int j=0;j<c2;j++)
        {
            cin>>b[i][j];
        }
    }
    if(c1!=c2 || r1!=r2)
    {
        cout<<"We can’t subtract these matrices.";
    }
    else
    {
    int c[r1][c2];
    for(int i=0;i<r1;i++)
    {
        for(int j=0;j<c2;j++)
        {
            c[i][j]=a[i][j]-b[i][j];
            cout<<c[i][j]<<"  ";
        }
        cout<<endl;
    }
    }
    return 0;
}

Java Program for subtraction of two Matrices

import java.io.*; 
import java.util.Scanner;
class TutorialCup
{ 
    // Driver code 
    public static void main(String[] args) 
    { 
        int r1,c1,r2,c2;
        Scanner inp = new Scanner(System.in);
        r1 = inp.nextInt();
        c1 = inp.nextInt();
        r2 = inp.nextInt();
        c2 = inp.nextInt();
        int a[][] = new int[r1][c1];
        for(int i=0;i<r1;i++)
        {
            for(int j=0;j<c1;j++)
            {
                a[i][j]=inp.nextInt();
            }
        }
        int b[][] = new int[r2][c2];
        for(int i=0;i<r2;i++)
        {
            for(int j=0;j<c2;j++)
            {
                b[i][j]=inp.nextInt();
            }
        }
        if(r1!=r2 && c1!=c2) 
        { 
            System.out.println("\nWe can’t subtract these matrices."); 
        } 
        else
        {
            int c[][] = new int[r1][c1];
            for(int i=0;i<r1;i++)
            {
                for(int j=0;j<c1;j++)
                {
                    c[i][j]=a[i][j]-b[i][j];
                    System.out.print(c[i][j] + " ");
                }
                System.out.println();
            }
        }
    } 
}
2 2 2 2
2 8 
0 9 
5 6 
11 3
-3  2  
-11  6

ການວິເຄາະຄວາມສັບສົນ ສຳ ລັບການຫັກລົບສອງ Matrices

ຄວາມສັບສົນເວລາ

O (n ^ 2) ບ່ອນທີ່ n ແມ່ນສູງສຸດຂອງ r1 ແລະ c1. ໃນທີ່ນີ້ພວກເຮົາພຽງແຕ່ແລ່ນສອງ loops ຄັ້ງ ທຳ ອິດ loop run r1 ເທື່ອແລະ loop ທີສອງເຮັດວຽກ c1 ເທື່ອ.

ຄວາມສັບສົນໃນອະວະກາດ

O (m ^ 2) ບ່ອນທີ່ m ແມ່ນສູງສຸດຂອງ r1 ແລະ c1. ໃນທີ່ນີ້ພວກເຮົາສ້າງພື້ນທີ່ພິເສດ ສຳ ລັບເກັບຮັກສາຜົນຂອງການຫັກລົບ matrices. ໃນທີ່ນີ້ພວກເຮົາຍັງໄດ້ປະກາດຂະ ໜາດ r1 * c1 ສຳ ລັບການປ້ອນຂໍ້ມູນມາຕຣິກເບື້ອງ ທຳ ອິດແລະຂະ ໜາດ r2 * c2 ສຳ ລັບການປ້ອນຂໍ້ມູນມາຕຣິກເບື້ອງທີສອງ.

ກະສານອ້າງອີງ