






Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
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
1 / 10
Esta página não é visível na pré-visualização
Não perca as partes importantes!







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)
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); } }
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).
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.
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.
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.
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() { } }
(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?
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 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.
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
, p ois o valor de sum atinge N 5 = 6 N 4 = 4 N 3 = 6 + N 2 =4.
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
, 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=
i=
iX 1
j =
ijX 1
k =
Note o efeito da op era~ao % na omplexidade do programa.
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).)
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.
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.
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!℄
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.