ESTRUTURAS DE DADOS E ALGORITMOS APRESENTAÇÃO DO CURSO E INTRODUÇÃO

Documentos relacionados
Pra início de conversa... O que é um algoritmo? Exemplos de algoritmos. Como podemos descrever algoritmos? Como podemos descrever algoritmos?

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Complexidade de algoritmos Notação Big-O

Projeto e Análise de Algoritmos. Introdução. Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

Análise de Algoritmos

Análise de algoritmos. Parte I

Teoria da computabilidade Indecidíveis Decidíveis

Análise e Técnicas de Algoritmos

COMPLEXIDADE DE ALGORITMOS

Análise de Algoritmos Estrutura de Dados II

Aula 3: Algoritmos: Formalização e Construção

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

Aula 1. Teoria da Computação III

Complexidade de Tempo e Espaço

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Fundamentos de Programação

Técnicas de análise de algoritmos

Programação: Vetores

2. Complexidade de Algoritmos

Introdução à Programação. Vanessa Braganholo

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

01 Análise de Algoritmos (parte 2) SCC201/501 - Introdução à Ciência de Computação II

Construção de Algoritmos II Aula 06

Introdução à Ciência da Computação II

Linguagem de Programação I Prof. Tiago Eugenio de Melo.

01 Análise de Algoritmos (parte 1) SCC201/501 - Introdução à Ciência de Computação II

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Introdução à Ciência da Computação II

Bioinformática. Ney Lemke. Departamento de Física e Biofísica. logo

COMPLEXIDADE DE ALGORITMOS COMPLEXIDADE DE ALGORITMOS

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Introdução à Programação

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Teoria da Computação Aula 8 Noções de Complexidade

Complexidade de Algoritmos

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Técnicas de Programação

Introdução à Programação

TCC 00308: Programação de Computadores I Introdução

Análise de complexidade

Estruturas de Repetição

Teoria da Computação Aula 9 Noções de Complexidade

Introdução à Análise Algoritmos

Aula 02: Custos de um algoritmo e funções de complexidade

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: Operadores relacionais e lógicos estruturas condicionais If...

Aula 02. Algoritmos e Pseudocódigo

ALGORITMOS CONCEITOS PRELIMINARES. Prof. Angelo Augusto Frozza, M.Sc.

Paradigmas de Linguagem de Programação. Paradigma Imperativo

Técnicas de projeto de algoritmos: Indução

Arquitetura de Computadores II

Projeto e Análise de Algoritmos

Fundamentos de Algoritmos (5175/31)

O Que Veremos. Introdução. Introdução. Definindo Desempenho. Definindo Desempenho. Avaliando e Compreendendo o Desempenho

Fundamentos de Programação

Complexidade de Algoritmos

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

MC-102 Aula 01. Instituto de Computação Unicamp

BCC202 - Estrutura de Dados I

Comportamento assintótico

Lógica de Programação I

Introdução aos Algoritmos

Técnicas de Projeto de Algoritmos

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Aula 08 Introdução à Algoritmos. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

a complexidade no desempenho de algoritmos

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

Análise de Complexidade de Algoritmos

Disciplina de Algoritmos e Programação

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Transcrição:

ESTRUTURAS DE DADOS E ALGORITMOS APRESENTAÇÃO DO CURSO E INTRODUÇÃO Adalberto Cajueiro (adalberto@computacao.ufcg.edu.br) Departamento de Sistemas e Computação Universidade Federal de Campina Grande 1

APRESENTAÇÃO DO CURSO Créditos: 4 Carga-horária: 60h Pré-requisitos: Programação II, Laboratório de Programação II, Teoria dos Grafos Dependências: OAC, LOAC, PLP, ATAL Linhas gerais: estudo preliminar sobre algoritmos e avançado sobre estruturas de dados. 2

APRESENTAÇÃO DO CURSO Página do curso de EDA: https://sites.google.com/a/computacao.ufcg.edu.br/ edaufcg Página do curso de LEDA: https://sites.google.com/a/computacao.ufcg.edu.br/l edaufcg/ Para cada disciplina existe um grupo associado (acessível através da página da disciplina) Solicitem para serem adicionados nos grupos URGENTE! Use seu email no domínio ccc.ufcg.edu.br para acessar o TST (tst-eda.splab.ufcg.edu.br)! 3

DICAS PARA A DISCIPLINA (EDA) Acompanhar os avisos no grupo da disciplina e acompanhar o site da disciplina constantemente. Não deixar o assunto acumular. Fazer os exercícios recomendados. Estudar também pelas referências. Fazer uso da monitoria (aulas e horários de atendimento aos alunos). Revisar a matemática necessária. Evitar fazer reposições. Conversar com a turma anterior. 4

DICAS PARA A DISCIPLINA (LEDA) Acompanhar os avisos no grupo da disciplina e acompanhar o site da disciplina constantemente. Não deixar o assunto acumular. Fazer os exercícios recomendados. Estudar também pelas referências. Fazer uso da monitoria (aulas e horários de atendimento aos alunos). Revisar a matemática necessária. Evitar fazer reposições. Conversar com a turma anterior. Crie suas implementações! Não as pegue pronta com o alguem do semestre anterior. 5

