lista1 machado

5
Universidade de Brasília - UnB Departamento de Ciência da Computação – CIC/Instituto de Ciências Exatas - IE Disciplina: Projeto e Complexidade de Algoritmos Semestre: 01/2015 Lista 1 Carlos R. Machado Oliveira Matrícula: 15/0055170 Questão 1. a) Escreva um algoritmo para encontrar a mediana de três números distintos, a, b e c; b) Descreva D, o conjunto de entradas para o seu algoritmo, com o mesmo sentido discutido em sala de aula (que corresponde ao item 1.3 do livro da Sara Baase); c) Quantas comparações seu algoritmo faz no pior caso? E no caso médio? d) De forma genérica (independentemente de um particular algoritmo), quantas comparações são necessárias no pior caso para encontrar a mediana de três números? Justifique sua resposta. Resposta: 1. a) Algoritmo 1 a) Mediana de 3 números inteiros Entrada (D): a,b,c, : numeros inteiros Saida (O): mediana: numero inteiro que corresponde a um elemento do conjunto de entrada D 1 //inicializacao 2 mediana := a; 3 //loop principal 4 if a >=b : 5 if c < a: 6 if c >= b: 7 mediana := c; 8 else : 9 mediana := b; 10 else : 11 if c < b: 12 if c > a: 13 mediana := c; 14 else : 15 mediana := b; 16 return mediana ; Resposta: 1. b) Conforme pode ser visto no preâmbulo do Algoritmo 1 a), acima: Entrada (D): a,b,c, : numeros inteiros 1

Upload: machado-oliveira

Post on 16-Jan-2016

213 views

Category:

Documents


0 download

DESCRIPTION

Lista sobre complexidade de algoritmos. Conceitos introdutorios

TRANSCRIPT

Page 1: Lista1 Machado

Universidade de Brasília - UnBDepartamento de Ciência da Computação – CIC/Instituto de Ciências Exatas - IEDisciplina: Projeto e Complexidade de AlgoritmosSemestre: 01/2015

Lista 1Carlos R. Machado OliveiraMatrícula: 15/0055170

Questão 1.a) Escreva um algoritmo para encontrar a mediana de três números distintos, a, b e c;b) Descreva D, o conjunto de entradas para o seu algoritmo, com o mesmo sentidodiscutido em sala de aula (que corresponde ao item 1.3 do livro da Sara Baase);c) Quantas comparações seu algoritmo faz no pior caso? E no caso médio?d) De forma genérica (independentemente de um particular algoritmo), quantascomparações são necessárias no pior caso para encontrar a mediana de três números?Justifique sua resposta.

Resposta: 1. a)

Algoritmo 1 a) Mediana de 3 números inteiros

Entrada (D): a,b,c, : numeros inteirosSaida (O): mediana: numero inteiro que corresponde a um elemento do conjunto deentrada D

1 // i n i c i a l i z a c a o2 mediana := a ;3 // loop p r i n c i p a l4 i f a >=b :5 i f c < a :6 i f c >= b :7 mediana := c ;8 else :9 mediana := b ;

10 else :11 i f c < b :12 i f c > a :13 mediana := c ;14 else :15 mediana := b ;16 return mediana ;

Resposta: 1. b)Conforme pode ser visto no preâmbulo do Algoritmo 1 a), acima:Entrada (D): a,b,c, : numeros inteiros

1

Page 2: Lista1 Machado

Ou, um pouco mais formalmente, D = { a,b,c | a,b,c ∈ R }

Podendo-se dizer que, se D é um conjunto com três elementos inteiros, o algoritmotermina com valor de "mediana"igual ao valor da mediana entre os três elementos de D.

