Buscar

Estrutura em Pyton

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 6 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 6 páginas

Prévia do material em texto

1a 
 Questão 
Acerto: 1,0 / 1,0 
 
Em Python é possível implementar um array utilizando o tipo padrão list. Essa implementação permite o uso das 
seguintes funções para inserir e remover um elemento, respectivamente: 
 
 append, remove/pop. 
 
insert, delete/pop. 
 
insert, remove/destroy. 
 
append, pop/delete. 
 
impose, remove/destroy. 
 
 
Explicação: 
Em Python a função append insere um elemento ao final da lista. As funções "remove" e "pop" podem remover um elemento, de 
maneiras diferentes. Remove tira um elemento conhecido usando o seu conteúdo, já pop remove um elemento usando seu índice, 
ou seja, a sua posição na lista. 
 
 
2a 
 Questão 
Acerto: 1,0 / 1,0 
 
O uso de funções recursivas pode facilitar a implementação de diversos algoritmos. Toda recursão depende de dois 
elementos: o caso base e o passo recursivo. Dentre as opções a seguir, a que apresenta um passo recursivo é: 
 
 fat(n)=n*fat(n-1) 
 
par(n)=par(n) 
 
fib(n)=n-1 + n-2 
 
fat(1)=1 
 
f(n)=g(n-1) 
 
 
Explicação: 
O passo recursivo é o elemento que faz o cálculo da função recursiva mover-se em direção ao resultado. Deve envolver a 
chamada da própria função com um valor diferente de entrada. Isso só acontece na resposta correta: fat(n)=n*fat(n-1) , passo 
recursivo da função de cálculo de fatorial. 
fat(1)=1 é o caso base dessa mesma função. par(n)=par(n) é uma tautologia, e não uma recursão. As demais respostas são 
funções que não chamam a si mesmas, não podendo ser passos recursivos. 
 
 
 
 
 
3a 
 Questão 
Acerto: 0,0 / 1,0 
 
O método de ordenação da bolha, ou Bubblesort (BS) tem complexidade de pior caso O(n2) e melhor caso O(n). 
Suponha que exista um algoritmo de ordenação MS que tem complexidade de melhor caso O(nlog n) e de pior caso 
O(nlog n). Podemos afirmar que: 
 
 
Para uma única entrada de tamanho grande, MS executará em menos tempo que BS. 
 Para uma única entrada de tamanho grande, BS executará em menos tempo que MS. 
 Para um grande conjunto de entradas variadas de tamanho grande, MS executará em menos tempo que BS, 
em média. 
 
Para um grande conjunto de entradas variadas de tamanho grande, BS executará em menos tempo que MS, 
em média. 
 
MS e BS são igualmente eficientes em ordenar elementos, independente da entrada ou seu tamanho. 
 
 
Explicação: 
Pela natureza do tratamento de complexidade de algoritmos e o uso da notação O, a única afirmativa verdadeira é a de que em 
média, com um grande número de entradas distintas e de tamanho grande, MS executará mais rápido que BS pois sua 
complexidade assintótica O(nlogn) é melhor que a de BS O(n2). 
A afirmação inversa está errada pelo mesmo argumento, O(nlogn) é melhor que O(n2). 
As afirmações que tratam de uma única entrada são falsas, pois você sempre pode escolher uma entrada que seja de melhor caso 
para um dos algoritmos e seja ruim para o outro. 
Por fim, a afirmação de que ambos são igualmente eficientes é desmentida pelo pior caso. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4a 
 Questão 
Acerto: 1,0 / 1,0 
 
Uma Deque é uma estrutura de dados mais generalista que as pilhas e filas. Para implementá-la de forma eficiente, 
você pode usar: 
 
 
Lista contígua com 1 variável: início. 
 
Fila com 2 variáveis: início e final. 
 
Pilha com 1 variável: topo. 
 