AVALIAÇÃO (INFORMAÇÃO NO SITE) EDA 3 provas teóricas LEDA 3 provas práticas roteiros Nota combinada 6

INICIANDO A CONVERSA O que é um algoritmo? Como podemos descrever algoritmos? Como devemos avaliar algoritmos? O que é análise de algoritmos? 7

O QUE É UM ALGORITMO? Procedimento que recebe valores a serem manipulados (entradas) e produz algum valor (ou valores) como saída. Uma sequencia finita de passos/instruções que transformam um conjunto de valores em uma dada situação inicial em uma situação final que satisfaz condições específicas. 8

EXEMPLOS DE ALGORITMOS Receita de bolo Descrição de como trocar o pneu de um carro Algoritmo para resolver equações quadráticas Algoritmo para calcular o MDC, MMC, raiz quadrada Métodos ensinados a crianças para somar, subtrair, multiplicar e dividir inteiros 9

PROGRAMAS X ALGORITMOS Algoritmo Idéia usada para computar alguma coisa Expresso em diversas linguagens naturais Programa Texto que descreve um sistema computacional Expresso em notacoes projetadas para computadores 10

ESCRITA DE ALGORITMOS Linguagem natural? Linguagem de Programação (código)? Pseudo-código? Linguagem Humana pseudo-código Código 11

EXEMPLO Faça um programa que calcula as médias acumuladas de um vetor V com n inteiros. A média deve ser armazenada em um vetor M de n reais. 12

EXEMPLO double[] calculamedia(int[] V){ 1: for i = 1..n 2: soma = 0 3: for j = 1..i 4: soma = soma + V[j] 5: M[i] = soma/i 6: return M } Como avaliar o algoritmo? 13

CRITÉRIOS DE AVALIAÇÃO Corretude Se para toda entrada especificada a saída correta é produzida Simplicidade Facilmente entendido, implementado e mantido Eficiência Inversa da quantidade de recursos requeridos para seu funcionamento 14

DE VOLTA AO EXEMPLO double [] calculamedia(int[] V 1: for i = 1..n 2: soma = 0 3: for j = 1..i 4: soma = soma + V[j] 5: M[i] = soma/i 6: return M } É correto? É simples? É eficiente? 15

CORRETUDE Garantir que em qualquer possível execução, cada bloco faz exatamente o que esperamos que faça Ações relacionadas a corretude: Identificar o que deve ser feito por cada bloco Identificar o estado antes do bloco executar Avaliar o efeito do bloco sobre o estado Caracterizar o estado após a execucao do bloco Provar corretude de algoritmos não é fácil! 16

SIMPLICIDADE Voce teria dificuldade em implementá-lo? Voce teria dificuldades em encontrar erros em uma implementação de outra pessoa? 17

EFICIÊNCIA Não basta dizer apenas se é eficiente mas quão eficiente! Como algoritmo é idéia, como avaliar os recursos que uma idéia consome? Abstrair detalhes de implementação. Refletir apenas o que é intrinseco de cada algoritmo. Comparação com algoritmos que resolvem o mesmo problema ajudam muito na prática. 18

EFICIÊNCIA A eficiência de um algoritmo é relevante? 19

EFICIÊNCIA Por que estudar eficiência? Os algoritmos ajudam a estudar a escalabilidade A eficiência geralmente descreve a linha entre: Tratável, intratável, insolúvel É a moeda da computação Qual é o melhor algoritmo para a solução de um problema? Complexidade x Eficiência 20

EFICIÊNCIA Método experimental várias implementações completas um grande número de execuções controladas medição cautelosa das variáveis de interesse análise (estatística) dos resultados Método analítico idéia: construir um modelo matemático do algoritmo. comparar algoritmos com base nos modelos 21

ABORDAGEM EXPERIMENTAL Executar os dois algoritmos Medir o tempo public static int arraymax(int[] A) {.. } long antes = System.nanoTime(); int x = arraymax(new int [] {4,5,6,1}); long depois = System.nanoTime(); long tempo = depois antes; 22

ABORDAGEM EXPERIMENTAL t (ms) +- 50 medições 1 1 1 1 1 11111111 Algoritmo n Tamanho da entrada 23

Quais fatores influenciam? 24

ABORDAGEM EXPERIMENTAL Fatores que influenciam Tamanho da entrada (n) Hardware Processador Memória Software Sistema Operacional Linguagem de Programação Compilador C/C++ 25

ABORDAGEM EXPERIMENTAL Limitações: Os experimentos são realizados em um número limitado de testes. Os dados podem não indicar a tendência dos valores não testados Os dois algoritmos devem ser testados no mesmo ambiente (hardware e software) Para analisar o tempo de execução, precisamos executar o algoritmo 26

Qual o desafio para comparar algoritmos sem executa-los? 27

Propor uma metodologia para analisar o tempo de execução dos algoritmos 28