Resposta: 1. c)Como a entrada é muito pequena, é possível perceber que o algoritmo fará, no pior caso,3 operações de comparação e, no melhor caso, 2 operações de comparação.Considerando uma Hipótese de simplificação em que assumimos que os três neumerossão distintos, nota-se ainda que o melhor caso ocorre quando os valores de a,b,c sãofornecidos como entrada já na ordem crescente ou quando o menor dos três números éfornecido na posição do meio (número b). Por outro lado, o pior caso ocorre quando osvalores de a,b,c são fornecidos como entrada na ordem decrescente ou quando o maiordos três números é fornecido na posição do meio (número b).

Para o caso médio de calculo de mediana de 3 números, considerando a quantidade depermutações possíveis:

Pn = n.(n− 1).(n− 2)...2.1 = n!P3 = 3! = 6A partir da análise acima do melhor e pior caso, deduz-se que em metade dos casosteremos uma configuração de valores de a,b,c de melhor caso e na outra metade umaconfiguração de pior caso.

Assim, o número de comparações do caso médio A(n) é:

A(n) = p(Cm).t(Cm) + p(Cp).t(Cp)

Onde:A(n) = Quantidade de comparações no caso médio;p(Cm) = probabilidade de a,b,c ser fornecido numa configuração de melhor caso;t(Cm) = tempo (ou quantidade de comparações) quando a,b,c são fornecidos numaconfiguração de melhor caso;p(Cp) = probabilidade de a,b,c ser fornecido numa configuração de pior caso;t(Cp) = tempo (ou quantidade de comparações) quando a,b,c são fornecidos numaconfiguração de pior caso;

Logo:

A(n) = p(Cm).t(Cm) + p(Cp).t(Cp)

A(n) =1

2.2 +

1

2.3

A(n) =5

2

A(n) = 2.5 comparações

2

Page 3: Lista1 Machado

Resposta: 1. d)3 comparações.De forma genérica, determinar a mediana de um conjunto de números depende daparidade de números (caso seja um conjunto com neumero par de elementos, a medianaserá um elemento do conjunto que o partiona em duas metades de mesma cardinalidade;caso seja um conjunto com neumero ímpar de elementos, a mediana será a média dosdois números que fazem a mesma partição) e dos valores deles. Para três elementos, amediana sempre será um deles, aquele que não for o de valor máximo nem o de valormínimo no conjunto.Conhecer os valores do conjunto (lista) de elementos e tê-los ordenados é útil paracalcular a mediana e, conforme visto na Resposta 1. c) acima, no caso de um conjuntode cardinalidade 3, sem repetições, o pior caso é fazer 3 comparações.

Questão 2.a) Elabore um algoritmo para o menor e o maior elementos, numa lista contendo nentradas;

b) Quantas comparações das entradas da lista são feitas pelo seu algoritmo no pior caso?

Resposta: 2. a)

Algoritmo 2 a) Identificar Maximo e Minimo numa lista

Entrada (D): L: lista de n números, n >= 1Saida (O): (menor, maior): tupla com os indices que apontam as posições do menor edo maior elemeno da lista de entrada

1 // i n i c i a l i z a c a o2 menor := 1 ;3 maior := 1 ;4 atua l := 1 ;5 // loop p r i n c i p a l6 while atua l <=n do :7 i f L [ a tua l ] > maior :8 maior := atua l ;9 else i f L [ a tua l ] < menor :

10 menor := atua l ;11 atua l++;12 return (menor , maior ) ;

Resposta: 2. b)2n comparações. O algoritmo percorre toda a lista e, para cada um dos n elementosdela, compara se o valor do elemento atual é maior que o valor da variável maior e, casonão seja, compara se o valor do elemento atual é menor que o valor da variável menor.Assim, o pior caso seria quando em nenhuma das posições se encontra um elemento comvalor maior que a variável maior definida na inicialização (linha 3) e, comoconsequência, todos os elementos da lista tem seu valor comparado tabém com avariável menor. Logo, no pior caso seriam feitas duas comparações para cada elemento

3

Page 4: Lista1 Machado

