Análise de Algoritmos1 Viviane Cristina Dias Fev/2003.

Slides:



Advertisements
Apresentações semelhantes
Christiano Lima Santos
Advertisements

Estruturação de Linguagens (Pascal e C++)
TIPOS ABSTRATOS DE DADOS
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Programação em Java Prof. Maurício Braga
Linguagem de Programação I
Programação em Java Prof. Maurício Braga
Introdução a Algoritmos
SISTEMAS OPERACIONAIS (SO) Aula 5 Luciana A. F. Martimiano 2002
gerador de código intermediário
Introdução à Ciência da Computação Linguagens de Programação.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
05/08/2011 Professor Leomir J. Borba- –
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
03/08/2011 Professor Leomir J. Borba- –
Teste de Software.
ELEMENTOS DA INFORMÁTICA
Software Básico Silvio Fernandes
Algoritmos e Estrutura de Dados I
PROGRAMAÇÃO MODULAR (com uso de subprogramas) prof
Adaptado de material da profa. Maria Aparecida Livi
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Introdução a Informática
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Professora: Norminda Luiza.
Programação orientada a objetos com Java
Algoritmos e Estruturas de Dados II
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 5 Tipos de Dados Universidade do Vale do Rio dos Sinos
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Sincronização e Comunicação entre Processos
Robson Godoi / Sandra Siebra
O Portal do Estudante de Computação
Paradigmas de programação
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
PROGRAMAÇÃO I UNIDADE 1.
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Conceitos de Linguagem de Programação
Modularização de um programa em C
Introdução ao uso de vatores na linguagem PASCAL.
O Portal do Estudante de Computação
Tipos de Dados Paradigmas de Programação
Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados Aula 1: Introdução e conceitos básicos
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Linguagem Pascal Prof. Sérgio Rodrigues.
ARQUIVOS.
Paradigmas de Linguagens de Programação Aula 2
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Aula01 – Técnicas de Programação II
Fundamentos de linguagens de programação
Recursividade Profs. De Prog2 e Lab2.
Arquivos. Motivação Imagine dar entrada (digitar), a cada execução do programa, em todos os dados de um sistema. por exemplo, todos os registro de livros.
Programação de Computadores - 1
Introdução à Programação
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
AULA 09 PROGRAMAÇÃO I. Estruturas de Dados Heterogêneas 10/08/2010 Programação I 2 Objetivo: Estudar os tipos de dados heterogêneos:  Registros;  Arrays.
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS LINGUAGEM DE PROGRAMAÇÃO I Aula /08/2011 Professor Leomir J. Borba-
Professor Luiz José Hoffmann Filho
Métodos de Ordenação Externa
Ordenação Professor Paulo Gomide 27 de outubro de 2015.
Transcrição da apresentação:

Análise de Algoritmos1 Viviane Cristina Dias Fev/2003

Análise de Algoritmos 2 Bibliografia Bibliografia Básica: ZIVIANI, Nívio, Projeto de Algoritmos com Implementação em Pascal e C, Livraria Pioneira. Ed. (pioneira Informática), São Paulo, SP, WIRTH, N. Algoritmos e Estruturas de Dados, Prentice Hall, KNUTH D. E., The Art of Computer Programming, Vol 1 e 3, Addison-Wesley, LAGES, N. A. Castilho, Algoritmos e Estruturas de Dados, LTC, 1994 PEREIRA, S. Lago, Estruturas de Dados Fundamentais Conceitos e Aplicações, São Paulo, Érica, 1996, SZWARCFITER, J. Luiz, Estruturas de Dados e seus Algoritmos, 2 a. edição, LTC. Bibliografia Complementar: VILLAS, Marcos Vianna e Outros, Estrutura de Dados, Editora Campos, MANBER Udi, Introduction to Algorithms: A Creative Approach. Addison-Wesley, Hardcover, Published March EDGEWICK, R., Algorithms, Addison-Wesley, SIPSER, M. Introduction to the Theory of Compution. PWS Publishing Co., 1996.