OBJETIVOS Considerar todas as entradas Abstrair detalhes: analisar algoritmos independentemente de hardware e software Análise feita em alto nível (pseudo-código) Avaliar sem precisar rodar experimentos public boolean XYZ(int n, ) { } Algoritmos Análises f(n) Matemática 29

CONSIDERAÇÕES O tempo de execução de cada operação primitiva depende do hardware e software, mas de todo modo é constante Hipótese O tempo de cada operação primitiva é praticamente o mesmo 30

OPERAÇÕES PRIMITIVAS Atribuição: a = x Operação aritmética: a+1 Comparação de números: a>b Indexar array: a[i] Retorno de método: return x; Custo unitário: custo(primitiva) = 1 ou Custo constante: custo(primitiva) = c 31

CUSTO DAS OPERAÇÕES Instruções Consecutivas If then else Cmd1; Cmd2; custo(cmd1) + custo(cmd2) if (teste) {... // CustoIf } else {... // CustoElse } custo(teste) + max[custo(if),custo(else)] 32

CUSTO DE OUTRAS OPERAÇÕES Laço for (...) {... // CustoFor } Número de Iterações n * custofor Aninhamento de Laços tempo do laço interno x tempo do laço externo Recursão Mais complexo Veremos dois métodos (iterativo e mestre) 33

EXERCÍCIO 1 Quais as primitivas do algoritmo a seguir? public int max(int x, int y) { if (x > y) return x; else return y; } 34

EXERCÍCIO 1 Quais as primitivas do algoritmo a seguir? public int max(int x, int y) { if (x > y) return x; else return y; } 35

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { long r = 1; for (int i=1; i<=n; i++) r=2*r; return r; } 36

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { long r = 1; for (int i=1; i<=n; i++) r=2*r; return r; } 37

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? custo ( ) long potencia(int n) { long r = 1; for (int i=1; i<=n; i++) r=2*r; return r; } 38

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? custo ( long potencia(int n) { long r = 1; for (int i=1; i<=n; i++) r=2*r; return r; ) } 39

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { long r = 1; for (int i=1; i<=n; i++) r=2*r; ) + return r; ) } custo ( ) + custo ( custo ( 40

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? custo ( custo ( long potencia(int n) { } c1 + for (int i=1; i<=n; i++) r=2*r; ) + return r; ) 41

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + for (int i=1; i<=n; i++) + r=2*r; return r; n*custo ( ) + custo ( ) 42

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + for ( c1 ; i<=n; i++) + r=2*r; return r; n*custo ( ) + custo ( ) 43

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + for ( c1 ; c2*n; i++) + r=2*r; return r; n*custo ( ) + custo ( ) 44

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + for ( c1 ; c2*n; c3*(n-1)) + r=2*r; return r; n*custo ( ) + custo ( ) 45

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + c1 + c2*n + c3*(n-1) + r=2*r; return r; n*custo ( ) + custo ( ) 46

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? custo ( long potencia(int n) { } c1 + c1 + c2*n + c3*(n-1) + n*c4 + ) return r; 47

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + c1 + c2*n + c3*(n-1) + n*c4 + c5 48

EXERCÍCIO 2 Quais as primitivas do algoritmo a seguir? long potencia(int n) { } c1 + c1 + c2*n + c3*(n-1) + n*c4 + c5 custo = 2*c1 + c2*n + c3*(n-1) + n*c4 + c5 49

TIPOS DE ANÁLISES Pior caso 6 tempo de execução (ms) 5 4 3 2 1 0 1 2 3 4 5 6 7 tamanho da entrada Tempo médio Melhor caso 50

MELHOR, PIOR E CASO MÉDIO Pior Caso Mais comum T(n) = tempo máximo para um algoritmo com qualquer entrada de tamanho n Fácil de calcular (sem probabilidade) Caso Médio T(n) = tempo esperado sobre todas as entradas de tamanho n Precisa de uma hipótese da distribuição estatística das entradas Melhor Caso Não acrescenta muita informação Raramente ocorre na prática Logo, não é uma boa medida 51

EXERCÍCIO 4 Qual a expressão do tempo de execução de cada algoritmo? boolean primo(int n) { if (n==2) return true; for (int i=2; i<n; i++) if (n%i==0) return false; return true; } boolean primo(int n) { if (n==2) return true; for (int i=2; i<=n/2; i++) if (n%i==0) return false; return true; } 52

COMPLEXIDADE X HARDWARE Computador 10 7 instruções/seg Supercomputador 10 9 instruções/seg 50nlog 10 (n) Algoritmo de Ordenação 2n 2 53

ANÁLISE Quem ordenará mais rápido com n=10 6? 10 7 instr/s 50nlog 10 (n) 50.10 6.log 10 10 6 /10 7 30 segundos 10 9 instr/s 2n 2 2.10 12 /10 9 = 2000 segundos 54

É importante não só ter uma máquina boa, mas também um algoritmo (tecnologia) eficiente! 55