Monóides e o Algoritmo de Exponenciaçãoschultz/maratona-ufsc/slides/... · 2010. 5. 14. · Mon...

23
Mon´ oides e o Algoritmo de Exponencia¸c˜ ao Mon´ oides e o Algoritmo de Exponencia¸c˜ ao Lu´ ıs Fernando Schultz Xavier da Silveira Departamento de Inform´atica e Estat´ ıstica - INE - CTC - UFSC 12 de maio de 2010

Transcript of Monóides e o Algoritmo de Exponenciaçãoschultz/maratona-ufsc/slides/... · 2010. 5. 14. · Mon...

  • Monóides e o Algoritmo de Exponenciação

    Monóides e o Algoritmo de Exponenciação

    Lúıs Fernando Schultz Xavier da Silveira

    Departamento de Informática e Estat́ıstica - INE - CTC - UFSC

    12 de maio de 2010

  • Monóides e o Algoritmo de Exponenciação

    Conteúdo

    1 MonóidesDefiniçãoPropriedadesExemplos

    2 Produtórios e Exponenciação em MonóidesDefiniçãoPropriedades

    3 O Algoritmo de ExponenciaçãoEnunciadoProva de CorretudeAnálise da ComplexidadeImplementação

    4 AplicaçõesExponenciação ModularCálculo Eficiente dos Números de Fibonacci

  • Monóides e o Algoritmo de Exponenciação

    Monóides

    Definição

    Definição

    DefiniçãoSeja M um conjunto e · : M →M uma função. Dizemos que (M, ·) é ummonóide se as seguintes propriedades forem satisfeitas:

    · é associativa.Existe um elemento 1 ∈M tal que, para todo x ∈M , 1 · x = x · 1 = x.

  • Monóides e o Algoritmo de Exponenciação

    Monóides

    Propriedades

    Propriedades

    Proposição (Unicidade da Unidade)

    Seja (M, ·) um monóide e 1, 1′ ∈M tais que, para todo x ∈M ,1 · x = x · 1 = 1′ · x = x · 1′ = x. Então 1 = 1′.

    Demonstração.

    Temos que 1 · 1′ = 1 e 1 · 1′ = 1′, logo 1 = 1′.

    Com isso podemos definir a unidade de um monóide.

  • Monóides e o Algoritmo de Exponenciação

    Monóides

    Exemplos

    Exemplos

    São exemplos de monóides:

    (R, ·) onde 1 = 1.(Z, +) onde 1 = 0.

    (R2×2, ·), onde 1 =»1 00 1

    –.

    (Σ∗, ·), onde 1 = ε.(F(A, A), ◦), onde 1(x) = x.(L(A, A), ◦), onde 1(x) = x.(B(A, A), ◦), onde 1(x) = x.(2A,∪), onde 1 = {}.(2A,∩), onde 1 = A.(2A,⊕), onde 1 = {}.

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Definição

    Produtórios e Exponenciação em Monóides

    DefiniçãoSeja (M, ·) um monóide e f : Z→M uma função. Definimos indutivamente

    bYi=a

    f(i) =

    8>:1, b < a

    f(a) ·

    bY

    i=a+1

    f(i)

    !, senão,

    onde a, b ∈ Z.

    DefiniçãoSeja (M, ·) um monóide, k ∈ N um número natural e x ∈M um elementoqualquer. Definimos

    xk =

    k−1Yi=0

    x.

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Propriedades

    Propriedades dos Produtótios em Monóides

    ProposiçãoSeja (M, ·) um monóide, f : Z→M uma função e a, c, b ∈ Z númerosinteiros satisfazendo a 6 c 6 b. Então

    c−1Yi=a

    f(i)

    b−1Yi=c

    f(i)

    !=

    b−1Yi=a

    f(i).

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Propriedades

    Propriedades dos Produtótios em Monóides

    Demonstração.Por indução em c− a. No caso base a = c, logo

    c−1Yi=a

    f(i)

    b−1Yi=c

    f(i)

    !=

    a−1Yi=a

    f(i)

    b−1Yi=a

    f(i)

    !

    = 1 ·

    b−1Yi=a

    f(i)

    !

    =

    b−1Yi=a

    f(i).

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Propriedades

    Propriedades dos Produtótios em Monóides

    Demonstração.Para o passo indutivo, assuma a < c. Portanto

    c−1Yi=a

    f(i)

    b−1Yi=c

    f(i)

    !=

    f(a) ·

    c−1Y

    i=a+1

    f(i)

    !!·

    b−1Yi=c

    f(i)

    !

    = f(a) ·

    c−1Y

    i=a+1

    f(i)

    b−1Yi=c

    f(i)

    !!

    = f(a) ·

    b−1Y

    i=a+1

    f(i)

    !=

    b−1Yi=a

    f(i).

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Propriedades

    Propriedades da Exponenciação em Monóides

    Corolário.Seja (M, ·) um monóide, x ∈M um elemento qualquer e m, n ∈ N númerosnaturais. Então

    xm+n = xm · xn.

    Demonstração.

    xm · xn =

    m−1Yi=0

    x

    n−1Yi=0

    x

    !=

    m−1Yi=0

    x

    0@(m+n)−1Yi=m

    x

    1A = (m+n)−1Yi=0

    x

    = xm+n.

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Propriedades

    Propriedades da Exponenciação em Monóides

    ProposiçãoSeja (M, ·) um monóide, x ∈M um elemento qualquer e m, n ∈ N númerosnaturais. Então

    (xm)n = xmn.

    Demonstração.A prova será por indução em n. Para n = 0 o resultado é trivial.Seja n ∈ N qualquer e assuma que (xm)n = xmn. Então

    (xm)(n+1) = (xm)n · (xm)1 = xmn · xm = xmn+m = xm(n+1).

  • Monóides e o Algoritmo de Exponenciação

    Produtórios e Exponenciação em Monóides

    Propriedades

    Propriedades da Exponenciação em Monóides

    Como uma observação final, note que 0x é 1 para todo x. Inclusive, 00 = 1.

  • Monóides e o Algoritmo de Exponenciação

    O Algoritmo de Exponenciação

    Enunciado

    Enunciado

    Seja (M, ·) um monóide, x ∈ M em elemento qualquer e k ∈ N um númeronatural. Considere então o seguinte algoritmo:

    exp(x, k)

    0 a, n, p← x, k, 11 enquanto n 6= 0 faça2 se n mod 2 = 1 então3 p← p · a4 a← a · a5 n←

    ¨n2

    ˝6 retorne p

  • Monóides e o Algoritmo de Exponenciação

    O Algoritmo de Exponenciação

    Prova de Corretude

    Prova de Corretude

    Teorema

    O algoritmo anterior corretamente computa o valor xk.

    Demonstração.A prova será através da seguinte invariante de loop:

    “Sempre que o algoritmo passa pela linha 1, p · an = xk.”

    Na primeira vez que ele chega à linha 1, essa invariante é trivialmentesatisfeita, pois p = 1, a = x e n = k em virtude da atribuição na linha 0.

  • Monóides e o Algoritmo de Exponenciação

    O Algoritmo de Exponenciação

    Prova de Corretude

    Prova de Corretude

    Demonstração.Suponha que o algoritmo chegou à linha 1 satisfazendo a invariante. Vamosmostrar que se ele retornar, a invariante ainda continua sendo satisfeita.O algoritmo irá voltar à linha 1 se, e somente se, n 6= 0. Iremos, portanto,assumir este fato.Se ele voltar, os novos valores para a, n e p serão

    a′ = a · a, p′ = p · an mod 2, n′ =jn

    2

    k.

    Mas então

    p′ · a′n′

    = p · an mod 2 · (a · a)bn2 c = p · an mod 2 · (a2)b

    n2 c

    = p · an mod 2 · a2·bn2 c = p · an mod 2 · an−(n mod 2)

    = p · an = xk.

  • Monóides e o Algoritmo de Exponenciação

    O Algoritmo de Exponenciação

    Prova de Corretude

    Prova de Corretude

    Demonstração.

    Portanto, ao fim do algoritmo, xk = p · an, mas como n = 0,xk = p · a0 = p · 1 = p. Logo o algoritmo corretamente retorna p = xk.

  • Monóides e o Algoritmo de Exponenciação

    O Algoritmo de Exponenciação

    Análise da Complexidade

    Análise da Complexidade

    Este algoritmo pode ter sua complexidade analisada com o Teorema Mestreatravés da recorrência

    T (n) = T“n

    2

    ”+ Θ(1).

    Como Θ(1) = Θ(nlog2 1), temos

    T ∈ Θ(log n).

  • Monóides e o Algoritmo de Exponenciação

    O Algoritmo de Exponenciação

    Implementação

    Detalhes de Implementação

    Se n estiver representado na base 2, este algoritmo pode ser eficientementeimplementado.Para n escrito em uma base geral b, precisamos adaptar o algoritmo comosegue:

    expb(x, k)

    0 a, n, p← x, k, 11 enquanto n 6= 0 faça2 p← p · an mod b3 a← ab4 n←

    ¨nb

    ˝5 retorne p

    A demonstração de que ele funciona e roda em Θ(log n) para todo b fica comoexerćıcio.

  • Monóides e o Algoritmo de Exponenciação

    Aplicações

    Exponenciação Modular

    Exponenciação Modular

    Vários protocolos de criptografia assimétrica precisam computar eficiente-mente o valor de ab mod n para valores n ∈ N \ {0} e a, b ∈ Zn.Observando que (Zn, ·) é um monóide, esse problema pode facilmente serresolvido com o algoritmo que estudamos.

  • Monóides e o Algoritmo de Exponenciação

    Aplicações

    Cálculo Eficiente dos Números de Fibonacci

    Cálculo Eficiente dos Números de Fibonacci

    O n-ésimo número de Fibonacci é definido recursivamente por

    fn =

    8>:0, n = 0

    1, n = 1

    fn−2 + fn−1, senão.

    Gostaŕıamos de ser capazes de computar eficientemente o n-ésimo númerode Fibonacci fn para um dado n ∈ N.

  • Monóides e o Algoritmo de Exponenciação

    Aplicações

    Cálculo Eficiente dos Números de Fibonacci

    Cálculo Eficiente dos Números de Fibonacci

    Conhecemos um algoritmo capaz de fazer isso, mas ele executa Θ(n) somas.Ainda, o n-ésimo número de Fibonacci tem da ordem de Θ(n) d́ıgitos emqualquer base. Se levarmos isso em conta este algoritmo leva Θ(n2) paraconcluir.Iremos mostrar um algoritmo para calcular o n-ésimo número de Fibonacciusando apenas Θ(log n) somas e multiplicações. Ainda, se considerarmosque uma multiplicação de dois números de n d́ıgitos pode ser executadaem O(n log n log log n), este algoritmo leva apenas O(n log2 n log log n) paraterminar, sendo bastante mais rápido.Mesmo usando o algoritmo de Karatsuba para multiplicar faz com que essealgoritmo rode em O(nlog2 3 log n), o que ainda é bem mais rápido.

  • Monóides e o Algoritmo de Exponenciação

    Aplicações

    Cálculo Eficiente dos Números de Fibonacci

    Cálculo Eficiente dos Números de Fibonacci

    A principal idéia por traz desse algoritmo vem da seguinte igualdade»fn+2fn+1

    –=

    »1 11 0

    – »fn+1fn

    –.

    Por indução obtém-se »fn+1fn

    –=

    »1 11 0

    –n »f1f0

    –.

    Mas como (N2×2, ·) é um monóide, segue que podemos calcular»1 11 0

    –nrapidamente, usando apenas Θ(log n) vezes a operação do monóide, que éum produto matricial 2× 2 e que portanto pode ser implementado com Θ(1)somas e multiplicações.

  • Monóides e o Algoritmo de Exponenciação

    Aplicações

    Cálculo Eficiente dos Números de Fibonacci

    Cálculo Eficiente dos Números de Fibonacci

    Outra observação interessante é que como f0 = 0, f1 = 1, f2 = 1 e»fk+1fk

    –=

    »1 11 0

    –k »f1f0

    –,

    »fk+2fk+1

    –=

    »1 11 0

    –k »f2f1

    –,

    obtém-se que, para k > 1,»1 11 0

    –k=

    »fk+1 fkfk fk−1

    –,

    e como os número de Fibonacci são não decrescentes, temos que o maiornúmero que aparece em uma matriz no algoritmo de exponenciação é fn+1,que tem Θ(n) d́ıgitos em qualquer base.SeM(n) é o tempo que um algoritmo de multiplicação leva para multiplicardois inteiros de n d́ıgitos e M é da classe de complexidade de uma funçãoassintoticamente não decrescente, segue que podemos implementar esse al-goritmo em O(M(n) log n).

    MonóidesDefiniçãoPropriedadesExemplos

    Produtórios e Exponenciação em MonóidesDefiniçãoPropriedades

    O Algoritmo de ExponenciaçãoEnunciadoProva de CorretudeAnálise da ComplexidadeImplementação

    AplicaçõesExponenciação ModularCálculo Eficiente dos Números de Fibonacci