• Nenhum resultado encontrado

understand something until he teaches it to someone else.

N/A
N/A
Protected

Academic year: 2023

Share "understand something until he teaches it to someone else. "

Copied!
34
0
0

Texto

(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

(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.

(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.

(4)

A Iteração

A Iteração

A Iteração

(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,

o o Algoritmo Algoritmo 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 Problema

Especificação do Problema . .

(6)

= n

1 k

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;

(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}

(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}

(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 Ciclo Invariante do Ciclo.

(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ção

Princípio de Indução . .

(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 Teoremas

Demonstrar Teoremas. .

(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}

(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 do

begin {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}

(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 Algoritmos Deduzir Algoritmos . .

(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

˜

= n

2

}

(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}

(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}

(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}

(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}

(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:

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

=

1 k

n

2

1)

-

(2k

(21)

Temos assim algoritmos capazes de demonstrar que:

✦ 1 + 2 + 3 + ˜ + n = n (n+1) / 2

✦ 1 + 3 + 5 + 7 + ˜ + (2n-1) = n

2

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:

1

3

+ 2

3

+ 3

3

+ ˜ + n

3

= n

2

(n+1)

2

/ 4 = (1 + 2 + 3 + ˜ + n)

2

(22)

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

2

,

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)

(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}

(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}

soma < n

(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 Algoritmos Algoritmos 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 Problema

Especificação do Problema. .

(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}

(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] }

(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] }

(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] } e consequente troca consiste no Método BubbleSort.

(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 }

(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}

(32)

O Método das Bissecções Sucessivas:

meio  ponto médio de [a,b];

calcular f(meio);

if raiz ± [meio,b]

then a  meio else b  meio;

(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}

(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

Referências

Documentos relacionados

Therefore, it is necessary for the actors to understand the construction of the process that needs to be tried out and experienced, so that health work and all its

It is considered that some recommendations and consid- erations, derived from the results of the present research, are important:(1) it is important to understand that the

Inicialmente, os exercícios com base no método pilates aumentam a consciência corporal e a capacidade de se movimentar no espaço (Lange et al., 2000a), assim os idosos

The probability of attending school four our group of interest in this region increased by 6.5 percentage points after the expansion of the Bolsa Família program in 2007 and

That the sum of $196,000 be allotted to programs of the Bureau whose nature does not require outside or addition- al financing with resources derived from the

Although smallpox, diphtheria, and typhoid fever have been reduced over the years to only a small fraction of the levels of thirty years ago, we know that

At the end of that three year period, it can be seen that Área 21 grew 22%, going from 41 programs in the 2007–2009 triennium to 51 in 2010–2012, excluding the opening of Doctoral

Episódios de sibilân- cia nos últimos 12 meses e asma não controlada contri- buíram para o aumento dos custos totais e custos diretos, essencialmente por maior consumo de cuidados