zoukankan      html  css  js  c++  java
  • 矩阵在编程中的一个小应用

     比如我们已经知道f1=1,f2=1,fn=a*fn-2+b*fn-1。用普通方法求fn就是一个循环。从3循环到n,时间复杂度为O(n)。下面用另一种方法求fn的值。

    设矩阵 A =     B = 

    则A*B= * =

    A*A*B = A*(A*B) = *=

    A*A*….*B=A(n-2) *B =    式(1)

    如何求一个数a的b次幂a^b(使用快速幂算法,时间复杂度为lgn)。

    假设b=6,用二制表示就是2^2*1+2^1*1+2^0*0  (6的二进制为110)

    则a^b=a^(2^2+2^1)=a^(2^2)*a^(2^1)  注:A^(x+y)=A^x*A^y

    求a^b的C伪代码

    result=1;

    while(b!=0)

    {

           if(b& 1)

                  result= result*a

           a= a*a;

       b= b>>1;

    }

    利用式1求f(1000)的值,需要进行大概10次的矩阵乘法运算,每次矩阵乘法需要8次乘法运算和4次加算法运算共需要大约120次运算就可以求出f(1000)的值。比原来的1000次运算快了近10倍。构造矩阵主要是为了能够使用快速幂来加快运算。


  • 相关阅读:
    Codeforces Round #274 (Div. 2)
    codeforces 477C
    ZOJ 3822 Domination
    Codeforces Round #271 (Div. 2)
    进程
    线程
    udp和tcp特点 实现文件上传
    面向对象补1
    socket基本语法和粘包
    网络编程
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3214907.html
Copyright © 2011-2022 走看看