Recorrência Linear

Nesse artigo vamos apresentar vários conteúdos produzidos pela comunidade brasileira sobre Recorrência Linear.

Conteúdos em vídeo

Code Marathon

Recorrência Linear - Code Marathon

Com estes vídeos é possível aprender como resolver as seguintes recorrências em O(log(N)).

fib(n) = \begin{Bmatrix} 1 & \text{se} \; n \le 1\\ fib(n-1) + fib(n-2) & \text{se} \; n \gt 1 \end{Bmatrix}

f(n) = \begin{Bmatrix} 1 & \text{se} \; n \le 1\\ 4 \cdot f(n-1) + f(n-2) + 5 & \text{se} \; n \gt 1 \end{Bmatrix}

g(n) = \begin{Bmatrix} 1 & \text{se} \; n = 0\\ 5 \cdot g(n-1) + n^2 +n + 3 & \text{se} \; n \gt 0 \end{Bmatrix}

Video no YouTube

Código da Exponenciação de Matrizes

const int D = 3;
const int MOD = 1000000007;
struct Matriz{
  int mat[D][D];
  int* operator[](int i){
    return mat[i];
  }
  Matriz operator*(Matriz oth){
    Matriz res;
    for(int i=0; i<D; i++){
      for(int j=0; j<D; j++){
        res[i][j] = 0;
        for(int k=0; k<D; k++)
          res[i][j] = (res[i][j]+(mat[i][k]*1LL*oth[k][j])%MOD)%MOD;
      }
    }
    return res;
  }
  Matriz exp(long long e){
    Matriz res;
    for(int i=0; i<D; i++)
      for(int j=0; j<D; j++)
        res[i][j] = (i==j);    
    Matriz base = *this;  
    while(e > 0){
      if(e & 1LL)
        res = res * base;
      base = base*base;
      e = e>>1;
    }
    return res;
  }
};

MaratonUSP

Exponenciação Rápida e Recorrência Linear

Tópicos da aula:

  • Exponenciação Rápida
  • Recorrências Lineares
Video no YouTube

Material Complementar