Buscar

APOL 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 44 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 44 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 44 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

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: 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 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.
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 3/10 - 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: 10.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.
Você acertou!
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 4/10 - Estrutura de Dados
O segundo assunto de nossa disciplina diz respeito a algoritmos de ordenação de dados.
Acerca deste assunto, assinale a alternativa INCORRETA:
Nota: 10.0
	
	A
	Algoritmos de ordenação são empregados com o objetivo de ordenar conjuntos de dados a partir de uma determinada métrica, como por exemplo, ordenar nomes de pessoas em ordem alfabética crescente.
	
	B
	Existem os mais diversos algoritmos de ordenação, sendo que cada um deles apresentará uma complexidade distinta em tempo de execução e de uso de memória e, portanto, devem ser minuciosamente escolhidos de acordo com a aplicação.
	
	C
	A permuta de grandes quantidades de dados para ordenação tende a ser custoso computacionalmente. O uso de variáveis ponteiros servem para auxiliar e otimizar este processo ordenando somente os endereços ao invés de todo o conjunto de dados.
	
	D
	Um algoritmo de ordenação é um método que descreve como é possível colocar, em uma ordem específica, um conjunto de dados qualquer.
	
	E
	A lógica algorítmica de cada método de ordenação difere para cada tipo de estrutura de dados que se deseja manipular.
Você acertou!
AULA 2 – TEMA 1. A estrutura de dados não muda a lógica de funcionamento do algoritmo de ordenação, só muda a estrutura a ser manipulada.
Questão 5/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 6/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 termode 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 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 que realiza 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
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 9/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 10/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 1/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 centralcom o buscado.
Questão 2/10 - 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: 10.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.
Você acertou!
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 3/10 - 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/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 5/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 6/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 7/10 - Estrutura de Dados
Uma função que implementa o algoritmo bubble sort pode ser vista abaixo. Todoo 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 8/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 9/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 que realiza 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 10/10 - Estrutura de Dados
A complexidade de um algoritmo pode ser mensurada matematicamente em termos de uma função de custo do algoritmo.
Acerca da função custo de um algoritmo, assinale a alternativa CORRETA:
Nota: 10.0
	
	A
	A ordem de como os dados de entradas estão organizados não tem impacto no desempenho do algoritmo em tempo de execução.
Tem impacto. Conforme mostrado na AULA 1 – TEMA 2.
	
	B
	O custo matemático de um algoritmo é dado, exclusivamente, pelo custo de tempo de execução de um algoritmo.
É dado pelo tempo de execução e pelo uso de memória, embora este segundo não esteja sendo investigado em nossa disciplina.
	
	C
	O custo matemático de tempo de execução de um algoritmo pode ser mensurado através da contagem de instruções em uma linguagem de alto nível.
Você acertou!
AULA 1 – TEMA 2. CORRETO.
	
	D
	A função custo é dada em função do tamanho do conjunto de dados de entrada n, ou seja, em função da quantidade de instruções a serem executadas.
n representa a quantidade de dados a serem manipulados, como por exemplo, um vetor de entrada de tamanho n. E não significa as instruções contadas.
	
	E
	O custo de tempo de execução de um algoritmo corresponde a quantos núcleos paralelos o algoritmo está sendo executado.
Tempo de execução significa o quão rápido um algoritmo executa para resolver um problema. Não tendo relação com o paralelismo.
Questão 1/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 que realiza 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 maiorque 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 2/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: 0.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.
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 3/10 - Estrutura de Dados
A complexidade de um algoritmo pode ser mensurada matematicamente em termos de uma função de custo do algoritmo.
Acerca da função custo de um algoritmo, assinale a alternativa CORRETA:
Nota: 10.0
	
	A
	A ordem de como os dados de entradas estão organizados não tem impacto no desempenho do algoritmo em tempo de execução.
Tem impacto. Conforme mostrado na AULA 1 – TEMA 2.
	
	B
	O custo matemático de um algoritmo é dado, exclusivamente, pelo custo de tempo de execução de um algoritmo.
É dado pelo tempo de execução e pelo uso de memória, embora este segundo não esteja sendo investigado em nossa disciplina.
	
	C
	O custo matemático de tempo de execução de um algoritmo pode ser mensurado através da contagem de instruções em uma linguagem de alto nível.
Você acertou!
AULA 1 – TEMA 2. CORRETO.
	
	D
	A função custo é dada em função do tamanho do conjunto de dados de entrada n, ou seja, em função da quantidade de instruções a serem executadas.
n representa a quantidade de dados a serem manipulados, como por exemplo, um vetor de entrada de tamanho n. E não significa as instruções contadas.
	
	E
	O custo de tempo de execução de um algoritmo corresponde a quantos núcleos paralelos o algoritmo está sendo executado.
