34
1 Departamento de Matemática Universidade de Aveiro Uma pitada de Algoritmia Uma pitada de Algoritmia 26/10/2002 26/10/2002 Rosália Rodrigues

Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

1

Departamento de MatemáticaUniversidade de Aveiro

Uma pitada de AlgoritmiaUma pitada de Algoritmia

26/10/200226/10/2002

Rosália Rodrigues

Page 2: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

2

“It has often been said that a person does not really understand something until he teaches it to someone else. Actually a person does not really understand something until he can teach it to a computer, i.e., express it as an algorithm.”

Donald E. Knuth, American Mathematical Monthly, 1974.

Page 3: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

3

“I hold the opinion that the construction of computer programs is a mathematical activity like the solution of differential equations, that programs can be derived from their specifications through mathematical insight, calculation, and proof, using algebraic laws as simple and elegant as those of elementary arithmetic.”

Sir Charles Antony Richard Hoare.

Page 4: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

4

A IteraçãoA IteraçãoA Iteração

Page 5: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

5

Muitas vezes, o Algoritmo pode ser construído directamente a partir da Formulação Matemática da Especificação do Problema.

Muitas vezes, Muitas vezes, oo AlgoritmoAlgoritmo pode ser construído directamente pode ser construído directamente a partir da Formulação Matemática da a partir da Formulação Matemática da Especificação do ProblemaEspecificação do Problema..

Page 6: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

6

∑=

n

1k

k

{n ± ´}soma:= 0;for k:=1 to n do

soma:= soma+k;{soma = 1+2+�+n}

Especificação: Entrada: {n : n ± ´}Saída: {soma : soma = }

{n ± ´}k:= 1; soma:= 1;while k < n do

begin k:= k+1;soma:= soma+k

end;{soma = 1+2+�+n}

Page 7: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

7

Mas estará CERTO?

A condição de paragem do Ciclo:

{n ± ´}k:= 1;{k ± ´ }while k < n do

begin {k < n} � {k+1 < n+1}k:= k+1;{k < n+1}

……{k < n+1}

end;{k � n ¼ k < n+1} Á {k = n}

Page 8: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

8

O Somatório:

{n ± ´}k:= 1; soma:= 1;{k = 1} ¼ {soma=1+2+�+k}while k < n do

begin {soma=1+2+�+k} ¼ {k < n}k:= k+1;{soma=1+2+�+(k-1)} ¼ { k < n+1}soma:= soma+k{soma=1+2+� +(k-1)+k } ¼ { k < n+1}

end;{soma = 1+2+�+k} ¼ {k � n} ¼ {k < n+1}{soma = 1+2+�+n}

Page 9: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

9

A Proposição Lógica

{soma = 1+2+�+k}

chama-se Invariante do Ciclo.

A Proposição Lógica

{soma = 1+2+�+k}

chama-se Invariante do CicloInvariante do Ciclo.

Page 10: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

10

A noção de Invariante representa o

Princípio de Indução.

A noção de Invariante A noção de Invariante representa o representa o

Princípio de InduçãoPrincípio de Indução..

Page 11: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

11

Com base na noção de Invariante de Algoritmos Iterativos

é também possível

Demonstrar Teoremas.

Com base na noção de Invariante Com base na noção de Invariante de Algoritmos Iterativos de Algoritmos Iterativos

é também possívelé também possível

Demonstrar TeoremasDemonstrar Teoremas..

Page 12: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

12

Teorema: 1 + 2 + 3 + � + n = n (n+1) / 2

Especificação: Entrada: {n : n ± ´}Saída: {soma : soma = 1 + 2 + 3 + � + n ¼

soma = n (n+1) / 2}

Page 13: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

13

O Algoritmo e a Demonstração pretendida:

{n ± ´}k:= 1; soma:= 1;{k=1} ¼ {soma=1+2+�+k = 1} ¼ {soma = k (k+1) / 2 = 1}

while k < n dobegin {soma=1+2+�+k} ¼ {soma = k (k+1) /2} ¼ {k < n}

k:= k+1;{soma=1+2+�+(k-1)} ¼ {soma = (k-1)k /2} ¼ {k < n+1}soma:= soma+k{soma=1+2+�+k } ¼ {k < n+1}

¼ {soma = (k-1) k /2 + k = k (k+1)/2}end;

{soma = 1+2+�+k} ¼ {soma = k (k+1) /2} ¼ {k � n} ¼ {k < n+1}{soma = 1+2+�+n} ¼ {soma = n (n+1) /2}

Page 14: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

14

Utilizando a noção de Invariante, podemos ainda Deduzir Algoritmos.Utilizando a noção de Invariante, Utilizando a noção de Invariante,

podemos ainda podemos ainda Deduzir AlgoritmosDeduzir Algoritmos..

Page 15: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

15

Problema: Calcular os n primeiros quadrados perfeitos, um por cada volta de ciclo,utilizando apenas somas.

