Buscar

Colaborar - Av2 - Algoritmos e Estrutura de Dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1) Conforme Celes, Cerqueira, Rangel (2004), tanto na função de Cálculo de endereços, como na
função de Divisão, ao inserirmos um elemento na tabela e este elemento colide com outro elemento no endereço de índice, o elemento a ser inserido é armazenado no próximo índice disponível de própria tabela.
Apresenta-se abaixo uma tabela de 10 posições e a seguinte sequência de chaves: 18, 77, 548, 195, 174, já inserida na tabela.
	Chave
	Cálculo da Função
	Endereço
	18
	(18 mod 10)
	8
	77
	(77 mod 10)
	7
	548
	(548 mod 10)
	8
	195
	(195 mod 10)
	5
	174
	(174 mod 10)
	4
Diante da tabela apresentada acima e o tratamento em caso de colisão, escolha a Tabela de Espelhamento que representa os corretamente os dados apresentados.
Alternativas:
índice	0	1	2	3	4	5	6	7	8	9
02/11/2023 18:17
Colaborar - Av2 - Algoritmos e Estrutura de Dados
https://www.colaboraread.com.br/aluno/avaliacao/index/3671177301?atividadeDisciplinaId=15057424
1/7
a)valor
174
195
77
18
548
índice
0
1
2
3
4
5
6
7
8
9
valor
18
77
548
195
174
índice
0
1
2
3
4
5
6
7
8
9
b)
c) valor
174 195 548
18	77
d) índice	0 valor
1	2	3
174
4	5
195
6	7
77 18
8	9
548
Alternativa assinalada
índice	0	1	2	3	4	5	6	7	8	9
e) valor
174
195
77 548
2) Segundo Silva (2007), na função linear, também conhecido como Overflow Progressivo, consiste em procurar a próxima posição vazia depois do índice-base da chave. É uma função que possui como vantagem a simplicidade em definir o índice da Tabela de Espalhamento. No entanto, sua desvantagem está no caso de ocorrerem muitas colisões, pode ocorrer um agrupamento (clustering) de chaves em um determinado índice. Isso pode fazer com que sejam necessários muitos acessos para recuperar um determinado elemento.
Pode-se observar o esquema de Função de Espalhamento Linear, utilizando o método de divisão para encontrar o índice. Abaixo encontramos um exemplo da Função de Espalhamento Linear.
Obs. as posições sem alocação de elementos são identificados com -1 (menos um).
Sobre a Função de Espalhamento Linear e utilizando o método de divisão para encontrar o índice analise as afirmações abaixo.
I - Se utilizarmos a tabela apresentada e inserirmos o elemento 24, o índice onde ele será inserido será o 1.
II - Se utilizarmos a tabela apresentada e inserirmos o elemento 24 e logo em seguida o elemento 40, os índices onde eles serão inseridos são o 1 e o 2 respectivamente.
III - Se utilizarmos a tabela apresentada e inserirmos o elemento 24, depois o 40 e logo em seguida o elemento 48, os índices onde eles serão inseridos são o 1, 2 e 6 respectivamente.
IV - Se utilizarmos a tabela apresentada e inserirmos o elemento 23, o índice onde ele será inserido será o 6.
Agora, assinale a alternativa que apresenta a correta: Agora assinale a alternativa correta.
Alternativas:
a) Apenas a afirmativa IV está correta.
b) Apenas as afirmativas I e IV estão corretas.
c) Apenas as afirmativas II e III estão corretas.
d) Apenas as afirmativas I, II e III estão corretas.Alternativa assinalada
e) Apenas as afirmativas I, II, III e IV estão corretas.
3) Uma Tabela de Espalhamento pode ter seu desempenho comprometido à medida que ela vai
ficando cheia. Enquanto ela possui poucos elementos, a busca é muito eficiente e rápida para qualquer tipo de Função de Espalhamento adotada.
O desempenho da tabela diminui devido à falta de posições disponíveis, ocasionando o problema lentidão e uma solução seria necessário aumentar a tabela e reinserir todos os elementos novamente, operação ineficiente para ser executada. Considerando o contexto apresentado, avalie as seguintes asserções e a relação proposta entre elas.
I - Como forma de melhorar a performance de uma Função de Espalhamento, Luiz sugeriu a implementação da tabela dinâmica na Função de Espalhamento conforme o código abaixo:
int insere_nova(item chave) { int i = espalha(chave, NN);
/* Busca a próxima posição livre */
/* Com a tabela duplicada, sempre haverá posição disponível */ while (q[ i ] != VAZIO) {
i = (i+1) % NN; /* Cálcula o índice */
}
/* Insere na posição livre encontrada */ q[ i ] = chave;
return i;
}
void expande() {
int i, NN = 2*N;
q = malloc(NN*sizeof(item)); 12
limpa(q, NN);
/* Insere todos os elementos na nova tabela */ for (i = 0; i < N; i++)
if (p[ i ] != VAZIO)
insere_nova(p[ i ]); N = NN;
free(p); p = q;
}
void insere(item chave) { int i;
//Verifica se o tamanho da tabela é menor que a soma da quantidade de elementos da tabela if (N < M+M)
expande(); /* Chama a função para expandir a tabela */ i = espalha(chave, N);
/* Busca a próxima posição livre */ while (p[ i ] != VAZIO) {
if (p[ i ] == chave)
return –1; /* Retorna se o elemento já existe na tabela */ i = (i+1) % N; /* Calcula o índice */
}
/* Insere na posição livre encontrada */ p[ i ] = chave;
M++;
return i;
}
PORQUE
II - Para melhorar o espalhamento, uma solução é a utilização de tabelas dinâmicas na estrutura ao invés de utilizar uma Lista Ligada para armazenar os valores, podendo ser utilizada tanto com a Função de Espalhamento Linear, como com a Função de Espalhamento Duplo. Assim, quando utilizamos este método, no momento em que a tabela passa de N/2 elementos, dobramos o seu tamanho, fazendo com que a tabela sempre tenha menos da metade dos elementos ocupados.
A respeito dessas asserções, assinale a alternativa correta.
Alternativas:
a) As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
b) As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.Alternativa assinalada
c) A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
d) A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
e) As asserções I e II são proposições falsas.
4) Conforme Pereira (2008), a função de Mapas Associativos é realizar a associação entre elementos dentro da estrutura, realizando a associação entre uma chave e um valor recebidos, permitindo a recuperação rápida de um valor associado a uma chave.
Os Mapas Associativos são estruturas de dados que permitem implementarmos as seguintes funcionalidades apresentadas na Coluna 1. Na Coluna 2 são apresentados seus respectivos exemplos de código.
Coluna 1
I - Adicionar uma associação.
II - Remover uma associação de uma chave especifica.
III - Verificar se existe uma associação para uma determinada chave. IV - Informar a quantidade de associações na estrutura.
Coluna 2
Código 01
#include <iostream> /* Utiliza a biblioteca iostream da linguagem C++ */ #include <map> /* Utiliza a biblioteca map da linguagem C++ */
using namespace std; /* Este comando serve para definir um espaço de nome para evitar duplicidade
*/
int main ()
{
map <int, string > mapa; /* Definimos a estrutura do mapa com associação entre um número inteiro e	uma string */
mapa[1] = "KLS";
cout << mapa[1] << endl; return 0;
}
Código 02
#include <iostream> #include <map> using namespace std; int main ()
{
map <int, string> mapa; mapa[1] = "KLS";
cout << mapa[1] << endl; mapa.erase(1);
cout << mapa[1] << endl; return 0;
}
Código 03
#include <iostream> #include <map> using namespace std; int main ()
{
int chave;
map <int, string> mapa; mapa[1] = "KLS"; mapa[2] = "KROTON";
mapa[3] = "ESTRUTURA DE DADOS";
printf("Digite a chave: \n"); scanf("%d",&chave); if(mapa.find(chave) == mapa.end())
cout << "\nChave NAO existe!\n\n";
else
cout << "\nChave existe! - Valor: " + mapa[chave] + "\n\n"; return 0;
}
Código 04
#include <iostream> #include <map> using namespace std; int main ()
{
int chave;
map <int, string> mapa; mapa[1] = "KLS"; mapa[2] = "KROTON";
mapa[3] = "ESTRUTURA DE DADOS";
cout << "Tamanho da estrutura de Mapa: " << mapa.size() << endl; return 0;
}
Assinale a alternativa que contém a sequência correta da associação entre as colunas.
Alternativas:
a) Código 01 é associado a funcionalidade II -	Código 02 é associado a funcionalidade I - Código 03 é associado a funcionalidade IV -	Código 04 é associado a funcionalidade III.
b) Código 01 é associadoa funcionalidade IV -	Código 02 é associado a funcionalidade II - Código 03 é associado a funcionalidade III -	Código 04 é associado a funcionalidade I.
c) Código 01 é associado a funcionalidade IV -	Código 02 é associado a funcionalidade III - Código 03 é associado a funcionalidade II -	Código 04 é associado a funcionalidade I.
Código 01 é associado a funcionalidade I -	Código 02 é associado aAlternativa assinalada
d) funcionalidade II - Código 03 é associado a funcionalidade III -	Código 04 é associado a funcionalidade IV.
e) Código 01 é associado a funcionalidade II -	Código 02 é associado a funcionalidade III - Código 03 é associado a funcionalidade IV -	Código 04 é associado a funcionalidade I.
5) Para adicionar uma associação no Mapa é necessário verificar se a chave da nova associação não pertence a alguma associação da Lista e para isso precisamos verificar se a chave já existe na estrutura. Para remover uma associação no mapeamento, também é necessário verificar se uma chave está associada a algum elemento ou recuperar o elemento associado, sendo necessário percorrer a Lista para verificar a existência.
Analise os trechos de código apresentados na COLUNA 1 e suas respectivas funções na COLUNA 2.
COLUNA 1
Código 01
#include <iostream> #include <map>
using namespace std; struct Materias{ string codigo;
string disciplina;
};
Código 02
printf("Informe a chave para receber a ação: "); scanf("%d", &chave);
if(MapaLista.find(chave) == MapaLista.end())
{
cout << "Chave nao existente!\n" << endl;
} else
{
MapaLista.erase(MapaLista.find(chave));
}
Código 03
printf("Informe a chave para receber a ação: "); scanf("%d", &chave);
if(MapaLista.find(chave) == MapaLista.end())
{
cout << "Chavenao encontrada!\n" << endl;
} else {
cout	<<	"Chave	Encontrada!\nCodigo:	"	+	MapaLista[chave].codigo	+	"\nChave:	"	+ MapaLista[chave].disciplina + "\n" << endl;
}
Código 04
printf("Informe o codigo da disciplina: "); scanf("%s", &coddisc);
for (i = 1; i <= MapaLista.size(); i++)
{
printf("Posicao %d: ", i);
if(MapaLista[i].codigo == coddisc)
cout	<<	"Disciplina	Encontrada!\nCodigo:	"	+	MapaLista[i].codigo	+	"\n	Disciplina:	"	+ MapaLista[i].disciplina + "\n" << endl;
else
cout << "Disciplina nao encontrada!\n" << endl;
}
COLUNA 2
I - Implementação da remoção da associação com base na chave informada pelo usuário II - Recuperação de valores associados a chaves em um mapeamento com listas
III - Pesquisa de elementos em um mapeamento, realizando a pesquisa por meio do código da disciplina
IV - Declaração das bibliotecas e da estrutura da Lista
Assinale a alternativa que contém a sequência correta da associação entre as colunas.
Alternativas:
a) Código 01 é a função I ; Código 02 é a função II ; Código 03 é a função III ; Código 04 é a
função IV ;
b) Código 01 é a função IV ; Código 02 é a função III ; Código 03 é a função II ; Código 04 é a
função I ;
c) Código 01 é a função IV ; Código 02 é a função I ; Código 03 é a função II ;
Código 04 é a função III ;
d) Código 01 é a função IV ; Código 02 é a função I ; Código 03 é a função III ; Código 04 é a
função II ;
e) Código 01 é a função I ; Código 02 é a função IV ; Código 03 é a função II ; Código 04 é a função
III ;
Alternativa assinalada

Outros materiais