Buscar

IO - 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 39 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 39 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 9, do total de 39 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

IO - ESTRUTURA DE DADOS
//—
Questão 1/10 - Estrutura de Dados
Assuma um vetor de dimensão 10 com dados numéricos e inteiros colocados na seguinte
ordem:
| 05 | 07 | 08 | 14 | 24 | 29 | 56 | 77 | 78 | 88 |
Suponha que você deseja implementar um algoritmo de busca para localizar algum dado
neste vetor já ordenado de maneira crescente. Você resolve testar a busca sequencial e a
busca binária.
Acerca destes algoritmos e analisando o vetor acima, assinale a alternativa CORRETA:
Nota: 10.0
A No algoritmo de busca sequencial, o valor 24 seria localizado na 6ª tentativa, se
fizermos uma varredura da esquerda para a direita.
Na 5ª tentativa.
B No algoritmo de busca binária, o valor 24 seria localizado na 3ª tentativa.
Na 1ª tentativa.
C No algoritmo de busca sequencial, o valor 77 seria localizado mais rapidamente que
se comparado com a busca binária.
Binária se sairia mais rápida.
D No algoritmo de busca sequencial, o valor 07 seria localizado mais
rapidamente que se comparado com a busca binária.
Você acertou!
CORRETO. Levará menos iterações.
E Em nenhum cenário de busca o algoritmo sequencial irá localizar o valor antes da
busca binária.
É possível que sim, a sequencial ache antes. Dependerá o valor buscado e onde ele se
localizado no vetor.
Questão 2/10 - Estrutura de Dados
O algoritmo de ordenação rápida, também conhecido como quick sort, é um dos algoritmos
estudados na AULA 2.
Acerca deste algoritmo, assinale a alternativa CORRETA.
Nota: 0.0
A A complexidade do quick sort é O(n²). Isso significa que ele sempre terá a mesma
eficiência de um bubble sort.
Somente o pior caso do bubble e do quick são iguais. Se considerarmos cenários melhores o
quick sort se sai bem melhor que o bubble sort. Veja o experimento feito na AULA PRÁTICA
1 para mais detalhes.
B O quick sort trabalha com o conceito de pivô, que é o elemento usado nas
comparações, comparando sempre o seu valor com todos os valores do lado direito
do pivô, enquanto que o lado esquerdo permanece já ordenado.
Ambos os lados são comparados, esquerdo e direito.
C O quick sort trabalha com o conceito de pivô, que é o elemento usado nas
comparações, comparando sempre o seu valor com todos os valores do lado
esquerdo do pivô, enquanto que o lado direito permanece já ordenado.
Ambos os lados são comparados, esquerdo e direito.
D O quick sort trabalha com uma troca de valores utilizando uma variável
auxiliar, da mesma maneira feita no bubble sort.
AULA 2 – TEMA 4 – CORRETO.
E O quick sort só pode ser executado para um tamanho de conjunto de dados máximo
igual a 1000, pois mais do que isso o uso de memória pelo algoritmo é muito grande.
O limite máximo dependerá da memória disponível, não sendo limitado ao valor de 1000.
Questão 3/10 - Estrutura de Dados
A recursividade é um recurso de programação bastante empregado, e consiste no ato de
uma função em um código realizar chamadas de si mesmo, abrindo diferentes instâncias de
uma mesma função na memória do programa.
Acerca de recursividade e algoritmos recursivos, assinale a alternativa INCORRETA:
Nota: 10.0
A Diversos problemas computacionais que poderiam ser resolvidos utilizando
algoritmos iterativos, ou seja, laços de repetição, podem também ser resolvidos
usando recursividade.
B Um algoritmo recursivo terá uma complexidade logarítmica, apresentando um
desempenho inferior em tempo de execução superior a um algoritmo
construído de forma iterativa.
Você acertou!
AULA 1 – TEMA 4. O desempenho em tempo de execução é superior.
C Uma possível desvantagem de um algoritmo recursivo é o seu uso de memória mais
elevado, uma vez que diversas instâncias de uma mesma função precisam ser
alocadas na memória.
D Um algoritmo que executa uma função denominada de soma, e que realiza a
chamada de uma função denominada compara, não pode ser considerado um
algoritmo recursivo, uma vez que não realizada chamadas de si mesma.
E Um algoritmo recursivo comumente serve para resolver problemas do tipo “dividir
para conquistar”, onde dividimos um problema em partes menores e mais fáceis de
solucionar, para posteriormente agregar as pequenas soluções em uma maior.
Questão 4/10 - Estrutura de Dados
O algoritmo de ordenação por intercalação, também conhecido como merge sort, é um dos
algoritmos estudados na AULA 2.
Acerca deste algoritmo, assinale a alternativa CORRETA.
Nota: 10.0
A A complexidade do merge sort é O(logn), pois o algoritmo trabalha com o princípio
de dividir para conquistar.
O(n.logn), pois temos duas funções.
B O processo do merge sort consiste em dividir uma estrutura de dados de tamanho n
(um vetor por exemplo) em 4 partes e ordenar estar partes, agregando-as
posteriormente.
O processo do merge sort consiste em dividir uma estrutura de dados de tamanho n (um
vetor por exemplo) em n partes de tamanho unitário.
C Ao dividir o conjunto de dado em duas partes menores, o merge sort sempre calcula
a posição central da ruptura, que é dada pela média entre os valores posição inicial
com a posição final, arredondando para cima.
É feito um truncamento somente da parte inteira.
D A intercalação é realizada utilizando um vetor auxiliar para ir armazenando os
dados que vão sendo ordenados naquele momento.
Você acertou!
AULA 2 – TEMA 3. Figura 10.
E A função merge sort pode ser implementada de forma recursiva, ou seja, realizando
chamadas de si mesma até que o conjunto de dados seja indivisível. A ordenação
só ocorre quando as partes menores forem agregadas novamente.
A ordenação ocorre nas partes menores e indivisíveis.
Questão 5/10 - Estrutura de Dados
No primeiro assunto de nossa disciplina investigamos o que são estruturas de dados e
como podemos classificá-las em tipos.
Acerca deste assunto, assinale a alternativa INCORRETA:
Nota: 10.0
A Um dado que pode ser decomposto em partes mais simples, é considerado um dado
estruturado e, portanto, uma estrutura de dados.
B Os tipos de dados manipulados por um algoritmo podem ser classificados em duas
categorias distintas: os atômicos, que são dados indivisíveis, e os dados compostos,
que podem ser divisíveis em mais partes menores.
C Podemos classificar uma estrutura de dados como sendo do tipo homogênea
(como registros) ou do tipo heterogênea (como vetores e matrizes).
Você acertou!
AULA 1 – TEMA 1. Podemos classificar uma estrutura de dados como sendo do tipo
heterogênea (como registros) ou do tipo homogênea (como vetores e matrizes).
D Uma estrutura homogênea é aquela cujo tipo dos dados nela armazenados são de
um único tipo, como inteiro, real, caractere ou lógico
E Uma estrutura contendo dados do tipo caractere e do tipo real pode ser considerada
uma estrutura de dados heterogênea.
Questão 6/10 - Estrutura de Dados
No último tópico da AULA 2 vimos algoritmos de busca.
Acerca de algoritmos de busca sequencial e binária, assinale a alternativa INCORRETA:
Nota: 10.0
A Uma busca binária pode ser implementada utilizando o princípio de dividir
para conquistar, e portanto, complexidade O(n²).
Você acertou!
O(logn)
B A busca binária só funcionará com um vetor de dados já ordenado. Portanto, além
de sua complexidade, existe a complexidade atrelada a uma possível ordenação
prévia dos dados.
C O algoritmo de busca sequencial pode ser implementado com um só laço de
repetição, caracterizando O(n).
D A busca sequencial poderá funcionar com um conjunto de dados ordenação ou não
ordenado.
E A busca binária realiza seu algoritmo de localização do dado dividindo o conjunto de
dados ao meio, e comparando o valor central com o buscado.
Questão 7/10 - Estrutura de Dados
Uma função que implementa parte do algoritmo quick sort pode ser vista abaixo. Todo o
resto do algoritmo foi omitido para que analisemos somente este método. O algoritmo
completo pode ser visto no material PDF da Aula 2.
No código, a função chamada de particao refere-se à função que localiza um pivô no vetor
de dados e faz as respectivas trocas dos valores, ordenando seguindo algum critério.
No código, vet é o vetor de dados, e troca é a função querealiza uma troca entre dois
valores destoantes utilizando uma variável auxiliar.
1. int particao(int vet[], int p, int u)
2. {
3. int pivo, pivo_pos, i, j;
4. pivo_pos = (p + u) / 2;
5. pivo = vet[pivo_pos];
6.
7. i = p - 1;
8. j = u + 1;
9. while (i < j)
10. {
11. do
12. {
13. j--;
14. } while (vet[j] > pivo);
15.
16. do
17. {
18. i++;
19. } while (vet[i] < pivo);
20.
21. if (i < j)
22. troca(vet, i, j);
23. }
24. return j;
25. }
Acerca deste algoritmo, assinale a alternativa INCORRETA:
Nota: 10.0
A A variável pivo_pos localiza a posição a qual conterá o valor de referência para
comparações com todos os outros valores do vetor.
B Na linha 11 até a linha 14 comparamos o pivô com todos os valores ao lado direito
do mesmo. Caso um valor seja menor que o pivô, ele deve ser colocado para uma
posição anterior a do pivô, ou no máximo, no local do pivô.
C Na linha 16 até a linha 19 comparamos o pivô com todos os valores ao lado
esquerdo do mesmo. Caso um valor seja maior que o pivô, ele deve ser colocado
para uma posição posterior a do pivô, ou no máximo, no local do pivô.
D A troca (linha 21 e 22) pode acontecer entre um valor do lado esquerdo e do lado
direito, ou entre o próprio pivô e um dos valores destoantes de cada um dos lados.
E Na linha 4 acessamos a posição do pivô no vetor e na linha 5 acessamos a
posição correspondente do vetor conforme calculado na linha 4.
Você acertou!
Primeiro localizamos a posição (linha 4) e depois o valor daquela posição (linha 5).
Questão 8/10 - Estrutura de Dados
Uma função que implementa o algoritmo bubble sort pode ser vista abaixo. Todo o resto do
algoritmo foi omitido para que analisemos somente o método de ordenação. No código,
TAMANHOVETOR refere a um valor inteiro que corresponde a dimensão do vetor de dados.
1 - void BubbleSort(int vet[]) {
2 - int aux;
3 - for (int n = 1; n <= TAMANHOVETOR; n++) {
4 - for (int i = 0; i < (TAMANHOVETOR - 1); i++) {
5 - if (vet[i] < vet[i + 1]) {
6 - aux = vet[i];
7 - vet[i] = vet[i + 1];
8 - vet[i + 1] = aux;
9 - } } } }
Acerca deste algoritmo, assinale a alternativa CORRETA:
Nota: 10.0
A Na linha 5, o sinal de MENOR está incorreto. O algoritmo do bubble sort deve
apresentar um sinal de MAIOR nesta linha.
Tanto faz o sinal. Invertendo sinal inverte a forma como irá ordenar, o que não caracteriza um
erro.
B Não é possível substituir os laços de repetição do tipo PARA (FOR) por um laço do
tipo REPITA (DO-WHILE).
É possível implementar com qualquer laço de repetição.
C Não é possível substituir os laços de repetição do tipo PARA (FOR) por um laço do
tipo ENQUANTO (WHILE).
É possível implementar com qualquer laço de repetição.
D Na linha 3, seria possível fazer a variável n iniciar em zero e terminar em
(TAMANHOVETOR-1)
Você acertou!
CORRETO. AULA 2 – TEMA 2 e conceitos básicos de programação e algoritmos.
E A variável chamada de aux neste código tem como objetivo armazenar
temporariamente o vetor de dados completo, para posteriormente ser ordenado.
Ela serve para ajudar na troca individual de cada elemento.
Questão 9/10 - Estrutura de Dados
Chamamos de análise assintótica de algoritmos quando encontramos a complexidade de
um algoritmo de maneira aproximada através de uma curva de tendência. Este tipo de
análise e é a mais adotada para compararmos desempenho de algoritmos.
Acerca da análise assintótica de um algoritmo, assinale a alternativa INCORRETA:
Nota: 10.0
A Um algoritmo com três laços de repetição não encadeados contém uma
complexidade assintótica, para o pior caso, O(n).
B Na análise assintótica, fazemos o conjunto de dados de entrada da função custo
tender ao infinito, mantendo na equação somente o termo de maior grau, ou seja,
aquele que mais cresce na equação.
C Um algoritmo com três laços de repetição aninhados contém uma complexidade
assintótica, para o pior caso, O(n³).
D A complexidade assintótica para o pior caso, também conhecida como BigO,
representa o pior cenário para um algoritmo, ou seja, quando mais instruções
precisam ser executadas, levando mais tempo para finalizar a execução.
E A complexidade assintótica para o pior caso de um algoritmo contendo dois
laços de repetição aninhados, sendo que o segundo laço só será executado
caso uma condicional simples seja verdadeira, será O(n).
Você acertou!
AULA 1 – TEMA 3. O pior caso (BigO) nos diz que todas as linhas devem ser executadas, ou
seja, a condicional será sempre verdadeira, e ambos laços de repetição serão sempre
executados, sendo assim, complexidade O(n²).
Questão 10/10 - Estrutura de Dados
Uma função que implementa parte do algoritmo merge sort pode ser vista abaixo. Todo o
resto do algoritmo foi omitido para que analisemos somente este método. O algoritmo
completo pode ser visto no material PDF da Aula 2.
No código, inicio e fim são variáveis inteiras que correspondem a posições no vetor de
dados, parteinteira significa truncar em zero casas decimais o respectivo cálculo da linha 6
e intercala refere-se a uma função que realiza a ordenação neste método.
1. Função mergesort(X, inicio, fim)
2. Var
3. Meio: inteiro
4. Inicio
5. Se (inicio < fim) então
6. Meio <- parteinteira((inicio + fim) / 2)
7. mergesort(X, inicio, meio)
8. mergesort(X, meio + 1, fim)
9. Intercala(X, inicio, fim, meio)
10. Fimse
11. funfunção
A assumindo que a dimensão do vetor de dados X é 10, e que a primeira chamada da
função mergesort foi realizada com os seguintes parâmetros: Função mergesort(X, 0, 9).
Acerca deste algoritmo, assinale a alternativa INCORRETA:
Nota: 10.0
A Na segunda instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável meio vale 2.
B Na primeira instância aberta da função mergesort na memória do programa, a
variável meio corresponde ao valor 4.
C Na segunda instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável fim vale 2.
Você acertou!
Fim vale 4.
D Na terceira instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável fim vale 2.
E Na primeira instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável fim vale 9.
Questão 1/10 - Estrutura de Dados
Na AULA 5 estudamos a árvore binária balanceada AVL. Observe um exemplo de árvore
AVL abaixo:
Suponha que você quer remover o nó folha de valor 99. Acerca do balanceamento e
rotação desta árvore sem o 99. Assinale a alternativa CORRETA:
Nota: 10.0
A A árvore ficará balanceada e não precisará de rotação nenhuma.
B A árvore ficará com um desbalanceamento de valor 2 na raiz.
C O nó filho de valor 80 está com balanceamento 0, resultando em uma rotação
simples para a direta.
Você acertou!
Raiz -> Desbalanceada = -2.
Filho da esquerda -> Balanceado = 0
Rotação simples para a direita
D A árvore está com um desbalanceamento de valor -2 na raiz, resultando em uma
rotação simples para a esquerda.
E O nó filho de valor 80 está com balanceamento 1, resultando em uma dupla com
filho para a esquerda e pai para a direita.
Questão 2/10 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos. Abaixo temos uma imagem de um grafo.
Acerca do grafo acima, assinale a alternativa CORRETA.
Nota: 0.0
A O grau do vértice V1 é 3.
O grau é 4. Pois é o número de arestas incidentes.
B Todos os vértices deste grafo têm o mesmo grau, caracterizando um grafo trivial.
Tem o mesmo grau, mas o grafo é chamado de ponderado.
C Este grafo é do tipo completo.
Sim. Todos os vértices estão conectados por uma e somente uma aresta.
D Se removermos qualquer uma das arestas do grafo, estaríamos transformando o
grafo em um do tipo completo.
O grafo já é completo. Se remover uma aresta qualquer, ele deixa de ser completo.
E A aresta que conecta V1 e V3 e V1 E v4 podem serchamadas de laços.
Laço é uma aresta com um só vértice.
Questão 3/10 - Estrutura de Dados
Na AULA 5 estudamos grafos e seus algoritmos de busca.
Acerca da busca em largura no grafo, assinale a alternativa INCORRETA.
Nota: 10.0
A A busca em largura trabalha com o uma fila, a qual mantém todos os vértices que
ainda serão visitados.
B Um vértice conectado por uma aresta com o vértice de origem contém distância um.
C A busca em largura trabalha com o conceito de distâncias, onde sempre
acessamos um vizinho que está a um salto de distância do vértice atualmente
visitado e que já tenha sido visitado.
Você acertou!
Que não tenha sido visitado ainda.
D Quando percorremos a lista de vizinhos de um vértice, vamos colocando cada
vizinho ainda não visitado na fila, pois eles serão os próximos a serem acessados.
E O vértice de origem é aquele cuja distância é zero.
Questão 4/10 - Estrutura de Dados
Na AULA 4 estudamos a inserção em uma árvore binária. Abaixo temos um código em
linguagem C com uma função de inserção na árvore binária, considerando ela como uma
Binary Search Tree (BST).
1. void Inserir(ElementoDaArvoreBinaria ** ElementoVarredura, int num) {
2.
3. if (*ElementoVarredura == NULL)
4. {
5. ElementoDaArvoreBinaria *NovoElemento = NULL;
6. NovoElemento = (ElementoDaArvoreBinaria
*)malloc(sizeof(ElementoDaArvoreBinaria));
7. NovoElemento->esquerda = NULL;
8. NovoElemento->direita = NULL;
9.
10. NovoElemento->dado = num;
11. *ElementoVarredura = NovoElemento;
12. return;
13. }
14.
15. if (num < (*ElementoVarredura)->dado)
16. {
17. Inserir(&(*ElementoVarredura)->esquerda, num);
18. }
19. else
20. {
21. if (num >(*ElementoVarredura)->dado)
22. {
23. Inserir(&(*ElementoVarredura)->direita, num);
24. }
25. }
26. }
Acerca de árvores binárias e do código acima, assinale a alternativa CORRETA.
Nota: 10.0
A Nas linhas 15 a 25 a função testa para qual ramo da árvore irá seguir, direito ou
esquerdo, chamando novamente a função de inserção de forma recursiva.
Você acertou!
Correto.
B Na linha 3 temos um teste condicional simples que tem como objetivo verificar se a
árvore binária está completamente vazia, ou não.
Verifica se AQUELE ELEMENTO está vazio, não a arvore toda;
C Todo o código colocado entre as linhas 15 e 25 poderiam estar dentro de um
SENÃO que faz parte da condicional da linha 4.
Não seria possível isso, pois as linhas 15 a 25 precisam ser executadas independentemente
da condição da linha 3;
D Na linha 2 temos a declaração da função, onde o primeiro parâmetro é uma variável
que foi declarada com dois asteriscos (**). Deveria ser somente um, pois dois
asteriscos não são permitidos na linguagem C.
É permitido e está correto. Porque temos um ponteiro para outro ponteiro, caracterizando
dois asteriscos;
E O uso do um asterisco antes do nome da variável, como na linha 3 por exemplo,
significa que queremos manipular o endereço daquela variável.
O asterisco indica o conteúdo indireto para qual o ponteiro aponta.
Questão 5/10 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos.
Acerca de grafos e seus aspectos construtivos, assinale a alternativa INCORRETA.
Nota: 10.0
A Um laço ocorre quando uma aresta está conectada em um só vértice.
B Um grafo completo é aquele que contém uma, e somente, aresta para cada par
distinto de vértices.
C Um grafo ponderado é aquele no qual todas suas arestas contém um peso.
D Um grafo trivial é aquele que apresente somente um vértice e uma aresta;
Você acertou!
Somente um vértice e nenhuma aresta. AULA 1 – TEMA 1.
E Encontramos arestas múltiplas em um grafo quando duas arestas conectam os
mesmos vértices;
Questão 6/10 - Estrutura de Dados
Na AULA 4 estudamos as diferentes consultas em árvores binárias. Observe o código de
consulta em ordem na árvore, assumindo que os dados cadastrados são do tipo inteiro.
1. void Consultar_EmOrdem(ElementoDaArvoreBinaria * ElementoVarredura)
2. {
3. if (ElementoVarredura)
4. {
5. Consultar_EmOrdem(ElementoVarredura->esquerda);
6. printf("%d\t", ElementoVarredura->dado);
7. Consultar_EmOrdem(ElementoVarredura->direita);
8. }
9. }
Acerca de consulta em árvore e do código acima, alternativa CORRETA.
Nota: 0.0
A A linha 7 poderá nunca ser executada no código acima. Basta que não exista
nenhum elemento para a direita.
Existindo elemento para a direita, ou não, a linha 7 é executada, pois não temos nenhum
teste condicional que impeça isso.
B A linha 3 verifica se a variável ElementoVarredura é igual a zero.
Ela verifica se a variável está NULA (vazia). Que é um conceito diferente de verificar se é
igual a valor numérico zero.
C A impressão dos dados em pré-ordem poderia ser feita se invertêssemos as linhas 6
e 7.
O correto seria inverter as linhas 5 e 6.
D A impressão dos dados em pós-ordem poderia ser feita se invertêssemos as linhas
5 e 7.
O correto seria inverter as linhas 6 e 7.
E Se quiséssemos imprimir os elementos da árvore de maneira decrescente, ou
seja, do maior para o menor, poderíamos trocar as linhas 5 e 7.
CORRETO. A consulta EM ORDEM, por padrão é crescente. Se invertermos a ordem fica
decrescente.
Questão 7/10 - Estrutura de Dados
Na AULA 4 estudamos árvores binárias.
Acerca de árvore binárias e a visualização dos dados em uma árvore construída para
funcionar como uma Binary Search Tree, e considerando uma árvore binária onde os
elementos menores ficam no ramo esquerdo e os maiores no ramo direito, assinale a
alternativa CORRETA.
Nota: 10.0
A Como a árvore binária não apresenta sequência/ordem fixas, podemos listar
seus dados de diferentes maneiras: pré-ordem, ordem e pós-ordem.
Você acertou!
B Uma visualização da árvore em ordem significa lista os elementos em ordem
decrescente.
Ordenação crescente;
C Se fizermos uma listagem iniciando na direita, depois a raiz e depois o ramo
esquerdo estaremos listando os elementos de maneira crescente.
Decrescente;
D A impressão de valores em pré-ordem resultará em uma impressão inversa/oposto
da em pós-ordem.
Não existe a relação de oposição entre eles.
E Só é possível visualizar os dados de uma árvore binária caso não exista nenhum nó
com grau 0.
Não existe a relação entre grau e a visualização da árvore.
Questão 8/10 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos e suas representações matemáticas
Acerca do grafo e suas representações matemáticas, assinale a alternativa INCORRETA.
Nota: 10.0
A Na representação por lista de adjacências, temos um conjunto de listas encadeadas,
onde cada lista conterá todos os vizinhos de um único vértice;
B Uma representação por matriz de incidências representa um grafo na forma de uma
matriz, onde as linhas são os vértices e as colunas as arestas;
C Uma representação por matriz de adjacências representa um grafo na forma de uma
matriz, onde as linhas e as colunas são os vértices;
D Uma representação por lista de adjacências representa um grafo na forma de um
conjunto de listas encadeadas.;
E Na representação por lista de adjacências não podemos repetir um vértice em
duas listas encadeadas distintas.
Você acertou!
Podemos repetir, pois cada lista conterá todos os vizinhos de cada vértice.
Questão 9/10 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos. Abaixo temos uma imagem de um grafo.
Acerca do grafo acima, assinale a alternativa CORRETA.
Nota: 10.0
A O grafo contém arestas múltiplas, pois temos mais de um caminho para sair de V1 e
chegar em V9, por exemplo.
Arestas múltiplas são para arestas com os mesmos vértices de origem e destino.
B O grau do vértice V9 é 3.
O grau é 4. Pois é o número de arestas incidentes.
C Todos os vértices deste grafo têm o mesmo grau.
Temos graus diferentes: 2, 3 e 4.
D Este grafo é do tipo completo.
No grafo completo, todos os vértices precisam estar conectados entre si por somente uma
aresta. Neste grafo faltam diversas conexões.
E O grau do vértice V4 é 3.
Você acertou!Correto. Pois é o número de arestas incidentes.
Questão 10/10 - Estrutura de Dados
Na AULA 4 estudamos conceitos de árvores binárias. Acerca de árvores, assinale a
alternativa abaixo:
1. ElementoDaArvoreBinaria *NovoElemento = NULL;
2. NovoElemento = (ElementoDaArvoreBinaria *)malloc(sizeof(ElementoDaArvoreBinaria));
3. NovoElemento->esquerda = NULL;
4. NovoElemento->direita = NULL;
5.
6. NovoElemento->dado = num;
7. *ElementoVarredura = NovoElemento;
Acerca de árvores e seus aspectos construtivos, assinale a alternativa INCORRETA.
Nota: 0.0
A O código refere a inicialização de um nó da árvore, onde alocamos a variável na
memória e inicializamos os campos do registro.
Linha 2 contém a alocação, linhas 3, 4 e 5 contém a inicialização.
B Baseado no código acima, podemos afirmar com certeza que o registro que
armazena cada elemento da árvore contém um dado do tipo inteiro e dois
ponteiros.
Não sabemos o tipo do dado pelo código acima.
C Na linha 2 alocamos uma variável na memória destinada ao programa. O espaço
alocado é igual a quantidade de Bytes usada pelo registro
ElementoDaArvoreBinaria.
Sim. A função malloc em C faz alocação e a função sizeof diz o tamanho a ser alocado.
D Na linha 1, a variável NovoElemento é declarada como sendo um ponteiro para um
tipo de variável chamado ElementoDaArvoreBinaria.
Sim. O asterisco indicará o ponteiro;
E Nas linhas 3, 4 e 6 estamos acessando os campos de um registro. Em linguagem C,
um campo de uma variável ponteiro é acessado com uma flecha para a direta ‘->’, e
não com um PONTO. Se usarmos PONTO neste caso, como por exemplo
NovoElemento.esquerda, não irá funcionar.
Exatamente;
Questão 1/12 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos.
Abaixo temos uma imagem de um grafo.
Acerca do grafo acima, assinale a alternativa
CORRETA.
Nota: 10.0
A O grafo contém arestas múltiplas, pois temos mais de um caminho para sair de V1 e
chegar em V9, por exemplo.
Arestas múltiplas são para arestas com
os mesmos vértices de origem e destino.
B O grau do vértice V9 é 3.
O grau é 4. Pois é o número de arestas
incidentes.
C Todos os vértices deste grafo têm o mesmo grau.
Temos graus diferentes: 2, 3 e 4.
D Este grafo é do tipo completo.
No grafo completo, todos os vértices
precisam estar conectados entre si por
somente uma aresta. Neste grafo faltam
diversas conexões.
E O grau do vértice V4 é 3.
Você acertou!
Correto. Pois é o número de arestas
incidentes.
Questão 2/12 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos.
Acerca de grafos e seus aspectos
construtivos, assinale a alternativa
INCORRETA.
Nota: 10.0
A Um laço ocorre quando uma aresta está conectada em um só vértice.
B Um grafo completo é aquele que contém uma, e somente, aresta para cada par
distinto de vértices.
C Um grafo ponderado é aquele no qual todas suas arestas contém um peso.
D Um grafo trivial é aquele que apresente somente um vértice e uma aresta;
Você acertou!
Somente um vértice e nenhuma aresta.
AULA 1 – TEMA 1.
E Encontramos arestas múltiplas em um grafo quando duas arestas conectam os
mesmos vértices;
Questão 3/12 - Estrutura de Dados
Uma implementação do algoritmo de
ordenação do tipo bubble sort pode ser visto
abaixo. As partes que envolvem impressão
de dados na tela e leitura de dados foram
omitidas para um melhor entendimento do
que é necessário na questão.
X[TAMANHOVETOR], i, j, aux: inteiro
para i de 1 até TAMANHOVETOR faça
para j de 0 até (TAMANHOVETOR - 2)
faça
se (X[j] > X[j + 1]) então
aux <- X[j]
X[j] <- X[j + 1]
X[j + 1] <- aux
fimse
fimpara
fimpara
Acerca deste algoritmo, assinale a alternativa
CORRETA:
Nota: 10.0
A O algoritmo apresentado no exercício realizado a ordenação de dados numéricos,
inteiros, em ordem decrescente.
Ordenação é crescente.
B As linhas de código que correspondem a troca dos valores usando uma
variável auxiliar poderiam ser também escritas da seguinte maneira:
aux <- X[j+1]
X[j+1] <- X[j]
X[j] <- aux
Você acertou!
AULA 2 – TEMA 2. CORRETO.
C Se precisarmos ordenar dados não numéricos, como caracteres, precisaremos
repensar em toda a lógica do bubble sort, não sendo possível adaptar o código
facilmente.
Basta adaptarmos a linha da condicional
para funcionar com outro tipo de dado.
D Não é possível implementar o bubble sort com laços de repetição do tipo enquanto.
É possível implementar com qualquer tipo
de laço, para, enquanto ou repita.
E A complexidade deste algoritmo, para o pior caso, é O(logn).
Complexidade O(n²).
Questão 4/12 - Estrutura de Dados
Uma função que implementa parte do
algoritmo merge sort pode ser vista abaixo.
Todo o resto do algoritmo foi omitido para
que analisemos somente este método. O
algoritmo completo pode ser visto no material
PDF da Aula 2.
No código, inicio e fim são variáveis inteiras
que correspondem a posições no vetor de
dados, parteinteira significa truncar em zero
casas decimais o respectivo cálculo da linha
6 e intercala refere-se a uma função que
realiza a ordenação neste método.
1. Função mergesort(X, inicio, fim)
2. Var
3. Meio: inteiro
4. Inicio
5. Se (inicio < fim) então
6. Meio <- parteinteira((inicio + fim) / 2)
7. mergesort(X, inicio, meio)
8. mergesort(X, meio + 1, fim)
9. Intercala(X, inicio, fim, meio)
10. Fimse
11. funfunção
A assumindo que a dimensão do vetor de
dados X é 10, e que a primeira chamada da
função mergesort foi realizada com os
seguintes parâmetros: Função mergesort(X,
0, 9).
Acerca deste algoritmo, assinale a alternativa
INCORRETA:
Nota: 10.0
A Na segunda instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável meio vale 2.
B Na primeira instância aberta da função mergesort na memória do programa, a
variável meio corresponde ao valor 4.
C Na segunda instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável fim vale 2.
Você acertou!
Fim vale 4.
D Na terceira instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável fim vale 2.
E Na primeira instância aberta da função mergesort na memória do programa, a
variável inicio vale zero e a variável fim vale 9.
Questão 5/12 - Estrutura de Dados
Na AULA 5 estudamos conceitos de grafos.
Abaixo temos uma imagem de um grafo.
Acerca do grafo acima, assinale a alternativa
CORRETA.
Nota: 10.0
A O grau do vértice V1 é 3.
O grau é 4. Pois é o número de arestas
incidentes.
B Todos os vértices deste grafo têm o mesmo grau, caracterizando um grafo trivial.
Tem o mesmo grau, mas o grafo é
chamado de ponderado.
C Este grafo é do tipo completo.
Você acertou!
Sim. Todos os vértices estão conectados
por uma e somente uma aresta.
D Se removermos qualquer uma das arestas do grafo, estaríamos transformando o
grafo em um do tipo completo.
O grafo já é completo. Se remover uma
aresta qualquer, ele deixa de ser
completo.
E A aresta que conecta V1 e V3 e V1 E v4 podem ser chamadas de laços.
Laço é uma aresta com um só vértice.
Questão 6/12 - Estrutura de Dados
O algoritmo de ordenação rápida, também
conhecido como quick sort, é um dos
algoritmos estudados na AULA 2.
Acerca deste algoritmo, assinale a alternativa
CORRETA.
Nota: 10.0
A A complexidade do quick sort é O(n²). Isso significa que ele sempre terá a mesma
eficiência de um bubble sort.
Somente o pior caso do bubble e do quick
são iguais. Se considerarmos cenários
melhores o quick sort se sai bem melhor
que o bubble sort. Veja o experimento
feito na AULA PRÁTICA 1 para mais
detalhes.
B O quick sort trabalha com o conceito de pivô, que é o elemento usado nas
comparações, comparando sempre o seu valor com todos os valores do lado direito
do pivô, enquanto que o lado esquerdo permanece já ordenado.
Ambos os lados são comparados,
esquerdo e direito.
C O quick sort trabalha com o conceito de pivô, que é o elemento usado nas
comparações, comparando sempre o seu valor com todos os valores do lado
esquerdodo pivô, enquanto que o lado direito permanece já ordenado.
Ambos os lados são comparados,
esquerdo e direito.
D O quick sort trabalha com uma troca de valores utilizando uma variável
auxiliar, da mesma maneira feita no bubble sort.
Você acertou!
AULA 2 – TEMA 4 – CORRETO.
E O quick sort só pode ser executado para um tamanho de conjunto de dados máximo
igual a 1000, pois mais do que isso o uso de memória pelo algoritmo é muito grande.
O limite máximo dependerá da memória
disponível, não sendo limitado ao valor de
1000.
Questão 7/12 - Estrutura de Dados
O algoritmo abaixo foi desenvolvido
empregando uma lógica iterativa:
Função Calcula (n: inteiro, x: inteiro): inteiro
y: inteiro
para i de 0 até n faça
se (x < 0) então
para i de 0 até n faça
y = y + 1
fimpara
senão
para i de 0 até x faça
y = y + 1
fimpara
fimse
fimpara
retorne y
Fimfunção
Acerca ao algoritmo acima, e trabalhando
com os conceitos de complexidade
assintótica e recursividade, assinale a
alternativa CORRETA:
Nota: 0.0
A A função contém três laços de repetição, sendo que todos os três laços podem
acabar sendo executados cada vez que esta função por chamada.
Como o valor de x recebido como
parâmetro nunca muda dentro da mesma
chamada da função, teremos somente 2
laços sendo executados por vez devido a
condicional composta.
B A complexidade da função, para o pior caso será O(n³).
Como temos somente 2 laços aninhados,
a complexidade será O(n²).
C A função não realiza chamadas de si mesma, portanto pode ser considerada uma
função recursiva.
Uma função recursiva é a que realizada
chamadas de si mesma.
D Caso exista a possibilidade de implementação deste algoritmo usando uma
função recursiva, e sem uso de laços de repetição, a complexidade em tempo
de execução da implementação irá melhorar.
AULA 1 – TEMA 3, 4 E 5. Sim, pois
implementando com recursividade
teremos uma complexidade atrelada a um
crescimento logarítmico.
E Caso substituíssemos todos os laços de repetição do tipo para, por laços do tipo
enquanto, o desempenho do algoritmo em tempo de execução irá melhorar
significativamente, uma vez que o laço enquanto tem um custo inferior ao do para.
O custo de todos os três tipos de laços de
repetição é o mesmo na análise de
complexidade e, virtualmente não faz
diferença qual você utiliza.
Questão 8/12 - Estrutura de Dados
O algoritmo de ordenação por intercalação,
também conhecido como merge sort, é um
dos algoritmos estudados na AULA 2.
Acerca deste algoritmo, assinale a alternativa
CORRETA.
Nota: 10.0
A A complexidade do merge sort é O(logn), pois o algoritmo trabalha com o princípio
de dividir para conquistar.
O(n.logn), pois temos duas funções.
B O processo do merge sort consiste em dividir uma estrutura de dados de tamanho n
(um vetor por exemplo) em 4 partes e ordenar estar partes, agregando-as
posteriormente.
O processo do merge sort consiste em
dividir uma estrutura de dados de
tamanho n (um vetor por exemplo) em n
partes de tamanho unitário.
C Ao dividir o conjunto de dado em duas partes menores, o merge sort sempre calcula
a posição central da ruptura, que é dada pela média entre os valores posição inicial
com a posição final, arredondando para cima.
É feito um truncamento somente da parte
inteira.
D A intercalação é realizada utilizando um vetor auxiliar para ir armazenando os
dados que vão sendo ordenados naquele momento.
Você acertou!
AULA 2 – TEMA 3. Figura 10.
E A função merge sort pode ser implementada de forma recursiva, ou seja, realizando
chamadas de si mesma até que o conjunto de dados seja indivisível. A ordenação
só ocorre quando as partes menores forem agregadas novamente.
A ordenação ocorre nas partes menores
e indivisíveis.
Questão 9/12 - Estrutura de Dados
No último tópico da AULA 2 vimos algoritmos
de busca.
Acerca de algoritmos de busca sequencial e
binária, assinale a alternativa INCORRETA:
Nota: 10.0
A Uma busca binária pode ser implementada utilizando o princípio de dividir
para conquistar, e portanto, complexidade O(n²).
Você acertou!
O(logn)
B A busca binária só funcionará com um vetor de dados já ordenado. Portanto, além
de sua complexidade, existe a complexidade atrelada a uma possível ordenação
prévia dos dados.
C O algoritmo de busca sequencial pode ser implementado com um só laço de
repetição, caracterizando O(n).
D A busca sequencial poderá funcionar com um conjunto de dados ordenação ou não
ordenado.
E A busca binária realiza seu algoritmo de localização do dado dividindo o conjunto de
dados ao meio, e comparando o valor central com o buscado.
Questão 10/12 - Estrutura de Dados
Na AULA 4 estudamos árvores binárias.
Acerca de árvore binárias e a visualização
dos dados em uma árvore construída para
funcionar como uma Binary Search Tree, e
considerando uma árvore binária onde os
elementos menores ficam no ramo esquerdo
e os maiores no ramo direito, assinale a
alternativa CORRETA.
Nota: 10.0
A Como a árvore binária não apresenta sequência/ordem fixas, podemos listar
seus dados de diferentes maneiras: pré-ordem, ordem e pós-ordem.
Você acertou!
B Uma visualização da árvore em ordem significa lista os elementos em ordem
decrescente.
Ordenação crescente;
C Se fizermos uma listagem iniciando na direita, depois a raiz e depois o ramo
esquerdo estaremos listando os elementos de maneira crescente.
Decrescente;
D A impressão de valores em pré-ordem resultará em uma impressão inversa/oposto
da em pós-ordem.
Não existe a relação de oposição entre
eles.
E Só é possível visualizar os dados de uma árvore binária caso não exista nenhum nó
com grau 0.
Não existe a relação entre grau e a
visualização da árvore.
Questão 11/12 - Estrutura de Dados
(questão opcional)
Chamamos de análise assintótica de
algoritmos quando encontramos a
complexidade de um algoritmo de maneira
aproximada através de uma curva de
tendência. Este tipo de análise e é a mais
adotada para compararmos desempenho de
algoritmos.
Acerca da análise assintótica de um
algoritmo, assinale a alternativa
INCORRETA:
Nota: 0.0
A Um algoritmo com três laços de repetição não encadeados contém uma
complexidade assintótica, para o pior caso, O(n).
B Na análise assintótica, fazemos o conjunto de dados de entrada da função custo
tender ao infinito, mantendo na equação somente o termo de maior grau, ou seja,
aquele que mais cresce na equação.
C Um algoritmo com três laços de repetição aninhados contém uma complexidade
assintótica, para o pior caso, O(n³).
D A complexidade assintótica para o pior caso, também conhecida como BigO,
representa o pior cenário para um algoritmo, ou seja, quando mais instruções
precisam ser executadas, levando mais tempo para finalizar a execução.
E A complexidade assintótica para o pior caso de um algoritmo contendo dois
laços de repetição aninhados, sendo que o segundo laço só será executado
caso uma condicional simples seja verdadeira, será O(n).
AULA 1 – TEMA 3. O pior caso (BigO)
nos diz que todas as linhas devem ser
executadas, ou seja, a condicional será
sempre verdadeira, e ambos laços de
repetição serão sempre executados,
sendo assim, complexidade O(n²).
Questão 12/12 - Estrutura de Dados
(questão opcional)
Na AULA 4 estudamos a inserção em uma
árvore binária. Abaixo temos um código em
linguagem C com uma função de inserção na
árvore binária, considerando ela como uma
Binary Search Tree (BST).
1. void Inserir(ElementoDaArvoreBinaria **
ElementoVarredura, int num) {
2.
3. if (*ElementoVarredura == NULL)
4. {
5. ElementoDaArvoreBinaria
*NovoElemento = NULL;
6. NovoElemento =
(ElementoDaArvoreBinaria
*)malloc(sizeof(ElementoDaArvoreBinaria));
7. NovoElemento->esquerda = NULL;
8. NovoElemento->direita = NULL;
9.
10. NovoElemento->dado = num;
11. *ElementoVarredura = NovoElemento;
12. return;
13. }
14.
15. if (num < (*ElementoVarredura)->dado)
16. {
17.
Inserir(&(*ElementoVarredura)->esquerda,
num);
18. }
19. else
20. {
21. if (num >(*ElementoVarredura)->dado)
22. {
23.
Inserir(&(*ElementoVarredura)->direita,num);
24. }
25. }
26. }
Acerca de árvores binárias e do código
acima, assinale a alternativa CORRETA.
Nota: 0.0
A Nas linhas 15 a 25 a função testa para qual ramo da árvore irá seguir, direito ou
esquerdo, chamando novamente a função de inserção de forma recursiva.
Correto.
B Na linha 3 temos um teste condicional simples que tem como objetivo verificar se a
árvore binária está completamente vazia, ou não.
Verifica se AQUELE ELEMENTO está
vazio, não a arvore toda;
C Todo o código colocado entre as linhas 15 e 25 poderiam estar dentro de um
SENÃO que faz parte da condicional da linha 4.
Não seria possível isso, pois as linhas 15
a 25 precisam ser executadas
independentemente da condição da linha
3;
D Na linha 2 temos a declaração da função, onde o primeiro parâmetro é uma variável
que foi declarada com dois asteriscos (**). Deveria ser somente um, pois dois
asteriscos não são permitidos na linguagem C.
É permitido e está correto. Porque temos
um ponteiro para outro ponteiro,
caracterizando dois asteriscos;
E O uso do um asterisco antes do nome da variável, como na linha 3 por exemplo,
significa que queremos manipular o endereço daquela variável.
O asterisco indica o conteúdo indireto
para qual o ponteiro aponta.

Outros materiais