Buscar

Tópicos Integradores II (Ads) (AOL 4)


Prévia do material em texto

1. Pergunta 1 
/1 
As tabelas hash podem ser desenvolvidas à mão, porém, no Java existe a chamada API 
Collection, que auxilia na aplicação desta estrutura sem necessariamente precisar criar 
do zero, através da interface SET<T> com a instanciação da classe HashSet<T> (). 
Embora esteja usando a interface SET, os comandos para inserir, editar, pesquisar e 
remover possuem, basicamente, a mesma sintaxe para quase todas as coleções. 
Analise a situação a seguir: 
import java.util.HashSet; 
import java.util.Set; 
public class Prj_Hash { 
 public static void main(String args[]) 
 { 
 Set<Integer> hasht=new HashSet<Integer>(); 
 hasht.add(100); 
 System.out.println("remover:"+hasht.remove(100)); 
 System.out.println("contains:"+ hasht.contains(100)); 
 } 
} 
Assim, considerando as informações apresentadas e os conteúdos estudados, analise 
as operações a seguir e associe-as às suas respectivas características: 
1) add 
2) remove 
3) contains 
4) iterator 
5) isEmpty 
I. ( ) Remove elementos da estrutura 
II. ( ) Retorna um objeto navegável através de um padrão de projeto 
III. ( ) Retorna se contém elementos na estrutura ou não 
IV. ( ) Busca elementos na estrutura 
V. ( ) Insere elementos na estrutura 
Agora, assinale a alternativa que apresenta a sequência correta: 
Ocultar opções de resposta 
1. 
1, 2, 4, 3, 5. 
2. 
2, 4, 5, 1, 3. 
3. 
2, 5, 4, 3, 1. 
4. 
5, 4, 2, 3, 1. 
5. 
2, 4, 5, 3, 1. 
Resposta correta 
2. Pergunta 2 
/1 
O hash é uma estrutura de dados que se fundamenta no conceito de hashing, que, 
resumindo, trata-se de uma série de cálculos de dados juntamente com a quantidade 
de espaços disponíveis em memória. Esta técnica é muito utilizada em criptografia de 
textos, números, dados em geral e até bits. As principais formas de criptografia provêm 
de uma variação do hashing que carrega não somente o dado, mas a quantidade de bits 
e constantes (variáveis estáticas), para poder criptografar um dado de forma única. 
Analise a situação a seguir: 
public static int getHashCode(int valor, int tamanho){ 
 ---------------- 
 return hashcode; 
} 
Com base nessas informações e no conteúdo estudado, podemos dizer que o cálculo do 
hashing do código acima é: 
Ocultar opções de resposta 
1. 
int hashcode = Math.pow(valor,tamanho); 
2. 
int hashcode = valor % tamanho; 
Resposta correta 
3. 
int hashcode = Math.random() * (valor / tamanho) * 10; 
4. 
int hash = valor % tamanho; 
5. 
int hashcode = valor + tamanho / tamanho; 
3. Pergunta 3 
/1 
A estrutura hash possui um dos melhores desempenhos dentro de uma grande 
estrutura de dados, pois sua notação de big O(1) é uma constante. Ou seja, para N 
dados, temos apenas um conjunto de instruções a se buscar. Porém, com a grande 
quantidade de dados, surge o problema da colisão, quando dados diferentes assumem 
o mesmo valor de hash. Existem formas de trabalhar o hashing para que isso não 
ocorra, porém, é preciso usar uma outra estrutura de dados para poder considerar um 
hash repetido de dados distintos. Uma das estruturas possíveis é a linkedlist, que faz a 
alocação do dado repetido ou aproximado dentro de um mesmo hash. 
Com base nessas informações e no conteúdo estudado, podemos dizer que a técnica 
utilizada para a colisão é: 
Ocultar opções de resposta 
1. 
o load factor. 
2. 
o linear probing. 
3. 
o encadeamento separado. 
Resposta correta 
4. 
o new LinkedList. 
5. 
o rerash. 
4. Pergunta 4 
/1 
A fila é uma estrutura de dados homogênea, que tem por objetivo organizar e alocar os 
elementos da sua estrutura na forma de LIFO (Last in First Out), fazendo com que o 
primeiro a ser inserido seja removido. Sua função nos grafos se encontra dentro da 
busca por largura, removendo o nó visitado e buscando primeiro seus vizinhos em 
nível, assim, adicionando os vizinhos até chegar nos nós finais. 
Analise a situação a seguir: 
BQ04 - Tópicos Integradores II(ADS) - Questão 11.PNG 
Com base nessas informações e no conteúdo estudado, podemos dizer que o uso da fila 
em BFS, nesse caso, é: 
Ocultar opções de resposta 
1. 
B-C-D, E, F-G-H. 
2. 
B-E-F, C-G, D-H. 
Resposta correta 
3. 
B-C-D, F-G-H, E. 
4. 
D-H, C-G, B-E-F. 
5. 
B-E-F, D-H, C-G. 
5. Pergunta 5 
/1 
As arestas são a principal forma de manipular e modelar o grafo e, dependendo da 
aresta, até de classificá-lo como um todo. É um modelo que foca mais nas ligações do 
que nos dados em si. Em resumo, a aresta é a ligação dos vértices ou nós que, em 
conjunto, formam um caminho e uma estrutura organizada sem topologia ou ordem de 
dados. 
Sobre o formato A -> B, B <- C, e D - A, pode-se afirmar que: 
Ocultar opções de resposta 
1. 
A, C e D não são orientadas, enquanto B com A são orientadas. 
2. 
A, C e D são orientadas, enquanto B com A não são orientadas. 
3. 
A, B e C são orientadas, enquanto D com A não são orientadas. 
Resposta correta 
4. 
A, B e C são orientadas ponderadas, enquanto D com A são orientadas. 
5. 
A, B e C não são orientadas, enquanto D com A são orientadas. 
6. Pergunta 6 
/1 
Os vértices ou “nós” são os componentes de um grafo que designam o sentido de uma 
aresta. Se um grafo não possui vértices, ele não possui arestas. Os vértices, na 
programação, são classes que não se referenciam, porém possuem algumas 
propriedades que designam rótulo, focando em alguns algoritmos, no índice ou Ids. Em 
programação orientada a objetos, temos o encapsulamento que, como o nome diz, 
encapsula essas propriedades em métodos getters e setters, para cada propriedade, 
que em classe se torna um atributo. 
Analise a situação a seguir: 
class Vertice { 
private static int indice; 
private static String nome; 
boolean static visitado=false; 
} 
Com base nessas informações e no conteúdo estudado, podemos dizer que o 
encapsulamento do atributo índice corresponde a: 
Ocultar opções de resposta 
1. 
public void getID (int aux) {...} public int setID () {...} 
2. 
public void setIndice (int aux) {...} public int getIndice () {...} 
Resposta correta 
3. 
public void setID (int aux) {...} public int getID () {...} 
4. 
public void getIndice (int aux) {...} public int setIndice () {...} 
5. 
public void setID (int aux) {...} public void setIndice (int aux) {...} 
7. Pergunta 7 
/1 
O grafo é uma estrutura que contempla vértices e arestas. Sua estrutura não possui 
topologia ou ordem específica de inserção, remoção ou edição, pois um dos objetivos 
primordiais dos grafos é modelar um problema do mundo real. Por esse motivo, 
diversos tipos de grafos acabam coexistindo, cada um com suas características 
particulares. 
Analise a situação a seguir: 
As escalas da higienização de trens de 5 estações têm sido um grande problema para 
uma empresa de prestação de serviços. Foi sugerido que seu sistema corporativo 
tivesse uma funcionalidade que gerasse essas escalas automaticamente, de acordo com 
as seguintes regras: deve ser em horários de menor movimento, todos os vagões de um 
trem devem estar a 4 estações de igual tempo de distância um do outro. 
Com base nessas informações e no conteúdo estudado, uma das possibilidades de 
grafo para modelar esse case seria um: 
Ocultar opções de resposta 
1. 
grafo ponderado não conectado. 
2. 
grafo ponderado. 
3. 
grafo não conectado. 
4. 
grafo orientado. 
Resposta correta 
5. 
grafo ponderado não conectado. 
8. Pergunta 8 
/1 
O HashMap é uma estrutura hash diferenciada, pois nela você é obrigado a setar o 
valor junto com sua posição de memória, no entanto ao instanciar um hashmap, deve-
se passar via parâtro da declaração a tipagem do índice e a tipagem do valor, no caso 
do exemplo abaixo, o índice é integer e o dado também, podendo assumir diversos 
tipos inclusive um objeto tanto como índice como quanto valor. Por conta da 
particularidade da inserção do índice junto com o valor a add, no hashmap não é usado 
e sim o put(indice,valor) para poder alocar, e o uso do constainsé diferenciado pois 
pode-se buscar tanto por chave usando a containsKey quanto por valor 
containsValue.Por este motivo o hashmap é democrático pois você pode criar as 
posições que desejar e assim trazer mais agilidade ao programa caso necessite 
Analise a situação a seguir: 
import java.util.HashMap; 
import java.util.Map; 
public class Prj_HashMap { 
 public static void main(String args[]) 
 { 
 Map<Integer,Integer> mapa=new HashMap<Integer,Integer>(); 
 mapa.put(1, 100); 
 mapa.put(2, 200); 
 System.out.println("remover:"+mapa.remove(2)); 
 System.out.println("contains por chave:"+ mapa.get(1)); 
 System.out.println("contains por chave:"+ mapa.containsKey(1)); 
 System.out.println("contains por valor:"+ mapa.containsValue(100)); 
 for(Integer aux: mapa.keySet() ) 
 { 
 System.out.println(aux + "-" + aux.hashCode() + "-"+ mapa.get(aux) ); 
 } 
 } 
 } 
