Buscar

Programacao e Estrutura de Dados AOL 04

Prévia do material em texto

Programação e Estrutura de Dados 
Avaliação On-Line 4 (AOL 4) - 
1. Question	1	
/	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	é:	
Hide	answer	choices		
1. pesquisar	>=	vetor[(int)	(vetor.length)].	
2. pesquisar	==	vetor[(int)	(vetor.length	/	2)].	
3. pesquisar	>=	vetor[(int)	(vetor.length	/	2)].	
Correct	answer	
4. pesquisar	!=	vetor[(int)	(vetor.length)].	
5. pesquisar	<=	vetor[(int)	(vetor.length)].	
2. Question	2	
/	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){returnnew	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ó	é:	
Hide	answer	choices		
1. buscarVizinhos	(new	Grafo	(1));	
2. buscarVizinhos	(1);		
3. buscarVizinhos	(new	int	[1]	[1]);		
4. buscarVizinhos	(new	Aresta	(1));	
5. buscarVizinhos	(new	Vertice	("A",1));		
Correct	answer	
3. Question	3	
/	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:	
Hide	answer	choices		
1. public	void	getID	(int	aux)	{...}	public	int	setID	()	{...}			
2. public	void	setID	(int	aux)	{...}	public	void	setIndice	(int	aux)	{...}	
3. public	void	getIndice	(int	aux)	{...}	public	int	setIndice	()	{...}		
4. public	void	setID	(int	aux)	{...}	public	int	getID	()	{...}		
5. public	void	setIndice	(int	aux)	{...}	public	int	getIndice	()	{...}		
Correct	answer	
4. Question	4	
/	1	
Existem	muitas	formas	de	navegação	dentro	de	um	grafo.	Uma	das	mais	comuns	é	a	matriz	de	
adjacência,	uma	matriz	que	possui	o	mesmo	número	de	linhas	e	de	colunas	–	ou	seja,	quadrada	–	
e	sua	quantidade	de	elementos,	tanto	linhas	quanto	colunas,	é	o	total	de	vértices	do	grafo.	Nesse	
sentido,	toda	matriz	de	adjacência	sempre	será	bidimensional.	
Essa	é	uma	das	principais	formas	de	visualização	de	grafos	dentro	dos	algoritmos,	onde	estes	
recebem	a	matriz	e	fazem	o	processamento	pelas	ligações	dos	vértices.	
Analise	a	situação	a	seguir:	
ESTRUT DADOS QUEST 04 UNID 4_v1.PNG 
Com	base	nessas	informações	e	no	conteúdo	estudado,	dizemos	que	o	grafo	que	corresponde	a	
essa	matriz	é:	
Hide	answer	choices		
1. F-X	e	G	isolado.	
2. F-X-G.	
Correct	answer	
3. G-F-X.	
4. F-G-X.	
5. X-F-G.	
5. Question	5	
/	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));S
ystem.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:	
Hide	answer	choices		
1. 2,	4,	5,	3,	1.	
Correct	answer	
2. 5,	4,	2,	3,	1.		
3. 2,	5,	4,	3,	1.	
4. 2,	4,	5,	1,	3.	
5. 1,	2,	4,	3,	5.	
6. Question	6	
/	1	
As	estruturas	de	dados	homogêneas	são	estruturas	que	possuem	indexação	por	profundidade,	
porém	com	apenas	uma	tipagem.	No	caso	de	matrizes	e	vetores,	independentemente	do	
tamanho	“N”	que	possuam,	eles	sempre	terão	a	mesma	tipagem.	
Por	isso,	existem	diversas	aplicações	para	essas	estruturas,	sendo	uma	delas	na	forma	
computacional	de	manipular	um	grafo.	Na	classe	grafo,	temos	os	vértices	e	a	matriz	de	
adjacência,	que	deve	ser	populada	para	possuir	as	arestas.	Porém,	o	grafo	em	si	é	iniciado	ao	
executar	o	construtor,	pois	este	define	os	tamanhos	da	matriz	da	classe.	
Analise	a	situação	a	seguir:	
class	Grafo{private	Vertice	nos	[];private	int	matriz	[]	[];	
public	Grafo	(Vertice	nosaux	[]){...}}	
Com	base	nessas	informações	e	no	conteúdo	estudado,	podemos	dizer	que	a	linha	que	
corresponde	ao	comando	do	construtor	do	código	acima	é:	
Hide	answer	choices		
1. nosaux	=	nosaux;	matriz	=	new	int	[nosaux.length]	[nosaux.length];	
2. nos	=	nos;	matriz	=	new	int	[nos.length]	[nos.length];	
3. noaux	=	nos;	matriz	=	new	int	[nos.length]	[nos.length];	
4. nos	=	nosaux;	matriz	=	new	int	[nosaux.length]	[nosaux.length];	
Correct	answer	
5. nos	=	nosaux;	matriz	=	new	int	[10]	[10];	
7. Question	7	
/	1	
Uma	das	principais	aplicações	de	grafos	em	um	problema	de	logística	é	achar	o	menor	caminho	
para	várias	entregas.	No	caso,	cada	ponto	de	entrega	seria	um	vértice	e	cada	rua,	avenida	ou	
caminho,	seriam	as	arestas.	Por	ser	um	problema	recorrente	em	grafos,	existem	diversos	
algoritmos	para	isso.	Um	deles	se	destaca	por	ser	um	dos	mais	simples	para	resolver	este	
problema.	Trata-se	da	árvore	geradora	mínima	ou	MST	(Minimum	Spanning	Tree),	que	percorre	
os	vizinhos	até	o	fim	e	verifica	se	algum	deles	possui	uma	conectividade	com	os	nós	do	grafo.	
Com	base	nessas	informações	e	no	conteúdo	estudado,	podemos	dizer	que	o	algoritmo	usado	no	
MST	como	forma	de	criar	uma	árvore	geradora	mínima	é:	
Hide	answer	choices		
1. BFS	ou	busca	por	largura.	
2. matriz	de	adjacência.	
3. DFS	ou	busca	por	profundidade.	
Correct	answer	
4. matriz	de	incidência.	
5. lista	de	adjacência.	
8. Question	8	
/	1	
O	HashMap	é	uma	estrutura	hash	diferenciada,	pois	nela	você	é	obrigadoa	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:	
Hide	answer	choices		
1. IV	e	II.	
2. II	e	I.	
3. V	e	III.	
4. III	e	IV.	
5. I	e	IV.	
Correct	answer	
9. Question	9	
/	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	é:	
Hide	answer	choices		
1. o	encadeamento	separado.	
Correct	answer	
2. o	rerash.	
3. o	load	factor.	
4. o	new	LinkedList.	
5. o	linear	probing.	
10. Question	10	
/	1	
A	pilha	é	uma	estrutura	de	dados	homogênea,	que	se	comporta	mais	ou	menos	da	mesma	forma	
que	uma	pilha	do	mundo	real,	tendo	seus	dados	organizados	na	estrutura	LIFO	(Last	in	First	
Out).	
Uma	das	aplicações	das	pilhas	é	no	algoritmo	de	busca	de	grafos,	no	DFS	que	busca	por	
profundidade,	onde	sua	busca	aplica-se	em	receber	um	vértice	e	retornar	todos	os	caminhos	
atrelados	a	partir	dele.	
Analise	a	situação	a	seguir:	
public	void	buscaDFS(Grafo_MA	adj)	{	/*Grafo_MA	adj	é	matriz	de	
adjacência*/this.resetar(adj);Stack<Vertice>	pilha	=	new	Stack<>();	
adj.getNo(0).setVisitado(true);	
pilha.add(adj.getNo(0));	
System.out.print(adj.getNo(0).getNome());	
while	(!pilha.isEmpty())	{/*chamada	da	função	getIDVizinhos	com	argumentos	de	matriz	de	
adjacência	e	o	índice	do	topo	da	pilha*/	
DECLARAÇÃO	IDVIZINHOif	(idVizinho	==	-1)	{pilha.pop();}	else	
{adj.getNo(idVizinho).setVisitado(true);pilha.push(adj.getNo(idVizinho));System.out.print(","	+	
adj.getNo(idVizinho).getNome());	
}}}	
Com	base	nessas	informações	e	no	conteúdo	estudado,	o	código	que	corresponde	à	declaração	
de	idVizinho	no	DFS	é:	
Hide	answer	choices		
1. int	idVizinho	=	this.getVertices	(adj,pilha.peek	().getIndice	());	
2. int	Vizinho	=	this.getIDVizinhos	(0,	pilha.peek	().getIndice	());	
3. int	idVizinho	=	this.getIDVizinhos	(pilha.peek	().getIndice	(),pilha.peek	
().getIndice	());	
4. int	idVizinho	=	this.getIDVizinhos	(adj,	pilha.peek	().getIndice	());	
Correct	answer	
5. int	idVizinho	=	this.getVertices	(pilha.peek	().getIndice	(),	pilha.peek	().getIndice	
());

Continue navegando