Análise de Algoritmos 3 Revisão - Pascal Variáveis:  Todo programa usa a memória do computador para armazenar os dados com que lida;  Nome,Tipo;  Integer, Char, Double, String, Boolean e muitos outros; Tipos estruturados definem uma coleção de valores simples, ou um agregado de valores de tipos diferentes. Por exemplo: um tipo estruturado arranjo: Type cartão = array [1..80] of char; Type matriz = array [1..5,1..5] of real; Type coluna = array [1..3] of real; Var x: coluna As atribuições x[1]:= 0.75 x[2]:= 0.85 x[1]:= 1.5

Análise de Algoritmos 4 Revisão - Pascal Tipo estruturado registro é uma união de valores de tipos quaisquer, cujos campos podem ser acessados pelos seus nomes. Exemplo: Type pessoa= record PrimeiroNome: String[10]; Sobrenome: Alfa; Sexo: (mas,fem); End; Declarada a variável Var p: pessoa; Atribuições: p.Sobrenome: = Duarte; p.PrimeiroNome: := Marcos; p.Sexo:= mas;

Análise de Algoritmos 5 Revisão Ponteiro: Um ponteiro proporciona um modo de acesso a variáveis sem referenciá-las diretamente. O mecanismo usada para isto é o endereço da variável. De fato, o endereço age como intermediário entre a variável e o programa que a acessa. Basicamente, um ponteiro é uma representação simbólica de um endereço. Uma das vantagens do uso de ponteiro é que notações de ponteiros compilam mais rapidamente tornando o código mais eficiente.

Análise de Algoritmos 6 Revisão Ponteiro: Um ponteiro proporciona um modo de acesso a variáveis sem referenciá-las diretamente. O mecanismo usada para isto é o endereço da variável. De fato, o endereço age como intermediário entre a variável e o programa que a acessa. Basicamente, um ponteiro é uma representação simbólica de um endereço. Uma das vantagens do uso de ponteiro é que notações de ponteiros compilam mais rapidamente tornando o código mais eficiente.

Análise de Algoritmos 7 Introdução à Análise e Síntese de Algoritmos Modularização: possibilidade de compor uma ação a partir de outras ainda mais primitivas, agrupando-as em unidades sintaticamente fechadas e logicamente relacionadas, isto pode trazer uma série de vantagens a um algoritmo:  aumentar a legibilidade, a eficiência e portabilidade;  facilitar a execução de testes e sua manutenção;  permitir o isolamento de erros e corrigi-los;  permitir compartilhamento de desenvolvimento paralelo; Vantagens da Independência entre as partes

Análise de Algoritmos 8 Introdução à Análise e Síntese de Algoritmos Acoplamento: Grau de interdependência das partes; quanto menor, mais fácil manutenção. Serve como fator de medida de qualidade. Na prática, o ideal é que cada módulo seja relativamente simples, responsável pela consecução de um objeto bem definido e executado o mais independente possível de outros módulos. A comunicação entre módulos deve se dar através de interfaces bem definidas, capazes de transmitir dados de maneira eficiente, reforçando uma boa escolha de suas definições.

Análise de Algoritmos 9 Introdução à Análise e Síntese de Algoritmos Depuração e Validação Não basta ao processo de desenvolvimento apenas produzir soluções modulares. É necessário que cada módulo funcione corretamente. Depuração :Atividade de teste e verificação de um módulo. Os teste devem ser previstos durante a etapa de concepção do próprio módulo e deve anteceder a sua integração com os outros. M1 M2 M3

Análise de Algoritmos 10 Introdução à Análise e Síntese de Algoritmos Testes de Integração Objetivo verificar o funcionamento harmônico dos módulos e garantir que a comunicação entre eles se dê conforme o projetado. Testes de Validação Nesta etapa que dados conhecidos do problema original são submetidos à avaliação e certificados ao atingir soluções esperadas, previamente estabelecidas. M1 Teste M1 M2 M3

Análise de Algoritmos 11 Introdução à Análise e Síntese de Algoritmos Testes durante o período de implantação poderão mostrar eventuais falhas, principalmente aquelas relacionadas com os aspectos específicos dos equipamentos envolvidos e da comunicação com o usuário.

