• Nenhum resultado encontrado

SIN Exemplo de Prova do Conteúdo Semestral

N/A
N/A
Protected

Academic year: 2021

Share "SIN Exemplo de Prova do Conteúdo Semestral"

Copied!
5
0
0

Texto

(1)

SIN5013 - Exemplo de Prova do Conteúdo Semestral

1. Escreva as equações de recorrência dos seguintes métodos (não é necessário resolver, mas é preciso identificar precisamente suas equações de recorrência [desejamos identificar exatamente quantas vezes os comandos hachurados serão executados, no pior caso, em relação a n]). Não é necessário resolver as equações, apenas identificá-las:

void ordena(int[] A, int n) { if (n==1) return;

int maior = n-1; for (int i=0;i<n-1;i++){ if (A[i]>A[maior]) maior=i; }

int temp = A[maior]; A[maior] = A[n-1]; A[n-1] = temp; ordena(A,n-1); } Equação de Recorrência:

T(n) = 0; para n=1

T(n) = T(n-1) + n-1

void hanoi(char ori, char dst, char aux, int n) { if(n <= 1) {

System.out.print("Move de " + ori + " para " + dst); }else { hanoi(ori, aux, dst, n-1); hanoi(ori, dst, aux, n-1); hanoi(aux, dst, ori, 1); } } Equação de Recorrência:

T(n) = 1; para n ≤ 1

T(n) = 2*T(n-1) + T(1)

T(n) = 1; para n ≤ 1

T(n) = 2*T(n-1) + 1

2. Resolva a equação de recorrência a seguir e identifique sua complexidade assintótica θ (não é preciso provar/demonstrar a complexidade assintótica):

T(n) = 1 para n=1 T(n) = T(n-1) + 1 para n>1

1º T(n) = T(n-1) + 1

2º T(n) = (T(n-2) + 1) + 1 = T(n-2) + 2

3º T(n) = (T(n-3) + 1) + 2 = T(n-3) + 3

iº T(n) = T(n-i) + i

para i = n-1

iº T(n) = T(n - (n-1)) + n-1

T(n) = T(1) + n - 1

T(n) = n

T(n-1) = T(n-2) + 1

T(n-2) = T(n-3) + 1

T(n-i) = T(1)

n-i = 1

i = n-1

Demonstrando que T(n) = n :

Caso base: T(1) = 1 => correto

Por hipótese de indução T(n-1) = n-1

T(n) = T(n-1) + 1

(2)

3. Escreva um programa (utilizando um ou mais métodos/funções em código ou pseudo-código) que dado um grafo não direcionado e com n nós retorne o tamanho do maior componente conexo desse grafo. Este grafo pode ser representado por: (a) uma matriz de adjacências booleana com n x n células correspondendo aos n nós do grafo; ou representado por: (b) um arranjo de nós sendo que cada nó possui um arranjo de vizinhos; neste caso, considere que Nó é uma classe ou estrutura que possui os seguintes campos [ou atributos]: numVizinhos (campo do tipo inteiro com o número de vizinhos do respectivos nó), vizinhos (arranjo de ponteiros para Nós com numVizinhos elementos), visitado (campo booleano). Escolha a representação que te convém, se desejar, considere que todas as variáveis são globais/static. Assuma que as variáveis já estão devidamente

inicializadas/preenchidas.

Representação 1 int numNos = n;

boolean[][] adjacencias = new boolean[n][n]; boolean[] visitados = new boolean[n];

Representação 2 int numNos = n;

No[] nos = new No[numNos]

// Calcula o número de nós do maior componente conexo de maneira recursiva utilizando a matriz de adjacencias

private static int calcularTamanhoMaiorComponente4() { for (int i=0;i<numNos;i++) visitados[i] = false;

int maior = 0;

for (int atual=0;atual<numNos;atual++){ if (!visitados[atual]){

visitados[atual] = true;

int temp = 1 + visitarVizinhos(atual); if (temp > maior) maior = temp;

} }

return maior; }