Especificação: Entrada: {n : n ± ´}Saída: {soma : soma = 1

= 4= 9= 16 = 25 �= n2}

Page 16: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

16

Dedução do Algoritmo : o Ciclo:

{n ± ´}k:= 1; {k ± ´}while k < n do

begin {k ± ´} ¼ {k < n}k:= k+1;{k ± ´} ¼ {k-1< n}

??

{k ± ´} ¼ {k-1< n}end;

{k ± ´} ¼ {k � n} ¼ {k-1< n}{k = n}

Page 17: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

17

Dedução do Algoritmo : o Somatório:

{n ± ´}k:= 1; soma:= 1;{k ± ´} ¼ {soma = k2}while k < n do

begin {k ± ´} ¼ {soma = k2} ¼ {k < n}k:= k+1;{k ± ´} ¼ {soma = (k-1)2} ¼ {k-1< n}{soma = k2 - 2 k + 1}

??soma:= soma + termo{soma = k2}{k ± ´} ¼ {soma = k2} ¼ {k-1< n}

end;{k ± ´} ¼ {soma = k2} ¼ {k � n} ¼ {k-1< n}{soma = n2}

Page 18: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

18

Dedução do Algoritmo : o Termo do Somatório:{n ± ´}k:= 1; termo:= 1; soma:= 1;{k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2}while k < n do

begin {k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2} ¼ {k < n}k:= k+1;{k ± ´} ¼ {termo = 2 (k-1) - 1} ¼ {soma = (k-1)2} ¼ {k-1< n}{termo = 2 k - 3} ¼ {soma = k2 - 2 k + 1}

??{termo = 2 k -1} soma:= soma + termo{soma = k2 - 2 k + 1 + 2 k + 1 = k2}{k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2} ¼ {k-1< n}

end;{k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2} ¼ {k � n} ¼ {k-1< n}{soma = n2}

Page 19: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

19

Algoritmo e sua Demonstração:

{n ± ´}k:= 1; termo:= 1; soma:= 1;{k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2}while k < n do

begin {k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2} ¼ {k < n}k:= k+1;{k ± ´} ¼ {termo = 2 (k-1) - 1} ¼ {soma = (k-1)2} ¼ {k-1<n}{termo = 2 k - 3} ¼ {soma = k2 - 2 k + 1}termo:= termo + 2;{termo = 2 k - 3 + 2 = 2 k -1}soma:= soma + termo{soma = k2 - 2 k + 1 + 2 k + 1 = k2}{k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2} ¼ {k-1< n}

end;{k ± ´} ¼ {termo = 2 k - 1} ¼ {soma = k2} ¼ {k � n} ¼ {k-1< n}{soma = n2}

Page 20: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

20

Mas afinal, o que faz o algoritmo?

k:= 1; termo:= 1; soma:= 1;while k < n do

begin k:= k+1;termo:= termo + 2;soma:= soma + termo

end;

... isto é, demonstra que:

pelo Método da Indução.

k termo soma

1 1 1

2 3 1+3 = 4

3 5 1+3+5 = 9

4 7 1+3+5+7 = 16

5 9 1+3+5+7+9 = 25

… …

n n2

∑=

=n

1k