Análise de Algoritmos 12 Introdução à Análise e Síntese de Algoritmos Estruturas Não se pode estudar estruturas de dados sem considerar os algoritmos associados a elas, assim como a escolha dos algoritmos em geral depende da representação e da estrutura dos dados. A escolha da representação dos dados é determinada, entre outras, pelas operações a serem realizadas sobre os dados. Estruturas De Dados Algoritmos

Análise de Algoritmos 13 Análise de Algoritmos Área da computação que visa a determinar a complexidade(custo) de um algoritmo, o que torna possível: Comparar algoritmos: como existem muitos algoritmos que resolvem uma mesma classe de problemas, através dessa medida de complexidade podemos compara-los entre si. Determinar se um algoritmos é “ótimo” Algortimo1Algortimo2 Algortimo1

Análise de Algoritmos14 Algoritmos Recursivos

Análise de Algoritmos 15 Recursão e Relação de Recorrência Alguma coisa é recursiva quando é definida em termos dela própria. Uma definição na qual o item que está sendo definido aparece como parte da definição; Definição indutiva ou recursiva O que eu devo ter?  Uma Base (Casos simples do item a ser definido, são dados explicitamente);  Ponto de Partida  Um Passo Recursivo (Casos do item a ser definido são gerados a partir de casos anteriores);  Gerar novos casos

Análise de Algoritmos 16 Recursão e Relação de Recorrência Relação de Recorrência Exemplo: F(1) = 2para n > 1 F(n) = 2*F(n-1)+1 n=1  F(1) = 2 n=2  F(2) = 2*F(n-1)+1  2*F(2-1)+1  2*[F(1)]+1  2*[2]+1 = 5 n=3  F(3) = 2*F(n-1)+1  2*F(3-1)+1  2*F(2)+1  2*[5]+1 = 11 n=4  F(4) = 2*F(n-1)+1  2*F(4-1)+1  2*F(3)+1  2*[11]+1= 23 Logo: 2, 5, 11, 23...

Análise de Algoritmos 17 Recursão e Relação de Recorrência Exercício: Qual a sequência considerando: F(1) =2para n > 1 F(n) = 2*F(n-1) Sequência Fibonacci F(1) = 1 F(2) = 2 F(n) = F(n-1)+F(n-2)Para n > 2 Considerando: F(1) =2para n > 1 F(n) = 2*F(n-1) Teremos:

Análise de Algoritmos 18 Recursão e Relação de Recorrência - Pascal Escrever um Programa que gere a Série: Function S (Var n:integer):Integer; Var i,valorcorrente:Integer; Begin If n = 1 Then valorcorrente := 2; else Begin i:=2; valorcorrente :=2; While i <= n do Begin valorcorrente := 2*valorcorrente; i:= i+1; end; S := valorcorrente; end; end.

Análise de Algoritmos 19 Recursão e Relação de Recorrência - Pascal Escrever um Programa Recursivo que gere a Série: Function S (Var n:integer):Integer; Var resultado:Integer; Begin If n = 1 Then resultado := 2; else Begin resultado:= S(n-1)*2; end; S := resultado; end;

Análise de Algoritmos 20 Recursão e Relação de Recorrência - C Escrever um Programa Recursivo que gere a Série: Int S (Int n) { int resultado; If (n == 1) resultado = 2; else resultado= S(n-1)*2; return (resultado); } Exercício: Fazer um algoritmo que não use recursividade para gerar a série.

Análise de Algoritmos 21 Recursão e Relação de Recorrência - Pascal Escrever um Programa que gere a Série: Int S (Int n ) { int i,valorcorrente; If (n == 1) valorcorrente = 2; else { i = 2; valorcorrente = 2; While i <= n { valorcorrente := 2*valorcorrente; i++; } S = valorcorrente; return (S); }

Análise de Algoritmos 22 Recursão e Relação de Recorrência Um exemplo ilustrativo é o cálculo de fatorial A função fatorial é definida como: 0! = 1 para n>0: n! = n*(n-1)! e pode ser implementada pelo seguinte algoritmo: função fatorial(n:inteiro): inteiro início se n=0 então retorne 1 senão retorne n*fatorial(n-1) fim {fatorial}