private static int visitarVizinhos(int atual) {

int vizinhos = 0;

for (int v=0;v<numNos;v++){

if (!visitados[v] && adjacencias[atual][v]){

visitados[v] = true; vizinhos += 1 + visitarVizinhos(v); } } return vizinhos; }

(3)

// Calcula o número de nós do maior componente conexo de maneira iterativa utilizando a matriz de adjacencias

private static int calcularTamanhoMaiorComponente3() {

int maior = 0;

LinkedList<Integer> lista = new LinkedList<Integer>();

int atual = 0;

for (int i=0;i<numNos;i++){ atual = i;

if (!visitados[atual]){ int temp = 0;

visitados[atual] = true;

lista.add(atual);

while (!lista.isEmpty()){

temp++;

atual = lista.remove();

for (int v=0;v<numNos;v++){

if (!visitados[v] && adjacencias[atual][v]){

visitados[v] = true;

lista.add(v); }

} }

if (temp > maior) maior = temp; }

}

return maior; }

(4)

// Calcula o número de nós do maior componente conexo de maneira iterativa utilizando o arranjo de vizinhos

private static int calcularTamanhoMaiorComponente2() { for (int i=0;i<numNos;i++) nos[i].visitado = false;

int maior = 0;

LinkedList<No> lista = new LinkedList<No>(); No atual;

for (int i=0;i<numNos;i++){ atual = nos[i];

if (!atual.visitado){ int temp = 0;

atual.visitado = true;

lista.add(atual);

while (!lista.isEmpty()){

atual = lista.remove();

temp++;

for (int v=0;v<atual.numVizinhos;v++){ if (!atual.vizinhos[v].visitado){

atual.vizinhos[v].visitado = true; lista.add(atual.vizinhos[v]); }

} }

if (temp > maior) maior = temp; }

}

return maior; }

(5)

// Calcula o número de nós do maior componente conexo de maneira recursiva utilizando o arranjo de vizinhos

private static int calcularTamanhoMaiorComponente1() { for (int i=0;i<numNos;i++) nos[i].visitado = false;

int maior = 0;

for (int i=0;i<numNos;i++){ if (!nos[i].visitado){

nos[i].visitado = true;

int temp = 1 + visitarVizinhos(nos[i]); if (temp > maior) maior = temp;

} }

return maior; }

private static int visitarVizinhos(No atual) {

int vizinhos = 0;

for (int v=0;v<atual.numVizinhos;v++){ if (!atual.vizinhos[v].visitado){

atual.vizinhos[v].visitado = true;

vizinhos += 1 + visitarVizinhos(atual.vizinhos[v]);

} }

return vizinhos; }

Referências

Documentos relacionados

faz necessário alocar recursos disponíveis para faz necessário alocar recursos disponíveis para atividades de interesse, de modo que alguma medida de desempenho (em geral o custo

(Αυτό το αστείο είναι κλεμμένο από την ταινία Παπα-σούζας με τον Σωτήρη Τζεβελέκο, που τώρα είναι ταξιτζής στην Επίδαυρο.) Με όλα τα παραπάνω, αλλά

Artigo 14 - O FUNDO pagará ainda, a título de remuneração pelo resultado na gestão da carteira, uma taxa de performance correspondente a 20% (vinte por cento) do rendimento das

Todavia, com o propósito de minimizar o problema que se forma em relação à evidenciação do Capital intelectual (CI) das organizações, a contabilidade tem

A leitura é uma atividade que pode ser explicada por diferentes perspectivas teóricas. Nesta aula aprendemos que diferentes perspectivas teóricas explicam o processo de leitura:

Mais de 90% dos entrevistados de todas as faixas etárias acham que animais criados sob as normas de bem-estar originarão produtos de maior qualidade e houve maior percentual de

Como a doença pode ser transmitida entre os cães e dos cães para os humanos, através da urina desses animis ou mesmo pela urina de outros animais

18 - Fica proibida a realização de eventos e reuniões de massa (esportivos, artísticos, culturais, políticos, científicos, comerciais e religiosos), em