Teoria de números/Eficiência do algoritmo de Euclides

Fonte: testwiki
Revisão em 21h43min de 27 de fevereiro de 2012 por imported>He7d3r (hack obsoleto: as fórmulas já aparecem em PNG e não há mais como exibi-las em HTML nem MathML (futuramente teremos MathJax))
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)
Saltar para a navegação Saltar para a pesquisa

Neste capítulo, será discutido quão eficiente é o algoritmo de Euclides para o cálculo do MDC. De forma mais precisa, se forem dados dois números inteiros:

Quantas etapas (divisões) do algoritmo são necessárias para que um resto seja zero?

Fazendo estimativas

Recorde-se que o algoritmo baseia-se na construção da sequência:

a=r0b=r1>r2>>rk>rk+1=0

cujos termos verificam as seguintes igualdades:

1 r0= r1q0+r2 0r2<r1
2 r1= r2q1+r3 0r3<r2
k-1 rk2= rk1qk2+rk 0rk<rk1
k rk1= rkqk1+rk+1=rkqk1 pois 0=rk+1<rk

O algoritmo fornece (a,b)=rk, que é o último resto não nulo, obtido em k passos (divisões).

Uma observação importante é que o resto de uma divisão é sempre menor que a metade do dividendo:

r0=r1q0+r2r1+r2>2r2

Sendo a primeira desigualdade válida porque q01 e a segunda porque r1>r2. Deste modo, tem-se

r0>2r2
r1>2r3
r2>2r4
r3>2r5

e em geral

rk>2rk+2, para cada k0.

Assim, comparando os termos cujos índices são pares, segue:

r0<a/2
r2<r0/2<a/4
r4<r2/2<r0/4<a/8

Predefinição:Wikipedia Por indução, resulta para cada termo:

r2j<a/2j+1

De modo análogo, ao comparar os termos ímpares, e usar novamente indução, segue:

r2j+1<a/2j+1

Com isso, a sequência dos rj decresce geometricamente, pois a está fixado. O fato de ser uma sequência decrescente já havia sido demonstrado quando se justificou o funcionamento do algoritmo de Euclides. A novidade aqui é a velocidade com que a sequência decresce. Pelos cálculos anteriores, os restos diminuem, no mínimo, tão rápido quanto os termos da progressão geométrica (a,a2,a4,a8,a16,).

A questão colocada era: Quantas divisões são necessárias para que o resto rk+1 seja zero?

Analisando a progressão geométrica dada anteriormente, conclui-se que algum de seus termos é menor do que 1. Nesse caso, o resto correspondente será nulo, e o algoritmo para. Para ser mais exato, como

a2x<1a<2xlog2a<x

o menor índice inteiro t que torna a2t menor que 1 é

t=log2a+1

Onde α denota o maior inteiro que não supera α (a parte inteira de α).

Então r2t<a2t+1<a2t<1, e consequentemente r2t=0, pois os restos são números inteiros não-negativos.

Assim, sabendo que o algoritmo para exatamente quando rk+1=0, conlui-se que tal índice k+1 não pode ser maior que 2t, em símbolos:

k+12(log2a+1)

Para melhor compreender o significado dessa estimativa, considere que a tem N dígitos decimais. Então:

10N1a<10N

Aplicando o logaritmo em ambos os membros da segunda desigualdade, resulta

log2a<Nlog210

Logo, k+12(log2a+1)<2Nlog210+2, que para valores grandes de N é aproximadamente 6,6N.

Embora esta não seja a melhor aproximação para k, já é bastante útil, pois mostra que o número de etapas cresce linearmente com o número de dígitos de a.

O pior caso

Para obter uma estimativa mais precisa do número de etapas que o algoritmo de Euclides leva para determinar o MDC de dois números, será considerada a seguinte questão:

Qual é o menor valor de a para o qual o algoritmo leva n passos?

Veja alguns exemplos utilizando a representação matricial do algoritmo:

Para n=1:

[ab]=[q0110][d0]

Para n=2:

[ab]=[q0110][q1110][d0]=[q0q1+1q0q11][d0]

Para n=3:

