Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Algoritmos e Complexidade: Exercícios Resolvidos, Notas de estudo de Mecatrônica

Este documento contém exercícios resolvidos relacionados a algoritmos e complexidade, abordando temas como busca binária, algoritmos recursivos, complexidade de algoritmos e outros. Além disso, é fornecido um programa java para ilustrar alguns dos conceitos abordados.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 02/08/2006

hugo-makoto-6
hugo-makoto-6 🇧🇷

4.7

(78)

241 documentos

1 / 10

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Lista de Exerios 1 { PMR 2300 | 1o. semestre 2005
Prof. Fabio Cozman
Linguagem Java, Analise de Algoritmos, Reurs~ao, Busa sequenial e binaria e Ordenamento
(sele~ao, inser~ao e uni~ao)
1. Qual String e impressa pelo programa:
publi lass What {
publi stati void f(int x) {
x=2;
}
publi stati void main(String args[℄) {
int x = 0;
f(x);
System.out.print
ln("Hey: " + x);
}
}
2. Considere o seguinte exemplo de altera~ao de um arranjo passado por refer^enia para um metodo
hamado
doIt
:
publi stati void doIt(int h[℄) {
int k[℄ = new int[2 * h.length℄;
for (int i=0; i<h.length; i++) {
k[i℄ = h[i℄;
k[i+h.length℄ = h[i℄;
}
h = k;
k[0℄ = 2;
}
Esse odigo ontem um erro. Reesreva-o de forma a garantir que o arranjo
h
na hamada da fun~ao
e modiado (seu tamanho e onteudo s~ao dupliados, e seu elemento 0 reebe o valor 2).
3. Esreva um pequeno metodo em Java que reeba dois arranjos a e b de tamanho igual, ontendo
valores do tipo double, e retorne o produto esalar de a e b.
4. Elabore um programa reursivo que alule o Mnimo Divisor Comum de dois inteiros usando o
seguinte algoritmo, onheido omo algoritmo de Eulides: Divida o numero maior pelo menor e
pegue o resto; ent~ao divida o divisor pelo resto e assim suessivamente ate que o resto seja zero |
o quoiente da ultima divis~ao e o divisor omum. Por exemplo, tome 928 e 100: dividimos 928 por
100, obtemos resto 28; dividimos 100 por 28, obtemos resto 16; dividimos 28 p or 16, obtemos resto
12; dividimos 16 por 12, obtemos resto 4; dividimos 12 por 4 e obtemos resto zero | o resultado e 4.
5. Esreva uma lasse hamada
Complexo
que opera sobre numeros omplexos. O onstrutor basio
deve ser:
Complexo( double a, double b )
.
Um segundo onstrutor deve ser provideniado para riar o numero real
a
:
Complexo( double a )
.
Codique os metodos
add(Complexo )
,
subtrat(Complexo )
,
multiply(Complexo )
e
divide(Complexo )
.
6. Considere que vo^e omprou uma bibliotea ontendo a lasse
Complexo
, ujo manual india:
1
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe Algoritmos e Complexidade: Exercícios Resolvidos e outras Notas de estudo em PDF para Mecatrônica, somente na Docsity!

Lista de Exer  ios 1 { PMR 2300 | 1o. semestre 2005 Prof. Fabio Cozman

Linguagem Java, Analise de Algoritmos, Re urs~ao, Bus a sequen ial e binaria e Ordenamento (sele~ao, inser~ao e uni~ao)

  1. Qual String e impressa p elo programa:

publi lass What { publi stati void f(int x) { x = 2; } publi stati void main(String args[℄) { int x = 0; f(x); System.out.println("Hey: " + x); } }

  1. Considere o seguinte exemplo de altera~ao de um arranjo passado p or refer^en ia para um meto do hamado doIt:

publi stati void doIt(int h[℄) { int k[℄ = new int[2 * h.length℄; for (int i=0; i<h.length; i++) { k[i℄ = h[i℄; k[i+h.length℄ = h[i℄; } h = k; k[0℄ = 2; }

Esse odigo ontem um erro. Rees reva-o de forma a garantir que o arranjo h na hamada da fun~ao e mo di ado (seu tamanho e onte udo s~ao dupli ados, e seu elemento 0 re eb e o valor 2).

  1. Es reva um p equeno meto do em Java que re eba dois arranjos a e b de tamanho igual, ontendo valores do tip o double, e retorne o pro duto es alar de a e b.
  2. Elab ore um programa re ursivo que al ule o Mnimo Divisor Comum de dois inteiros usando o seguinte algoritmo, onhe ido omo algoritmo de Eu lides: Divida o n umero maior p elo menor e p egue o resto; ent~ao divida o divisor p elo resto e assim su essivamente ate que o resto seja zero | o quo iente da ultima divis~ao e o divisor omum. Por exemplo, tome 928 e 100: dividimos 928 p or 100, obtemos resto 28; dividimos 100 p or 28, obtemos resto 16; dividimos 28 p or 16, obtemos resto 12; dividimos 16 p or 12, obtemos resto 4; dividimos 12 p or 4 e obtemos resto zero | o resultado e 4.
  3. Es reva uma lasse hamada Complexo que op era sobre n umeros omplexos. O onstrutor basi o deve ser: Complexo( double a, double b ). Um segundo onstrutor deve ser providen iado para riar o n umero real a: Complexo( double a ). Co di que os meto dos add(Complexo ), subtra t(Complexo ), multiply(Complexo ) e divide(Complexo ).
  4. Considere que vo ^e omprou uma bibliote a ontendo a lasse Complexo, ujo manual indi a:

publi lass Complexo: publi Complexo(double a, double b); publi Complexo add(Complexo ); publi Complexo subtra t(Complexo ); publi Complexo multiply(Complexo ); publi Complexo divide(Complexo );

Vo ^e deseja riar uma lasse omo Complexo, p orem om meto dos adi ionais que p ermitem somar, subtrair, dividir e multipli ar p or um n umero real:

publi Complexo add(double d); publi Complexo subtra t(double d); publi Complexo multiply(double d); publi Complexo divide(double d);

Co di que uma lasse SuperComplexo que ontem to da a fun ionalidade indi ada anteriormente us- ando o esquema de hierarquias de Java.

  1. Es reva um algoritmo re ursivo que transforme um n umero inteiro de imal em um n umero binario.
  2. Considere a fun~ao f (n) de nida re ursivamente omo segue: f (0) = 0; f (n) = f (n=2) se n e par; f (n) = 1 + f (n 1) se n e impar. Co di que essa fun~ao em Java e obtenha o valor de f (100).
  3. Considere o seguinte algoritmo:

int exer i io1(int x) { if (x < 5) return(3*x); else return(2 * exer i io1(x-5) + 7); }

Qual e o resultado de exer i io1(4) e exer i io1(20)? Desenhe a arvore de hamadas re ursivas para ada aso.

  1. Considere o seguinte algoritmo:

int exer i io2(int x, int y) { if (x > y) return(-1); else { if (x == y) return(1); else return(x * exer i io2(x+1, y) + exer i io2(2*x,y)) } }

Qual e o resultado de exer i io2(10,4), exer i io2(4,3), exer i io2(4,7)? Desenhe a arvore de hamadas re ursivas para ada aso.

  1. Dado o fragmento de odigo abaixo, desenhe a arvore de re urs~ao para f (1; 10) e obtenha o valor de retorno.

aeroporto. A lasse Aeroporto tem atributo String nome. Finalmente, a lasse Reserva tem atributos double valor e Passageiro pass. Es reva odigo para to das as lasses do pa ote; n~ao e ne essario es rever odigo no orp o das fun~oes (deixe em bran o). DICA: O odigo para a lasse Passageiro e

pa kage aeroporto; publi lass Passageiro extends Pessoa { int ID; publi void a ess() { } }

  1. Considere um pa kage denominado es ola. Temos as seguintes lasses. Classe Pessoa tem atrib- utos publi String nome e private int ID. Classe Aluno e sub lasse de Pessoa e tem atributos private int numero. Classe Area tem atributo prote ted int odigo. Classe Habilita ao e sub lasse de Area e tem atributo Aluno aluno.

(a) Co di que uma implementa~ao simples para ada lasse. Se houver membros om a esso n~ao indi ado no diagrama de lasses, assuma a esso p ubli o para esses membros. (b) E p ossvel a essar:  odigo em Area a partir de Pessoa? De Aluno? De Habilita ao? De lasses em outro pa ote?  nome em Pessoa a partir de Pessoa? De Aluno? De Habilita ao? De lasses em outro pa ote?

  1. Considere as seguintes lasses:

 Tree ( ontem uma variavel age que e prote ted)  De iduous extends Tree  Evergreen extends Tree  Pine extends Evergreen  Forest

Sup onha que to das as lasses est~ao no mesmo pa kage. Desenhe um diagrama de lasses simpli ado, sem indi ar meto dos nem variaveis. Quais lasses p o dem a essar a variavel age da lasse Tree? Sup onha agora que to das as lasses estejam em pa kages diferentes; quais lasses p o dem a essar a variavel age da lasse Tree?

  1. Considere o meto do:

1 void prova(int a[℄, int b[℄, int ) { 2 BinarySear h s = new BinarySear h(a); 3 int i = s.sear h( ); 4 for (int j = 0; j<a.length; j++) 5 for (int k=0; k<b.length; k++) 6 System.out.println( j + s.sear h(b[k℄) ); 7 }

onde BinarySear h e uma lasse p ubli a que exe uta bus a binaria em arranjos; o onstrutor de BinarySear h re eb e um arranjo de inteiros e o meto do p ubli o sear h(int ) pro ura o inteiro no arranjo, retornando o ndi e de no arranjo. Sup onha que e que to dos os elementos de b sempre est~ao em a. Considere que a e b p o dem ter tamanho N e no pior aso os dois tem tamanho N.

(a) Qual a omplexidade do programa em nota~ao BigOh no pior aso? Justi que. (b) Sup onha que a ter eira linha seja removida; qual a omplexidade do programa resultante em nota~ao BigOh, no pior aso? Justi que. ( ) Sup onha que a sexta linha seja substituda p or System.out.println( j + k ). Qual a omplexidade do programa resultante em nota~ao BigOh no pior aso? Justi que. (d) Sup onha que a quarta e quinta linhas sejam substitudas p or for (j = i; j<a.length; j++) for (k = j; k<b.length; k++) Qual a omplexidade do programa resultante em nota~ao BigOh no pior aso? Justi que.

  1. Considere uma bus a sequen ial de um elemento X em um arranjo de N elementos. Normalmente assumimos que ada ompara~ao utilizada na bus a tem um usto xo. Sup onha p orem que ada ompara~ao exija uma bus a binaria no arranjo de N elementos. Qual e a omplexidade da bus a de X em nota~ao BigOh no pior aso?
  2. Para o odigo a seguir, indique o tre ho rti o do programa (isto e, as linhas que se rep etem mais vezes). Determine o valor da variavel sum ao nal. Indique a omplexidade no pior aso em nota~ao BigOh. Justi que.

int sum = 0; for (int i=0; i<n; i++) for (int j = 0; j<(n*i); j++) for (int k=0; k<j; k++) sum++;

DICA: O resultado e O

N 5

, p ois o valor de sum atinge N 5 = 6 N 4 = 4 N 3 = 6 + N 2 =4.

  1. Para o odigo a seguir, indique o tre ho rti o do programa. Determine o valor da variavel sum ao nal. Indique a omplexidade no pior aso em nota~ao BigOh. Justi que.

int sum = 0; for (int i=0; i<n; i++) sum++; for (int i=0; i<n; i++) for (int j=0; j<(i*i); j++) if ((j%i) == 0) for (int k=0; k<j; k++) sum++;

DICA: O resultado e O

N 4

, p ois o valor de sum atinge N 4 = 8 5 N 3 = 12 + 3 N 2 = 8 11 N =12. Este valor e obtido p ela express~ao NX 1

i=

NX 1

i=

iX 1

j =

ijX 1

k =

Note o efeito da op era~ao % na omplexidade do programa.

  1. Demonstre que o seguinte programa leva a um lo op in nito para n maior que 2.

publi boolean verify(int x, int y, int z, int n) { boolean flag = false; int auxX, auxY, auxZ; while (flag == false) {

int doIt1(int a[℄) { int n = a.length; int sum = 0; for (int i=0; i<=n; i++) for (int j=0; j<=i; j++) sum += a[i℄ * a[j℄; return(sum); } int doIt2(int a[℄) { int n = a.length; int sum = 0; int sum2 = 0; for (int i=0; i<=n; i++) { sum += a[i℄; sum2 += a[i℄ * a[i℄; } return( (sum * sum + sum2)/2 ); }

(a) Determine a omplexidade de ada meto do no pior aso em nota~ao BigOh. (b) Prove que os dois meto dos retornam o mesmo resultado. (Di a: Use indu~ao nita em n, o tamanho do vetor a. Note que os dois meto dos retornam o mesmo resultado para n = 1, assuma que os resultados s~ao iguais para n generi o e prove que s~ao iguais para (n + 1).)

  1. Considere o seguinte meto do:

publi void doIt(int a[℄, int b[℄) { Ordena.ordena(a); for (int i=0; i<b.length; i++) { int aux = BinarySear h.sear h(a, b[i℄); for (int j=aux; j<a.length; j++) System.out.println(a[j℄); } }

onde:

 void ordena(int a[℄) e um meto do de lasse (da lasse Ordena) que faz o ordenamento do arranjo a).  int sear h(int a[℄, int x) e um meto do de lasse (da lasse BinarySear h) que faz bus a binaria do elemento x no arranjo a e retorna o ndi e de x em a.  a e b s~ao arranjos de tamanho maximo N.  to dos os elementos de b est~ao em a (os elementos de b p o dem ser rep etidos).

Qual a omplexidade em nota~ao BigOh no pior aso em fun~ao de N para (justi que!):

(a) meto do ordena implementado om ordena~ao p or inser~ao. (b) meto do ordena implementado om mergesort.

  1. Vo ^e foi hamado p or uma empresa para analisar um blo o fundamental de programas de ontrole de uxo de aixa. Vo ^e identi ou que o seguinte meto do e hamado muito frequentemente:

publi int doIt(int a[℄) { int i, j, k; int sum = 0; int aux = 1; for (i=0; i<a.length; i++) { sum++; aux = a[i℄; } for (i=0; i<a.length; i++) { for (j=0; j<a.length; j++) { sum++; aux = aux + (a[i℄ - a[j℄); } } for (i=0; i<a.length; i++) for (j=i; j<(2i); j++) for (k=j; k<(j+5); k++) sum++; return(sum+aux); }

(a) Determine a omplexidade do programa em fun~ao de N , o tamanho do vetor de entrada a, em nota~ao BigOh. Justi que. (b) Co di que o programa de forma que o resultado seja o mesmo mas a omplexidade seja O ( N ). Justi que.

  1. Considere uma re urs~ao em que ada problema de tamanho N e dividido re ursivamente em 4 sub- problemas. Cada um desses sub-problemas tem tamanho N =2. Assuma que N e um n umero ujo logaritmo em uma base onveniente e um n umero inteiro. Qual e a omplexidade dessa re urs~ao para um problema de tamanho N , se o \ usto" de unir as solu~oes dos quatro sub-problemas de um uni o problema de tamanho N e exatamente N 2 , e o \ usto" de resolver um problema om N = 1 e exatamente 1. DICA: Considere o primeiro aso. A re urs~ao leva a seguinte express~ao:

T (N ) = 4 T (N =2) + N 2 :

Po demos es rever T (N =2) = 4 T (N =4) + N 2 = 4 e p ortanto: T (N ) = 16 T (N =4) + N 2 + N 2 : Da mesma forma:

T (N =4) = 4 T (N =8) + N 2 = 16 ) T (N ) = 64 T (N =8) + N 2 + N 2 + N 2 :

Seguindo nesse ra io nio, atingimos:

T (N ) = 4 k^ T (N = 2 k^ ) + k N 2 :

Para k = log 2 N (p ois a arvore de re urs~ao tera tamanho log 2 N ):

T (N ) = N 2 T (1) + N 2 log 2 N :

Portanto a omplexidade e O

N 2 log N

Es reva a equa~ao re ursiva que deve ser resolvida para obter a omplexidade deste fragmento de odigo em nota~ao BigOh, onsiderando o pior aso. Indique tambem as ondi~oes de ontorno que devem ser atendidas p ela solu~ao (isto e, qual a omplexidade da parada da re urs~ao). Justi que a resp osta. [Note: n~ao ha ne essidade de resolver a equa~ao!℄

  1. Resolva as seguintes equa~oes re ursivas, expressando o resultado em nota~ao BigOh e assumindo que N e uma p ot^en ia na base mais onveniente:

 T (1) = 1, T (N ) = 3 T (N =2) + N.  T (1) = 1, T (N ) = 7 T (N =3) + N 2.  T (1) = 1, T (N ) = 2 T (N 1) + N.