Lista simplesmente encadeada com nó cabeça. 
 Lista duplamente encadeada com 2 variáveis: início e final. 
 
 
Explicação: 
Para implementar uma deque eficientemente, você precisa ter um ponteiro para o início e o final da deque, permitindo inserções e 
remoções em ambas as pontas com complexidade O(1) , sem a necessidade de percorrer a estrutura, o que seria O(n). 
Além disso, a fila é uma especialização da deque. Ou seja, toda fila é um deque, mas nem toda deque é uma fila. Podemos assim 
eliminar a resposta contendo fila. A resposta restante que possui 2 variáveis é a correta. Lista duplamente encadeada. Ela permite 
a inserção e remoção nas extremidades com complexidade O(1). 
A lista contígua e a simplesmente encadeada com nó cabeça levariam a operação de inserção e remoção ao final da fila terem 
complexidade O(n) por precisarem percorrer toda a estrutura, sendo também descartadas. 
 
 
5a 
 Questão 
Acerto: 1,0 / 1,0 
 
Em uma implementação da estrutura de dados do tipo fila, você possui um espaço de memória contíguo a ela alocada 
com capacidade para M nós. A variável da fila é F, e duas variáveis guardam os índices do início e final da fila (inicioF e 
finalF). Em uma implementação otimizada de F, como podemos identificar que a fila está cheia? 
 
 
InicioF== finalF 
 
InicioF==finalF + 1 
 InicioF==(finalF+1)mod M 
 
InicioF = M 
 
FinalF== M 
 
 
Explicação: 
Em uma implementação otimizada da fila, é usado um sistema modular, onde o início e o final da fila se movem a cada inserção e 
remoção. A cada inserção, finalF aumenta em 1, até o máximo M, depois volta para 0 e assim por diante. A cada remoção inícioF 
aumenta em 1, até o máximo M e depois volta a 0. dessa forma a fila está cheia quando (finalF+1)modM é igual a inicio. 
 
 
6a 
 Questão 
Acerto: 1,0 / 1,0 
 
Suponha que você está implementando um programa que precisa armazenar dados ordenados em uma estrutura para 
serem tratados posteriormente, na ordem inversa à que foram recebidos. Haverá uma grande quantidade de 
recebimentos e tratamento de dados, mas o tamanho esperado da estrutura não deve variar muito. Qual tipo de 
estrutura de dados é a melhor nessa situação? 
 
 Pilha. 
 
Lista duplamente encadeada. 
 
Lista em alocação contígua. 
 
Fila. 
 
Lista simplesmente encadeada. 
 
 
Explicação: 
A pilha permite o tratamento de nós usando a política requerida, FILO ¿ ¿first in last out¿ -. Além disso, as operações de inserção 
e remoção são O(1), ou seja, de complexidade constante, a melhor possível. Isso condiz com o requisito de que haverá muitas 
operações desse tipo. Por fim, o fato de a estrutura não variar muito em tamanho permite o uso de uma alocação contígua e 
otimizada para a pilha. A fila não obedece a lógica FILO e as listas têm complexidade de inserção e remoção O(n) sendo muito 
piores que a pilha, principalmente quando o número desses tipos de operação é grande. 
 
 
7a 
 Questão 
Acerto: 0,0 / 1,0 
 
Seja a seguinte Árvore Binária. Marque a opção correta: 
 
 
 
A quantidade de nós da árvore é de n ¿ 1, sem considerar o nó raiz. 
 A árvore acima possui raiz de valor 3. 
 A quantidade de folhas da árvore é 4. 
 
Não é possível inserir nós filhos ao nó 70. 
 
É possível inserir mais um filho a esquerda no nó de valor 90. 
 
 
Explicação: 
A quantidade de folhas da árvore é 4, ou seja, são aqueles nós que possuem grau zero. 
 
 
8a 
 Questão 
Acerto: 1,0 / 1,0 
 