da lista, totalizando 2*n comparações. Por simplificação, pode-se dizer que a quantidadede comparações é da ordem de n.

Questão 3.Suponha que voceê tenha 50 moedas de ouro, supostamente com o mesmo peso, masvocê sabe que uma das moedas é falsa. Você tem uma balança com dois braços, e vocêpode colocar qualquer número de moedas em cada um dos braços em um determinadomomento. Cada uma dessas medidas pode ser usada para indicar se ambos os braçossustentam o mesmo peso, ou se um dos braços tem um peso relativamente menorquando comparado ao outro.

a) Escreva o algoritmo para encontrar a moeda falsa.

b) Quantas medidas são feitas no pior caso?

Respostas:3. a)Assumindo que:i) o peso da moeda falsa seja menor que o peso das demais moedas;ii) podemos numerar as moedas, atribuindo um numero de indice a elas;iii) o indice varia de 1..n (n = 50);iv) a complexidade do procedimento readPeso(lista) será desconsiderada 1.v) não será usada recursão

Algoritmo 3 a) Identificar Moeda falsa

Entrada (D): L: lista de n moedas, n >= 2 (n = 50)Saida (O): index: indice que aponta a moeda falsa (index = 0, se todas as moedastiverem o mesmo peso)

1 // i n i c i a l i z a c a o2 index := 0 ;3 f i r s t := 1 ;4 l a s t := n ;5 meio := p i so ( ( f i r s t + l a s t ) /2) ;6 // loop p r i n c i p a l7 while l a s t − f i r s t >= 1 do :8 i f ( l a s t− f i r s t +1) mod 2 ==0:9 // q tde PAR de moedas

10 peso_le f t := readPeso ( L [ f i r s t : meio ] ) ;11 peso_right := readPeso ( L [ meio+1: l a s t ] ) ;12 i f peso_le f t < peso_right :13 l a s t := meio ;14 index := f i r s t ;1516 else i f peso_le f t > peso_right :17 f i r s t := meio + 1 ;18 index := l a s t ;19

1p. ex.: leitura direta do hardware da balança

4

Page 5: Lista1 Machado

20 i f peso_le f t == peso_right :21 index :=0;22 return index ; // sa i do loop e re torna re spo s t a23 // re torna 0 ( zero ) caso todas as moedas tenham mesmo peso2425 else :26 // q tde IMPAR de moedas27 peso_le f t := readPeso ( L [ f i r s t : meio−1] ) ;28 peso_right := readPeso ( L [ meio+1: l a s t ] ) ;2930 i f peso_le f t == peso_right :31 index :=meio ;32 return index ; // sa i do loop e re torna re spo s t a33 else i f peso_le f t < peso_right :34 l a s t := meio −1;35 index := f i r s t ;36 else :37 f i r s t := meio +1;38 index := l a s t ;3940 meio := p i so ( ( f i r s t + l a s t ) /2) ;41 // c a l c u l o do meio se mantem42 // para q tde de moedas par | | impar43 return index ;

3. b)No pior caso, são feitas 5 medidas.

Analisando o Algoritmo 3. a), acima, e assumindo que:i) o indice retornado sera o meio em alguma das iterações; ou ii) caso (i) não seconfirme, o indice será um dos extremos (first || last) da lista final, na comparação depeso das últimas duas moedas;iii) a cardinalidade de moedas a terem seus pesos comparados cai pela metade a cadaiteração.

Assim, a cada iteração, o problema que inicialmente tem n moedas2 passa a tern

2moedas (ou

n

2− 1 moedas) e, sucessivamente,

n

4,n

8,n

16...

Logo, podemos afirmar, de acordo com a bibliografia de referência e demonstração emsala, que no pior caso(w(n)) a quantidade de medidas é log2(n)

w(n) = log2(n)w(50) = log2(50)w(50) = 5.644 medidas.

Por simplicidade, podemos dizer que o número de medidas é da ordem de log(n)

2n = 50, no caso presente

5