zoukankan      html  css  js  c++  java
  • 快速幂&矩阵快速幂

    参考博客,非常感谢大佬的讲解:https://www.cnblogs.com/cmmdc/p/6936196.html

    整数快速幂:

      假设现在需要计算x^8,常规循环做法需要计算7次,但如果转换成 (x^2)^4 则只需要4次即可;

      稍微复杂一些,有 x^19次,19=(10011)₂,因为有 x^a * x^b = x^(a+b);

      故利用位运算可以方便划分以加快计算;

    例如:

     1 int QuickPow(int x,int N)
     2 {
     3     int res = x;
     4     int ans = 1;
     5     while(N)
     6     {
     7         if(N&1)
     8         {
     9             ans = ans * res;
    10         }
    11         res = res*res;
    12         N = N>>1;
    13     }
    14     return ans;
    15 }

    矩阵快速幂:

      首先应该具备基本的关于矩阵的基本性质及运算:https://baike.baidu.com/item/%E7%9F%A9%E9%98%B5/18069?fr=aladdin

      矩阵的快速幂就是把上面的整数改为二维数组,上面的乘法改为矩阵乘法即可;

      特别注意:

        1. 矩阵乘法 a*b 与 b*a 不同,注意顺序;

        2. 初始其中一个是乘数应该为对角矩阵,且对角线上元素全部为1,作用类似于整数1;

    样例:

     1 void Quick_Pow()
     2 {
     3     Matrix tmp;
     4     tmp.w[0][0]=tmp.w[1][1]=1;
     5     tmp.w[0][1]=tmp.w[1][0]=0;
     6     
     7     while(n) {
     8         if(n&1) {
     9             tmp = calculate(matrix, tmp);
    10         }
    11         matrix = calculate(matrix, matrix);
    12         n>>=1;
    13     }
    14 }

      基础知识大概就到这里,可以动手试试一道应用矩阵快速幂的题目:https://www.cnblogs.com/liubilan/p/9450704.html

  • 相关阅读:
    学生管理系统后感
    数据库是什么鬼,怎么连接,怎么搞
    nIce 不看会后悔的o!
    那些年披巾斩浪的数据库
    day82
    day81
    day80
    day79
    day78
    day77
  • 原文地址:https://www.cnblogs.com/liubilan/p/9450568.html
Copyright © 2011-2022 走看看