Marque a opção correta acerca da visita In-Ordem, usada em percursos de árvores binárias de busca: 
 
 
O percurso in-ordem inicia a visita pela raiz da árvore, depois visita as sub-árvores a esquerda e depois as sub-
árvores à direita em ordem assimétrica. 
 
O percurso in-ordem inicia a visita pela raiz da árvore, depois visita as sub-árvores a esquerda e depois as sub-
árvores à direita em ordem simétrica, terminando pela raiz principal. 
 
O percurso in-ordem inicia a visita pela raiz da árvore, depois visita as sub-árvores a esquerda e depois as sub-
árvores à direita em ordem simétrica. 
 
O percurso in-ordem inicia a visita nas sub-árvores a direita, depois visita a raiz da árvore e depois as sub-árvores 
à esquerda em ordem simétrica. 
 O percurso in-ordem inicia a visita nas sub-árvores a esquerda em ordem simétrica, depois visita a raiz da árvore 
e depois as sub-árvores à direita em ordem simétrica. 
 
 
Explicação: 
O percurso em ordem simétrica (In-ordem) é definido como se segue. A partir da raiz r da árvore T, percorre-se a árvore da 
seguinte forma: 
1 - percorre-se a sub-árvoresesquerda de T, em ordem simétrica e 
2 - visita-se a raiz; 
3 - percorre-se a sub-árvores direita de T, em ordem simétrica. 
 
 
9a 
 Questão 
Acerto: 1,0 / 1,0 
 
As afirmativas abaixo são feitas com base na estrutura de dados "Árvore Binária de Busca". Em relação ao algoritmo de 
busca em uma árvore binária de busca, analise as afirmativas abaixo: 
I -A complexidade da busca é definida pela altura da árvore binária de busca. No pior caso O(n). 
II - A busca é definida de forma recursiva, parte da raiz, comparando a chave buscada com a armazenada na raiz, caso 
seja igual temos o sucesso da busca, caso contrário, se a chave buscada for menor, devemos proceder recursivamente 
no ramo esquerdo, se a chave buscada for maior, proceder recursivamente no ramo direito. 
III - Sempre é necessário percorrer toda a árvore no algoritmo de busca. Em todos os casos, mesmo em árvores 
completas. 
IV - A condição de parada da busca é encontrar a chave buscada ou ter que descer por um ramo vazio. 
V - É possível escrever o algoritmo da busca de forma não recursiva. 
 
 I, II, IV e V são corretas. 
 
II, III, IV e V são corretas. 
 
I, II, III e IV são corretas. 
 
I, III, IV e V são corretas. 
 
I, II, III, IV e V são corretas. 
 
 
Explicação: 
A afirmativa III é incorreta, não é necessário percorrer todos os nós da árvore se ela estiver perfeitamente balanceada. 
 
 
10a 
 Questão 
Acerto: 1,0 / 1,0 
 
Existem vários tipos diferentes de árvores de busca, como árvores binárias, AVL e árvores B. Nesse sentido, marque a 
opção correta sobre os procedimentos de rotação em árvores AVL: 
 
 Uma rotação simples à esquerda de um nó x acontece quando um desbalanceamento de x acontece à direita. 
 
Uma rotação simples à esquerda de um nó x acontece quando um desbalanceamento de x acontece à 
esquerda. 
 
Uma rotação simples à direita de um nó x acontece quando um desbalanceamento de x acontece à direita. 
 
Uma rotação dupla à esquerda de um nó x acontece quando um desbalanceamento de x acontece à esquerda. 
 
Uma rotação dupla à direita de um nó x acontece quando um desbalanceamento de x acontece à direita. 
 
 
Explicação: 
Em uma árvore AVL, uma rotação simples à esquerda de um nó acontece quando um desbalanceamento de acontece à direita. 
Se um nó desbalanceia para um lado, ele deve rotacionar de forma inversa para ficar balanceado.

Outros materiais