zoukankan      html  css  js  c++  java
  • 矩阵乘法模板

          首先,复习一下矩阵运算,运算为c[x,y]:=a[x,i]*b[i,y],也就是说答案矩阵的第 i行第j个数就是a矩阵第i行所有数与b矩阵第j列所有数一一对应相乘的和。

    实现为程序语言:

    function mul(a,b:matrix; l,m,n,modnum:int64):matrix;
    var
      c:matrix;
    begin
      fillchar(c,sizeof(c),0);
      for i:=1 to l do
        for j:=1 to m do
          for k:=1 to n do
          inc(c[i,j],((a[i,k]mod modnum)*(b[k,j] mod modnum)mod modnum));
      exit(c);
    end;

          清楚了构造,复习的时候还是很容易看懂自己以前的程序的,然后就是矩阵的快速幂乘法了,只有二分了之后,矩阵才起到了优化的效果: 

    function power(a:matrix; l,m,n,x,modnum:int64):matrix;
    var
      i,j,k:longint;
    begin
      if x=1 then exit(a);
      power:=power(a,l,m,n,x shr 1,modnum);
      power:=mul(power,power,l,m,n,modnum);
      if x and 1=1 then power:=mul(power,a,l,m,n,modnum);
    end;

          至于矩阵的创立,主要就是靠观察的吧,相比来说,比Dp简单多了,只要吧两个矩阵列出来,还是比较容易找出其关系式的,然后就建立矩阵了,此外,矩阵优化的矩阵一般都是N*N的,这样比较方便,如果不是,在外面加几排0效果还是一样的。

    愿你出走半生,归来仍是少年

  • 相关阅读:
    Do you want a timeout?
    [整]常用的几种VS编程插件
    [转]Windows的窗口刷新机制
    [整][转]Invoke和BeginInvoke的使用
    [整]C#获得程序路径
    [转]Visual Studio 2010 单元测试目录
    飞秋的实现原理
    面向对象的七大原则
    [转]玩转Google开源C++单元测试框架Google Test系列
    [转]C#中的Monitor类
  • 原文地址:https://www.cnblogs.com/forever97/p/3427641.html
Copyright © 2011-2022 走看看