[ab]=[q0q1+1q0q11][q2110][d0]=[q0q1q2+q0+q2q0q1+1q11][d0]

É fácil perceber que a é mínimo quando os valores q0,,qk1 forem todos iguais a 1, cada entrada da matriz é um polinômio nas variáveis qj (que são positivas), e cujos coeficiêntes são 1 (se puder, acrescente uma justificativa mais formal).

Se cada quociente for substituído por 1 na fórmula de recorrência

rj1=rjqj1+rj+1

Esta passará a ser:

rj1=rj+rj+1

Que vale para j satisfazendo 1jk.

A nova relação lembra a fórmula que define a sequência de Fibonacci, embora esteja "ao contrário".

Predefinição:CaixaMsg

Predefinição:Tarefa Matricialmente, as condições q0=1,,qk1=1 produzem as seguintes igualdades:

[ab]=[𝟏110][𝟏110][𝟏110][d0]=[𝟏110]k+1[d0], sendo que d=(a,b).

Com um simples uso do princípio de indução finita, consegue-se:

[𝟏110]n=[Fn+1FnFnFn1], desde que n1.

Deste modo,

[ab]=[Fk+2Fk+1Fk+1Fk][d0]=[dFk+2dFk+1]

Como d=(a,b)1, segue que

  • aFk+2
  • bFk+1

Predefinição:Teorema

Exemplificando

Para determinar o valor de (F7,F6)=(13,8), seria necessário efetuar cinco divisões:

13=81+5
8=51+3
5=31+2
3=21+𝟏
2=𝟏2+0

Logo, (13,8)=1. Aproveitando este exemplo, observe que:

[138]=[13885][10]=[F5+2F5+1F5+1F5][10]=[1110]5+1[10]

No entanto, se qualquer dos números for menor, o algoritmo requer menos etapas. Por exemplo, ao determinar (13,7) tem-se:

13=71+6
7=61+𝟏
6=𝟏6+0

Donde, (13,7)=1.

Já o cálculo de (12,8) é ainda mais simples:

12=81+𝟒
8=𝟒2+0

Portanto, (12,8)=4.

Melhorando as estimativas

Sabendo qual é o pior caso para a aplicação do algoritmo de Euclides, pode-se deduzir uma melhor estimativa de sua eficiência. Uma análise mais elaborada que aquela apresentada no início do capítulo fornece o seguinte resultado:

Teorema de Lamé

Predefinição:Teorema

Gabriel-Lamé

Predefinição:Tarefa Para demonstrar o teorema de Lamé, é importante ter em mente algumas propriedades relacionadas a sequência de Fibonacci e ao número de ouro:

φ=1+521.618

Tem-se:

  • φ2=φ+1

Predefinição:Demonstração

  • Fn=φn5, arredondado para o inteiro mais próximo.

Predefinição:Demonstração

  • Fnφn1

Predefinição:Demonstração

  • logφ<15

Predefinição:Demonstração

Como foi visto anteriormente, quando (a,b) é exige exatamente n passos, é tem-se aFn+2 e bFn+1. Logo,

aFn+2φn+1

Aplicando o logaritmo em ambos os menbros, segue:

(n+1)logφloga

ou seja

nlogalogφ=logφa

Mas 1logφ<5, então:

n1logφloga<5logφa<5N, onde N é o número de dígitos de a

Demonstração da fórmula de Binet

Nesta seção, será deduzida a fórmula de Binet:

Fn=15((1+52)n(152)n)=φnφ^n5

onde φ=1+52 e φ^=152.

A principal razão para se utilizar está fórmula, em vez da definição recursiva da sequência de Fibonacci, é que ela permite a obtenção de um termo da sequência sem precisar calcular os anteriores. Predefinição:Demonstração

Exercícios

  1. Verifique, utilizando o princípio de indução, que:
    [Fn+1Fn]=[1110]n[F1F0]
  2. Escreva outra demonstração para a fórmula de Binet, utilizando o princípio de indução.

Por enquanto, não há muitos exercícios sobre este capítulo. O leitor está convidado a adicionar mais ítens a essa seção, para ajudar a melhorar o texto.

Predefinição:AutoCat