• Nenhum resultado encontrado

E STRUTURAS DED ADOSEA LGORITMOS A PRESENTAÇÃO

N/A
N/A
Protected

Academic year: 2019

Share "E STRUTURAS DED ADOSEA LGORITMOS A PRESENTAÇÃO"

Copied!
28
0
0

Texto

(1)

E

STRUTURAS DE

D

ADOS E

A

LGORITMOS

A

PRESENTAÇÃO DO

C

URSO E

I

NTRODUÇÃO

Adalberto Cajueiro (adalberto@computacao.ufcg.edu.br) Departamento de Sistemas e Computação

Universidade Federal de Campina Grande

1

A

PRESENTAÇÃ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.

Página do professor:

(2)

A

PRESENTAÇÃ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/ ledaufcg/

Para cada disciplina existe um grupo associado (acessível através da página da disciplina)

Solicitem para serem adicionados nos grupos URGENTE!

3

D

ICAS PARA A

D

ISCIPLINA

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

(3)

D

ICAS PARA A

D

ISCIPLINA

(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

A

VALIAÇÃO

(

INFORMAÇÃO NOSITE

)

EDA

 3 provas teóricas

LEDA

 3 provas práticas

 16 roteiros

 Bonificação na média (critérios a definir)

(4)

I

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

(5)

E

XEMPLOS DE

A

LGORITMOS

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

P

ROGRAMAS X

A

LGORITMOS

Algoritmo

 Idéia usada para computar alguma coisa

 Expresso em diversas linguagens naturais

Programa

 Texto que descreve um sistema computacional

(6)

E

SCRITA DE

A

LGORITMOS

Linguagem natural?

Linguagem de Programação (código) ?

Pseudo-código?

Linguagem

Humana Código

pseudo-código

11

E

XEMPLO

(7)

E

XEMPLO

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

C

RITÉRIOS DE AVALIAÇÃO

Corretude

 Se para toda entrada especficada a saída correta é produzida

Simplicidade

 Facilmente entendido, implementado e mantido

Eficiência

(8)

D

E VOLTA AO

E

XEMPLO

double [1..n] calculaMedia(int V[1..n]){ 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

C

ORRETUDE

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

(9)

S

IMPLICIDADE

Voce teria dificuldade em implementá-lo?

Voce teria dificuldades em encontrar erros em uma implementação de outra pessoa?

17

E

FICIÊ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.

(10)

E

FICIÊNCIA

A eficiência de um algoritmo é relevante?

19

E

FICIÊ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?

(11)

E

FICIÊ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

A

BORDAGEM

E

XPERIMENTAL

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

();

(12)

A

BORDAGEM

E

XPERIMENTAL

1 1 1 1 1

11111111 t (ms)

n

Algoritmo

Tamanho da entrada +- 50

medições

23

(13)

A

BORDAGEM

E

XPERIMENTAL

Fatores que influenciam

 Tamanho da entrada (n)

 Hardware

Processador

Memória

 Software

Sistema Operacional Linguagem de Programação

Compilador

C/C++

25

A

BORDAGEM

E

XPERIMENTAL

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

(14)

Qual o desafio

para comparar

algoritmos sem

executa-los?

27

Propor uma

metodologia

(15)

O

BJETIVOS

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

29

public boolean XYZ(int n, …) { …

… }

f(n)

Algoritmos

Matemática Análises

C

ONSIDERAÇÕES

O tempo de execução de cada operação primitiva depende do hardware e software, mas de todo modo é constante

Hipótese

(16)

O

PERAÇÕES

P

RIMITIVAS

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

31

Custo constante: custo(primitiva) = c

ou

C

USTO DAS

O

PERAÇÕES

Instruções Consecutivas

If then else

Cmd1;

Cmd2; custo(Cmd1) + custo(Cmd2)

if (teste) { ... // CustoIf } else {

... // CustoElse }

custo(teste) +

(17)

C

USTO DE OUTRAS

O

PERAÇÕES

Laço

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)

for (...) {

... // CustoFor }

n * custoFor

Número de Iterações

33

E

XERCÍCIO

1

Quais as primitivas do algoritmo a seguir?

public int max(int x, int y) {

if (x > y)

(18)

E

XERCÍ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

E

XERCÍ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;

(19)

E

XERCÍ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

E

XERCÍ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;

}

(20)

E

XERCÍ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 (

39

E

XERCÍ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 (

(21)

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

for (int i=1; i<=n; i++)

r=2*r;

return r;

}

)

c1

+

custo (

) +

custo (

41

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

for (

int i=1

;

i<=n

;

i++

)

+

r=2*r;

return r;

}

(22)

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

for (

c1

;

i<=n

;

i++

)

+

r=2*r;

return r;

}

)

c1

+

n*custo (

) +

custo (

43

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

for (

c1

;

c2*n

;

i++

)

+

r=2*r;

return r;

}

(23)

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

for (

c1

;

c2*n

;

c3*(n-1)

)

+

r=2*r;

return r;

}

)

c1

+

n*custo (

) +

custo (

45

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

c1 +

c2*n + c3*(n-1)

+

r=2*r;

return r;

}

(24)

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

c1 +

c2*n + c3*(n-1)

+

return r;

}

)

c1

+

n*c4 +

custo (

47

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

c1 +

c2*n + c3*(n-1)

+

}

(25)

E

XERCÍCIO

2

 Quais as primitivas do algoritmo a seguir?

long potencia(int n) {

c1 +

c2*n + c3*(n-1)

+

}

c1

+

n*c4 +

c5

custo = 2*c1 + c2*n + c3*(n-1) + n*c4 + c5

49

T

IPOS DE

A

NÁLISES

0 1 2 3 4 5 6

1 2 3 4 5 6 7

tamanho da entrada

(26)

M

ELHOR

, P

IOR E

C

ASO

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

E

XERCÍ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;

(27)

C

OMPLEXIDADE

X

H

ARDWARE

Supercomputador 109 instruções/seg

2n2 Computador

107 instruções/seg

50nlog10(n) Algoritmo de Ordenação 53

A

NÁLISE

Quem ordenará mais rápido com n=106?

50.106.log

10106/107≈ 30 segundos

2.1012/109 = 2000 segundos

109 instr/s

2n2

107 instr/s

(28)

É importante não só ter uma

máquina

boa, mas também um

algoritmo

(tecnologia) eficiente!

Referências

Documentos relacionados

Desde 2012, um grupo de docentes, investigadores e alunos da Faculdade de Ciências Sociais e Humanas da Universidade Nova de Lisboa (NOVA FCSH) têm vindo a desenvolver

 Cada elemento (nó) da lista contém um dado armazenado e um apontador para o próximo elemento da lista?.  Estrutura recursiva com

 Para algumas aplicações, skip lists são mais naturais que árvore e levam a algoritmos mais simples e fáceis de implementar..  Performance melhorada por um fator constante em

 Alguns conjuntos dinamicos pressupoem que existe uma relação de ordem entre as chaves.. Isso permite falar do próximo elemento ao invés de um elemento

 Chaves que colidam precisam ter seu hash code “recalculado” para encontrar um slot vazio?.  Todas as chaves estão em

 A alocação dinâmica é muito utilizada em problemas de estrutura de dados como por exemplo, listas encadeadas, pilhas, filas, arvores binárias e grafos ...  O interessante

Os roedores (Rattus norvergicus, Rattus rattus e Mus musculus) são os principais responsáveis pela contaminação do ambiente por leptospiras, pois são portadores

and generally occur associated with mafic mineral aggregates, where titanite forms continuous rims around ilmenite (Fig.. Table 1- Modal composition of the studied rocks