Tempo de execução significa o quão rápido um algoritmo executa para resolver um problema. Não tendo relação com o paralelismo.
Questão 4/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 5/10 - Estrutura de Dados
O segundo assunto de nossa disciplina diz respeito a algoritmos de ordenação de dados.
Acerca deste assunto, assinale a alternativa INCORRETA:
Nota: 10.0
	
	A
	Algoritmos de ordenação são empregados com o objetivo de ordenar conjuntos de dados a partir de uma determinada métrica, como por exemplo, ordenar nomes de pessoas em ordem alfabética crescente.
	
	B
	Existem os mais diversos algoritmos de ordenação, sendo que cada um deles apresentará uma complexidade distinta em tempo de execução e de uso de memória e, portanto, devem ser minuciosamente escolhidos de acordo com a aplicação.
	
	C
	A permuta de grandes quantidades de dados para ordenação tende a ser custoso computacionalmente. O uso de variáveis ponteiros servem para auxiliar e otimizar este processo ordenando somente os endereços ao invés de todo o conjunto de dados.
	
	D
	Um algoritmo de ordenação é um método que descreve como é possível colocar, em uma ordem específica, um conjunto de dados qualquer.
	
	E
	A lógica algorítmica de cada método de ordenação difere para cada tipo de estrutura de dados que se deseja manipular.
Você acertou!
AULA 2 – TEMA 1. A estrutura de dados não muda a lógica de funcionamento do algoritmo de ordenação, só muda a estrutura a ser manipulada.
Questão 6/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 7/10 - 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íciorealizado 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 8/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 9/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 10/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 1/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 2/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 3/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 4/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 vizinhosde cada vértice.
Questão 5/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 6/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 7/10 - Estrutura de Dados
Na AULA 5 estudamos grafos e o algoritmo de caminho mínimo.
Acerca do algoritmo de caminho mínimo Djikstra, assinale a alternativa CORRETA.
Nota: 10.0
	
	A
	Este algoritmo só é capaz de definir um menor caminho caso grafo seja ponderado.
Podemos usar um grafo ponderado, mas isso não é obrigatório. Caso ele não seja ponderado, significa que todas as arestas terão peso um, e caso a métrica seja aditiva, teremos que o menor caminho será o menor número de saltos possíveis.
	
	B
	O Djikstra só é capaz de definir a melhor rota seguindo uma métrica denominada de aditiva.
Podemos usar diferentes métricas. A aditiva é a mais comum.
	
	C
	Quando não existe um caminho entre dois vértices, representamos como se a rota entre eles no vetor de distâncias tem um peso infinito (variável de valor extremamente alto).
Você acertou!
Correto. AULA 5 – TEMA 4.
	
	D
	O caminho de um vértice V0 até um vértice V2, passando por um vértice V1, utilizando métrica aditiva, será a soma dos pesos de V0 para V1 e V0 para V2.
Será a soma de V0 para V1 e V2 para V2.
	
	E
	O vértice de origem sempre terá um caminho infinito para si próprio.
O vértice de origem para ele mesmo será peso zero do caminho.
Questão 8/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: 10.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.
Você acertou!
CORRETO. A consulta EM ORDEM, por padrão é crescente. Se invertermos a ordem fica decrescente.
Questão 9/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: 10.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.
Você acertou!
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 10/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 comos 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 1/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 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: 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 3/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: 10.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.
Você acertou!
CORRETO. A consulta EM ORDEM, por padrão é crescente. Se invertermos a ordem fica decrescente.
Questão 4/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 5/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 6/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 7/10 - Estrutura de Dados
Na AULA5 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 8/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 9/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: 10.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.
Você acertou!
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 10/10 - Estrutura de Dados
Na AULA 5 estudamos grafos e o algoritmo de caminho mínimo.
Acerca do algoritmo de caminho mínimo Djikstra, assinale a alternativa CORRETA.
Nota: 10.0
	
	A
	Este algoritmo só é capaz de definir um menor caminho caso grafo seja ponderado.
Podemos usar um grafo ponderado, mas isso não é obrigatório. Caso ele não seja ponderado, significa que todas as arestas terão peso um, e caso a métrica seja aditiva, teremos que o menor caminho será o menor número de saltos possíveis.
	
	B
	O Djikstra só é capaz de definir a melhor rota seguindo uma métrica denominada de aditiva.
Podemos usar diferentes métricas. A aditiva é a mais comum.
	
	C
	Quando não existe um caminho entre dois vértices, representamos como se a rota entre eles no vetor de distâncias tem um peso infinito (variável de valor extremamente alto).
Você acertou!
Correto. AULA 5 – TEMA 4.
	
	D
	O caminho de um vértice V0 até um vértice V2, passando por um vértice V1, utilizando métrica aditiva, será a soma dos pesos de V0 para V1 e V0 para V2.
Será a soma de V0 para V1 e V2 para V2.
	
	E
	O vértice de origem sempre terá um caminho infinito para si próprio.
O vértice de origem para ele mesmo será peso zero do caminho.
Questão 1/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 2/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: 10.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.
Você acertou!
CORRETO. A consulta EM ORDEM, por padrão é crescente. Se invertermos a ordem fica decrescente.
Questão 3/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 4/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árianã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 5/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 6/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 7/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 8/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 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 9/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 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: 10.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.
Você acertou!
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;

Outros materiais