Com base nessas informações e no conteúdo estudado, analise as afirmativas a seguir e 
identifique qual dela(s) corresponde(m) ao padrão iterator na navegação da estrutura 
Mapa. 
I. Integer aux: mapa.keySet() 
II. new HashMap<Integer,Integer>();. 
III. mapa. 
IV. mapa.get(aux). 
V. mapa.getClass(). 
Está correto apenas o que se afirma em: 
Ocultar opções de resposta 
1. 
V e III. 
2. 
I e IV. 
Resposta correta 
3. 
IV e II. 
4. 
III e IV. 
5. 
II e I. 
9. Pergunta 9 
/1 
A busca binária, é uma busca que tem por objetivo receber uma estrutura ordenada e 
fazer uma comparação parcial do dado que é tratado com o tamanho da metade da sua 
estrutura, caso o dado seja maior que a metade da estrutura o algoritmo faz um loop 
na segunda metade da estrutura, caso seja menor faz um loop na metade da estrutura, 
esse formato elimina de um total de valores praticamente metade de comparações, 
tendo como tamanho O(n/2), pois independente de ter o dado ou não na estrutura 
somente vai percorrer uma metade. 
Agora, leia o código-fonte a seguir: 
public static boolean buscaBinaria(int[] vetor, int pesquisar) { 
 if ( … ) { 
 for (int pos = 0; pos < vetor.length; pos++) { 
 if (pesquisar == vetor[pos]) { 
 System.out.println("Localizado"); 
 return true; 
 } 
 } 
 } else { 
 for (int pos = vetor.length; pos > 0; pos--) { 
 if (pesquisar == vetor[pos]) { 
 System.out.println("Localizado"); 
 return true; 
 } 
 } 
 } 
 return false; 
} 
Considerando essas informações e o conteúdo estudado, a alternativa que 
corresponde ao comando IF do código acima é: 
Ocultar opções de resposta 
1. 
pesquisar != vetor[(int) (vetor.length)]. 
2. 
pesquisar <= vetor[(int) (vetor.length)]. 
3. 
pesquisar == vetor[(int) (vetor.length / 2)]. 
4. 
pesquisar >= vetor[(int) (vetor.length / 2)]. 
Resposta correta 
5. 
pesquisar >= vetor[(int) (vetor.length)]. 
10. Pergunta 10 
/1 
Uma das formas de navegar no grafo é através da lista de adjacência, que possui dois 
atributos: o vértice e a lista de vizinhos. Em vez de armazenar as arestas, armazena os 
vizinhos. Uma das vantagens da lista de adjacência é que ela não utiliza uma matriz 
como base e, portanto, pode ter tamanho indefinido. 
Analise a situação a seguir: 
public ArrayList buscarVizinhos (Vertice noaux) 
{ 
return 
new ArrayList <> (arestas [noaux.getIndice () ]); 
} 
No código-fonte acima, há uma criação estática, ou seja, com quantidades fixas de 
vértices. Foi utilizado um vetor de arestas para poder alocar os vizinhos. 
Com base nessas informações e no conteúdo estudado, podemos dizer que o comando 
utilizado para buscar o vizinho de um nó é: 
Ocultar opções de resposta 
1. 
buscarVizinhos (new Grafo (1)); 
2. 
buscarVizinhos (new Vertice ("A",1)); 
Resposta correta 
3. 
buscarVizinhos (new int [1] [1]); 
4. 
buscarVizinhos (1); 
5. 
buscarVizinhos (new Aresta (1));

Mais conteúdos dessa disciplina