2n1)-(2k

Page 21: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

21

Temos assim algoritmos capazes de demonstrar que:

✦ 1 + 2 + 3 + � + n = n (n+1) / 2✦ 1 + 3 + 5 + 7 + � + (2n-1) = n2

Exercícios:

✦ Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas.

✦ Por fim, ganhe coragem, junte tudo e demonstre (só com um ciclo e apenas com somas) que:

13 + 23 + 33 + � + n3 = n2 (n+1)2 / 4 = (1 + 2 + 3 + � + n)2

Page 22: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

22

✦ E já agora, se temos um Algoritmo para calcular n2,

poderemos alterá-lo por forma a calcular ¹n?

Claro que, estando em Aritmética de Inteiros, só podemos pretender calcular uma aproximação inteira de ¹n.

Especificação: Entrada: {n : n ± ´}Saída: {k : k = ¹n}

Nota: k = x ¾ (k-1) < x � k

k = x ¾ k � x < (k+1)

Page 23: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

23

O que temos:

{n ± ´}k:= 1; termo:= 1; soma:= 1;while k < n do

begin k:= k+1;termo:= termo + 2;soma:= soma + termo

end;{n ± ´} ¼ {soma = k2} ¼ {k-1< n} ¼ {k � n}

O que pretendemos:

{(k-1) < ¹n} ¼ {¹n � k} � {(k-1)2 < n} ¼ {n � k2}

Ou seja:

{n ± ´} ¼ {soma = k2} ¼ {(k-1)2 < n} ¼ {n � k2}

Page 24: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

24

Basta portanto alterar a Condição do Ciclo:

{n ± ´}k:= 1; termo:= 1; soma:= 1;{soma = k2}while soma < n do

begin {{soma = k2} ¼ {soma < n}} Á {k2 < n}k:= k+1;{(k-1)2 < n}termo:= termo + 2;soma:= soma + termo{soma = k2} ¼ {(k-1)2 < n}

end;{n ± ´} ¼ {soma = k2} ¼ {(k-1)2 < n} ¼ {n � k2}{n ± ´} ¼ {soma = k2} ¼ {(k-1) < ¹n} ¼ {¹n � k}

{n ± ´} ¼ {k = ª¹nº}

soma < n

Page 25: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

25

Mais alguns Algoritmos que podem ser construídos directamente a partir da Formulação Matemática da Especificação do Problema.

Mais alguns Mais alguns AlgoritmosAlgoritmos que podem ser que podem ser construídos directamente construídos directamente a partir da Formulação Matemática da a partir da Formulação Matemática da Especificação do ProblemaEspecificação do Problema..

Page 26: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

26

✦ Calcular o Valor Máximo de um conjunto finito:

Especificação: Entrada: { x[1..n] }Saída: { maximo = max {x[1..n]} }

Formulação: { maximo = max {x[1..n]} } �{ � maximo ± x[1..n] :� i ± [1..n] Á x[i] � maximo}

Page 27: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

27

✦ Pesquisar um elemento num conjunto finito:

Especificação: Entrada: { x, a[1..n] : do mesmo tipo}Saída: { ? x ± a[1..n] }

Formulação: { x ± a[1..n] } � { � i ± [1..n] : x = a[i] }

Nota: { x ² a[1..n] } � { � i ± [1..n] Á x � a[i] }

Page 28: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

28

✦ Verificar a Relação de Inclusão entre dois conjuntos finitos:

Especificação: Entrada: { a[1..m], b[1..n] : do mesmo tipo}Saída: { ? a[1..m] ¯ b[1..n] }

Formulação: { a[1..m] ¯ b[1..n] } �{ � i ± [1..m], � j ± [1..n] : a[i] = b[j] }

Page 29: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

29

✦ Ordenar os elementos de um conjunto finito:

Especificação: Entrada: { x[1..n] }Saída: { x[1..n] por ordem não decrescente}

Formulação: { x[1..n] por ordem não decrescente} �{ � i,j ± [1..n] : i < j Á x[i] � x[j] } �{ � i ± [1..n-1] Á x[i] � x[i+1] }

Nota: A identificação de ocorrências de pares: { x[i] > x[i+1] } econsequente troca consiste no Método BubbleSort.

Page 30: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

30

Uma questão de Análise Numérica:

Problema: Cálculo de Raízes pelo Método das Bissecções Sucessivas

Especificação: Entrada: { Uma Equação na forma f(x) = 0,um intervalo [a,b] : �1 raiz ± [a,b],erro ± ¸+ }

Saída: { Um intervalo [a,b] : raiz ± [a,b] ¼ |a-b| < erro }

Facilmente se conclui que:

Invariante do Ciclo: { raiz ± [a,b] }

Condição do Ciclo: { |a-b| � erro }

Page 31: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

31

Construção do Algoritmo:

{f(x) = 0 ¼ raiz ± [a,b] ¼ erro ± ¸+}

??{raiz ± [a,b]}while abs(a-b) >= erro do

begin {raiz ± [a,b] ¼ |a-b| � erro}

??{raiz ± [a,b]}

end;

{raiz ± [a,b] ¼ |a-b| < erro}

Page 32: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

32

O Método das Bissecções Sucessivas:

meio � ponto médio de [a,b];calcular f(meio);

if raiz ± [meio,b]then a � meioelse b � meio;

Page 33: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

33

Algoritmo e Prova:

{f(x) = 0 ¼ raiz ± [a,b] ¼ erro ± ¸+}fa:= f(a); {raiz ± [a,b]}while abs(a-b) >= erro do

begin {raiz ± [a,b] ¼ |a-b| � erro}meio:= (a+b)/2;fm:= f(meio); if (fa > 0) = (fm > 0)then {raiz ² [a,meio]} Á {raiz ± [meio,b]}

a � meio{raiz ± [a,b]}

else {raiz ± [a,meio]}b � meio{raiz ± [a,b]}

end;{raiz ± [a,b] ¼ |a-b| < erro}

Page 34: Uma pitada de Algoritmia - SWEETsweet.ua.pt/rosalia/arquivo/Sabado.pdf · Calcular os n primeiros cubos perfeitos, um por cada volta de ciclo, ainda utilizando apenas somas. Por fim,

34

Observações:

1. if (fa > 0) = (fm > 0)then {raiz ² [a,meio]}else {raiz ± [a,meio]}

2. while abs(a-b) >= erro do Que garantia temos, quanto à Paragem deste ciclo?

f(a) f(meio) fa > 0 fm > 0 (fa > 0) = (fm > 0)+ + V V V+ - V F F- + F V F- - F F V