procedimento passo-a-passo para efetuar cálculos. Uma sequência finita de instruções para resolver um problema Algoritmos são como programas de computador? Mestra, o que é mesmo um algoritmo?
metade da década de 1960, descrevendo como a IBM dominava o negócio de computadores. Em 1965 a IBM detinha 65,3 % do mercado. Os sete anões, Burroughs, Sperry Rand (anteriormente Remington Rand) , Control Data , Honeywell , General Electric, RCA e NCR, dividiam o resto. Dez anos depois:
“Elementos”, de Euclides, 300 aC. O algoritmo de Euclides, para calcular o mdc (máximo divisor comum) de dois números inteiros, é um dos mais antigos que se tem notícia na história da humanidade.
4º ano do Ginásio aprendi a extrair a raiz quadrada, , de um número da seguinte forma: Loirinhas, Surfistas e Cabelos de Fogo, descubram esse algoritmo na web e calculem para alguns valores de .
nada. Constituem apenas um treinamento! Quando vou utilizá-los? Cabelos de fogo vou mostrar a resposta a essa questão, apresentada por um colega meu. Um professor.
cômodo ficar com o estabelecido por Aristóteles e não contestar o poder da Igreja e de igrejinhas... É Mestre, seu colega acabou de dizer que essa resposta é mentirosa!
fantástica pelo interior de algoritmo! as ideias, a lógica subjacente, os homens, as máquinas digitais, ... Sim ele navega pela história, pelas ideias, pela lógica subjacente, os homens envolvidos, as máquinas digitais, ...
escrito em um vocabulário simbólico fixo, regido por instruções precisas, que se movem em passos discretos, 1, 2, 3, ..., cuja execução não requer insight, esperteza, intuição, inteligência ou clareza e lucidez, e que mais cedo ou mais tarde chega a um fim. Antecedendo ao capítulo I, destacado numa página, lemos:
atual O cabeçote pode: 1. Ler o símbolo escrito sobre o quadrado atual; 2. Mover-se do quadrado atual para o seguinte ou anterior ou ainda ficar parado (isto depende do Estado em que a Máquina está); 3. Escrever ou apagar um símbolo no quadrado atual (também depende do Estado em que a Máquina está).
n Y n-1 Qualquer função computável : → é computada através de uma sucessão finita de operações (funções) elementares. Incluindo as do IEEE 754. Diagramaticamente:
finita de funções elementares (incluindo aí comparações, e decisões lógicas) para computar uma outra função. Esta ideia independe do IEEE 754. Um algoritmo nada mais é que uma composição de operações elementares ℴ ∘ ⋅⋅⋅ ∘ ℴ2 ∘ ℴ1 = que computam uma função f associada ao problema.
e ∘ ⋅⋅⋅ ∘ 2 ∘ 1 resolvem o mesmo problema (compõe a mesma função ), em princípio devemos escolher o mais rápido. Se ℴ é o tempo para efetuar a operação ℴ e para efetuar a operação deveremos comparar σ=1 (ℴ ) com σ=1 ( ) .
número de operações envolvidas num algoritmo. No cap. 3, Algorithm Analysis, do livro acima, o tema é exposto com clareza. É um dos tópicos mais importantes no estudo de algoritmos.
do livro acima. Em seguida: 1. Façam um resumo do texto em pdf. 2. Apresentem um resumo das seções 3.1, 3.2 e 3.3 do livro. 3. O algoritmo de Briot-Rufini-Horner é (? ? ) ?
1 2+4 12-7 10+3 26-5 2 x + Surfista, deu certinho, 2 = 21 ! Mas eu lembro que, para calcular o valor da polinomial = 4 + 43 − 72 + 3 − 5, em = 2 usávamos o seguinte esquema:
a seguinte: Entre com os coeficientes 4 , 3 , 2 , 1 , 0 da polinomial e com 0 . 1º passo Defina 4 = 4 2º passo Para = 3,2,1,0 calcule = +1 0 + 3º passo
3 • 2 = 3 0 + 2 • 1 = 2 0 + 1 • 0 = 1 0 + 0 Confira Surfista que os cálculos efetuados com o algoritmo foram os dessa caixinha. Vai ser mais rápido! No cálculo direto são 10 multiplicações e 4 adições e o Briot precisa só de 4 adições e 4 multiplicações.
resolução de problemas, • Exemplos: o algoritmo de Euclides e o da raiz quadrada. • Interlúdio 1: quando vou usar isto? • Algoritmos - mergulho em profundidade: • Um livro fantástico sobre algoritmos; • A máquina de Turing; • Um algoritmo é uma composição de funções elementares; • Algoritmos diferentes podem resolver um mesmo problema; • Tarefa para casa 2: A notação “big ” para medir algoritmos; • Apêndice 1: O algoritmo de Briot-Rufini-Horner • Apêndice 2: Mais um pouco sobre lógica matemática; • Apêndice 3: Crimes de guerra e a Operação Lava-jato. Eis um resumo do que vimos sobre algoritmos:
de problemas Números Neste mapa da mina, assinalei em cores o que já vimos. Em branco o que veremos agora. DIFERENCIABILI//. E CONDICIONAMENTO O mapa da mina OPERAÇÕES ELEMENTARES E CONTINUIDADE Vetores, matrizes e a numpy
X 2 X n Y n-1 Qualquer função computável : → é computada através de uma sucessão finita de operações elementares. Incluindo as do IEEE 754. Diagramaticamente:
cadeia finita de funções elementares (incluindo aí comparações, e decisões lógicas) para computar uma outra função. Esta ideia independe do IEEE 754. Um algoritmo nada mais é que uma composição de operações elementares ∘ ⋅⋅⋅ ∘ 2 ∘ 1 = que computam uma função f associada ao problema.
dois algoritmos para resolver um problema associado a uma função f são composições diferentes: = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 e = ∘ ⋅⋅⋅ ∘ 2 ∘ 1 Obviamente: Cada algoritmo poderá envolver uma quantidade diferente de operações elementares! 1º Cada operação elementar possui a sua sensibilidade – seu número de condicionamento! 2º
para cada uma das operações elementares e . Cada uma pode ser bem ou mau condicionada. Pois é Loirinha, lembre-se que: tanto a f como cada operação elementar e cada possui seu número de condicionamento.
situação altamente indesejável é a f ser bem condicionada, mas uma das operações elementares (ou ) ser mau condicionada. Então o algoritmo será instável. f n X n Y n-1
elevar ao quadrado cada componente do vetor X calculei = max(). • Depois montei o vetor = /. Os elementos de Y satisfazem | | ≤ 1. Logo, elevá-los ao quadrado e somá-los não causará “overflow”.
de propriedades: 1. Associatividade, 2. Definição de oposto, 3. Existência do neutro. Como diria o Sherlock: “Elementar meu caro Watson, elementar”: + − = + − = + 0 =
causou um prejuízo enorme. Apesar de que, nesse caso, o erro foi na utilização do Método dos Elementos Finitos. De qualquer forma, um erro de Cálculo Numérico.
o Teorema Fundamental da Representação de Ponto Flutuante temos a esperança que − ∗ < , com = ∗ () sendo ∈ ℝ um número pequeno. • 0 ≅ 0 ∗; • 1 ≅ 1 ∗; • ... • ≅ ∗.
∗ ∆ ∆ Assumir que ∗ é uma perturbação qualquer de com ∆ = − ∗ . Então ∗ = ∗(∗) será o valor calculado pelo algoritmo ∗ = ∘ ⋯ ∘ 1 em ∗ e queremos estimar ∆ = − ∗ . Antes de continuar, podemos pensar (como os matemáticos) num problema mais geral!
Mas, voltando à situação inicial, o erro direto (forward error), é o erro ao calcular a solução para o dado (input) pelo algoritmo: ∆ = − ∗ = − ∗(∗) Solução do problema Solução calculada pelo algoritmo
2, por um determinado algoritmo, o erro direto (forward) é |∆| = ∗ − | = |1.41 − 1.41421 … ≅ 0.00421 … O problema em avaliar o erro forward é que a solução exata (no caso = 2) usualmente é desconhecida.
onde o algoritmo foi implementado. E fornece uma aproximação com ~7 casas decimais no caso de float32. Portanto, calcular o erro forward é algo apenas teórico. Como faremos na prática?
de contornar o problema: Descobrir qual aproximação de fornece o valor ∗ = ∗(∗) calculado pelo algoritmo e medir ∆ = − . Aproximação a descobrir f ( ) é a solução exata na aproximação . A solução exata do problema = () A solução calculada pelo algoritmo ∗ = ∗()
calcule 1.4142 = 1.999396. Então o erro backward será ∆ = 2 − 1.999396 = 0.000604 1.999396 2 Mestre usei um algoritmo para calcular 2 e obtive 2 ≅ 1.414. Como calculo o erro backward?
que permite calcular ∆ = − , o erro reverso (backward error) do algoritmo ∗ em . ∗ f A solução exata do problema Aproximação a descobrir −1 Solução exata na aproximação . A solução calculada pelo algoritmo ∆ Backward error
com o algoritmo, ሚ (), é uma boa aproximação (∆ é pequeno) para a solução ( ) de um problema aproximado (∆ é pequeno). ∆ f ሚ ∆ = ሚ () = ( ) Solução calculada com o algoritmo Solução do problema aproximado
f é bem condicionado e um algoritmo ሚ para calcular a solução é estável poderemos garantir que a solução computada ሚ () e a solução real () estarão próximas. Algoritmo estável ሚ () Resultado confiável () f ሚ Problema bem condicionado
Garantir que o problema é bem condicionado; 2. Usar um algoritmo estável para calcular a solução. Exatamente, Surfista. Então você terá certeza que a solução computada estará próxima da solução real. Veremos isto na prática ao longo do curso.