A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral.

Slides:



Advertisements
Apresentações semelhantes
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Advertisements

Introdução à Ciência da Computação Linguagens de Programação.
Arquitetura e organização de computadores.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Teoria da Computação FIC– Ciência da Computação
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
ARQUITETURAS RISC E CISC
Introdução a Programação Renata Freire
Programação de Computadores - 3
Programação Linear Método Simplex
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
A FAST APRIORI implementation
INTRODUÇÃO À PROGRAMAÇÃO
Introdução à Lógica de Programação (cont.)
Indexação e Hashing Muitas consultas referenciam apenas uma pequena porção dos registros em uma tabela. Portanto necessitamos ser capaz de localizar estes.
Estruturas de Controle
Professor: Erivelto Tschoeke – UDESC/CEPLAN
THOBER CORADI DETOFENO, MSC. Aula 07
Universidade Federal do Espírito Santo
Complexidade de Algoritmos
Linguagens de Programação
Lógica de Programação Módulo II
Lógica de Programação Módulo II
DEDUÇÃO NO CÁLCULO PROPOSICIONAL
INTRODUÇÃO À PROGRAMAÇÃO
UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE MATEMÁTICA
PROGRAMAÇÃO I UNIDADE 1.
Informática Teórica Engenharia da Computação
Aula prática 6 Vetores e Matrizes
Linguagem de Programação II Parte IX
Algoritmos paralelos eficientes para alguns problemas de processamento de Cadeia de Caracteres Alunos: Diego Alencar dos Santos Melo Felipe Formagini Brant.
ENGENHARIA DE AUTOMAÇÃO INDUSTRIAL
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Introdução a Programação
Algoritmos 1º Semestre Materia: Informática Profº: Cristiano.
Laboratório I Mateus Raeder Material baseado nos originais da
Linguagem de programação
TÉCNICAS DE PROGRAMAÇÃO
Processamento de Sinais
Processamento de dados na UCP e memória UCP
Algoritmos e Estruturas de Dados I – Ponteiros
Lógica: Resolução de Problemas e Introdução a Dados PROFº RICARDO JOSÉ BATALHONE FILHO Log.a02.
2. Lógica de Programação Definição de Lógica Definição de Algoritmo
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Capítulo VIII Ambientes de Execução
Execução de programas Cap. VIII.
Experimentação Algorítmica
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Algoritmos e Estruturas de Dados I – Estrutura de Repetição
Distância Mínima de Edição Profa. Sandra de Amo Bacharelado em Ciência da Computação - UFU.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Como analisar um algoritmo
Fundamentos de linguagens de programação
Prof. Edison Oliveira de Jesus
Algoritmos.
Programação de Computadores - 1
Analise de Algoritmos e Notação Assintótica
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Etapas : Algoritmo é uma sequência lógica de instruções que podem ser executadas. É importante destacar que qualquer tarefa que siga um certo padrão.
Algoritmos e Programação I
Metodologia da Pesquisa em Ensino de Ciências I
Algoritmo e Estrutura de Dados I Introdução ao conceito de algoritmo Márcia Marra
Influencias sobre o Projeto da Linguagem
Sistemas para Internet Algoritmos e Lógica de Programação
Introdução a Programação Aula 02 Jackson Eduardo
PREPARAÇÃO DE UM ARTIGO CIENTÍFICO
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Lógica de programação Introdução à lógica de programação
Transcrição da apresentação:

A maior parte dos programas de computador gera uma saída resultante de um processamento que é executado sobre dados que ele recebe como entrada. Em geral a eficiência de um programa é uma função de seus dados de entrada, ou seja, normalmente o tempo de execução de um programa cresce conforme cresce o tamanho, ou a quantidade, dos dados com os quais o programa é alimentado. Entrada SaídaPrograma Introdução Um exemplo de programa de computador Seja a função power(n, x) que calcula o valor de x n. Esta função poderia ser representada por um programa Power com a seguinte forma: n, x xn xn Power Caso fossemos analisar o código do programa Power, este seria mais ou menos assim: n = valor de n lido da entrada; x = valor de x lido da entrada; p = 1; enquanto n > 0 faça p = p * x; n = n - 1; Resultado = p; Esta seqüência finita de passos é denominada o algoritmo de Power. Um Programa Especializado O programa Power está preparado para receber pares de inteiros positivos como dados de entrada. Caso este programa fosse menos flexível, isto é, caso o algoritmo de Power fosse elaborado conhecendo-se um dos valores de entrada, poderia o programa ser mais eficiente? A fim de responder a esta questão, observe uma versão especializada do algoritmo de Power, elaborada para um valor de n sempre igual a 5. Este algoritmo será denominado Power5. x = valor de x lido da entrada; p = 1; p = p * x; Resposta = p; Observe que a variável n não mais aparece no texto do algoritmo de Power5. Como não mais ocorrem testes de parada ou operações aritméticas sobre a variável n, conclui-se que o algoritmo de Power5 é mais eficiente que o algoritmo de Power. Diz-se que Power5 é uma versão de Power especializada com relação a uma parte de sua entrada, neste caso o valor n do expoente da operação x n. Este resultado não é uma coincidência, pois em geral programas especializados com relação a uma parte de sua entrada de dados são mais eficientes que os programas que lhes deram origem. Definição de Avaliação Parcial de Programas A técnica de obtenção de programas especializados a partir de programas não especializados, com relação à parte da entrada de dados destes últimos, é chamada Avaliação Parcial de Progra- mas. A palavra Avaliação é utilizada porque, para que um progra- ma possa ser especializado, o seu algoritmo precisa ser avaliado a fim de que as computações que dependam somente da parte co- nhecida da entrada possam ser previamente realizadas. E esta ava- liação é Parcial porque o código de um programa não é avaliado com relação a todos os seus dados de entrada, mas apenas com base em parte deles. O objetivo principal da avaliação parcial é o ganho em eficiência. Se parte dos dados de entrada de um programa é co- nhecida, as estruturas do programa que dependam apenas dessa parte podem ser previamente computadas. O programa especiali- zado conterá apenas o código necessário para processar os dados ainda não conhecidos. Nomenclatura A parte da entrada de um programa conhecida, que será utilizada durante a Avaliação Parcial é denominada Entrada Estática, ao passo que a parte desconhecida é chamada Entrada Dinâmica. Um Avaliador Parcial é um programa que executa Avaliação Parcial de Programas automaticamente. Um Avalia- dor Parcial recebe como entrada o código de um programa, ou seja, a descrição de seu algoritmo, escrita em uma linguagem de programação, e a entrada estática daquele programa. A saída de um Avaliador Parcial é constituída pelo código especializado obtido a partir do programa de entrada e dos dados estáticos: Código de um Programa Entrada Estática Avaliador Parcial Programa especializado com relação à Entrada Estática A Avaliação Parcial de Programas tem diversas aplicações práticas relacionadas à otimização de programas de computador. Esta técnica é também muito importante em estudos acerca de compilação e geração de compiladores. No restante desta apresentação serão mostrados os resulta- dos conseguidos com a Avaliação Parcial de alguns programas bem conhecidos entre os matemáticos e cientistas da computação. O Avaliador Parcial utilizado chama-se CMIX/II e foi implemen- tado na linguagem C por pesquisadores Dinamarqueses. Avaliação Parcial de Programas Universidade Federal de Minas Gerais Departamento de Ciência da Computação Laboratório de Linguagens de Programação Autor: Fernando M. Q. Pereira Coordenadores: Roberto S. Bigonha, Mariza A. S. Bigonha, Vladimir Oliveira de Iorio

Exemplos de Aplicação Avaliação Parcial de Programas As técnicas de Avaliação Parcial de Programas possuem diversas aplicações, algumas teóricas, outras práticas. Neste material são mostradas duas das principais aplicações das técnicas de Avaliação Parcial: Otimização de Programas. Geração de Compiladores. Otimização de Programas. Otimizar um programa significa melhorar o seu desempenho, seja reduzindo o seu tempo de execução ou os recursos que este programa exige do computador para que possa ser usado. A Avaliação Parcial de um programa muitas vezes permite reduzir o seu tempo de execução na medida em que uma parte do processamento deste programa é realizada durante sua especialização. Neste caso, a Avaliação Parcial é proveitosa quando: T e = Tempo de especialização do programa. T r = Tempo de execução do programa residual (especializado). T o = Tempo de execução do programa original (não especializado). n = Número de execuções dos programas original e especializado. Otimizando um algoritmo de interpolação Dada uma tabela de pontos (pares de abscissas e ordenadas), um algoritmo interpolador permite conhecer valores de pontos que não constam naquela tabela. Tal algoritmo geralmente encontra valores intermediários a partir de polinômios que contenham todos os pontos conhecidos da tabela, a partir dos quais as quantidades desconhecidas podem ser inferidas. Algoritmo de Lagrange: Abaixo segue um exemplo de algoritmo de interpolação. Este algoritmo é conhecido como algoritmo de Lagrange, onde x[i] representa a i-ésima abscissa da tabela, y[i] representa a i-ésima ordenada da tabela, m representa o tamanho da tabela e z representa o abscissa que deve ser interpolada: números inteiros: i, j; números reais: p  0, r  0; Para i de 0 até m faça p  y[i]; Para j de 0 até m faça se i  j então p  p  ((z-x[j])/(x[i]-x[j])); r  r + p; Resposta = r; Algoritmo de Lagrange especializado Este algoritmo foi gerado automaticamente por um Avaliador Parcial a partir do algoritmo mostrado no quadro anterior. números reais: p  0, r  0; p  y[0]; p  p  ((z-x[1])/(x[0]-x[1])); r  r + p; p  y[1]; p  p  ((z-x[1])/(x[0]-x[1])); r  r + p; Resposta = r; Análise de desempenho A versão especializada do algoritmo de Lagrange é quase duas vezes mais rápida que a versão original, conforme resultados obtidos via simulação. Na tabela de resultados, a coluna Erro contém a diferença percentual entre os resultados previstos e apurados de fato. Geração de Interpretadores e de Compiladores. Pode ser demonstrado que é possível gerar interpretadores e compiladores via Avaliação Parcial. Um interpretador recebe um programa qualquer e a entrada de dados desse programa e simula a execução deste programa sobre a entrada. Um compilador é um programa que traduz algoritmos escritos em alguma linguagem de programação para um formato que pode ser executado em algum computador. Um interpretador padrão Programa Fonte Entrada de Dados Resultado da Execução Interpretador de Programas Um interpretador obtido via Avaliação Parcial Avaliador Parcial Resultado da Execução Programa Fonte Interpretador de Programas Entrada de Dados Programa Compilado Um Compilador Padrão Programa Compilado Programa Fonte Resultado da Execução Entrada de Dados Compilador de Programas