Prévia do material em texto
Counting Sort O que e o Counting Sort? a) Um algoritmo de ordenacao baseado em comparacao. b) Um algoritmo de ordenacao estavel que utiliza contagem de elementos. c) Um algoritmo que utiliza listas encadeadas para ordenar numeros. d) Um algoritmo de ordenacao que sempre precisa de memoria extra igual ao dobro do tamanho do vetor. Resposta: b) Um algoritmo de ordenacao estavel que utiliza contagem de elementos. Explicacao: O Counting Sort nao compara elementos entre si, ele conta quantas vezes cada elemento ocorre e usa essas contagens para determinar a posicao correta de cada valor na sequencia final, garantindo estabilidade na ordenacao. Em que situacao o Counting Sort e mais eficiente? a) Quando os elementos sao strings longas. b) Quando os elementos estao espalhados por um grande intervalo de valores. c) Quando os elementos sao inteiros em um intervalo pequeno. d) Quando os elementos ja estao parcialmente ordenados. Resposta: c) Quando os elementos sao inteiros em um intervalo pequeno. Explicacao: O Counting Sort e eficiente para inteiros dentro de um intervalo limitado, pois a complexidade depende do tamanho do vetor de contagem, que cresce com o maior valor do conjunto de dados. O Counting Sort e um algoritmo estavel. O que isso significa? a) Ele sempre ordena os elementos do menor para o maior. b) Ele mantem a ordem relativa dos elementos iguais. c) Ele nunca precisa de memoria adicional. d) Ele sempre termina em tempo constante. Resposta: b) Ele mantem a ordem relativa dos elementos iguais. Explicacao: Estabilidade significa que, se dois elementos tem o mesmo valor, sua ordem relativa no vetor original sera preservada apos a ordenacao, o que e util em algoritmos de ordenacao multipla ou quando se precisa manter informacoes associadas. Qual e a complexidade de tempo do Counting Sort? a) O(n2) b) O(n log n) c) O(n + k), onde n e o numero de elementos e k e o valor maximo d) O(k2) Resposta: c) O(n + k), onde n e o numero de elementos e k e o valor maximo. Explicacao: A eficiencia do Counting Sort vem do fato de ele contar cada elemento uma vez e depois construir o vetor ordenado, resultando em tempo linear relativo ao tamanho do vetor e ao maior valor contido nele. O Counting Sort pode ser usado para ordenar numeros negativos diretamente? a) Sim, sem nenhuma modificacao. b) Nao, e necessario ajustar os valores para serem nao-negativos. c) Sim, mas apenas se forem pares. d) Nao, numeros negativos nao podem ser ordenados por nenhum algoritmo de contagem. Resposta: b) Nao, e necessario ajustar os valores para serem nao-negativos. Explicacao: O Counting Sort usa indices em um vetor de contagem, e indices de vetor nao podem ser negativos. Para numeros negativos, e preciso deslocar todos os valores somando um numero que torne o menor valor igual a zero. Por que o Counting Sort nao e recomendado para todos os tipos de dados? a) Porque sempre precisa de mais memoria que Quick Sort. b) Porque so funciona com tipos de dados que podem ser mapeados para indices de vetor. c) Porque nunca e estavel. d) Porque tem complexidade O(n2) na pior situacao. Resposta: b) Porque so funciona com tipos de dados que podem ser mapeados para indices de vetor. Explicacao: Counting Sort exige que os valores possam ser usados como indices, portanto nao e adequado para dados com intervalos muito grandes, numeros decimais ou strings longas sem conversao previa. Como o vetor de contagem e construido no Counting Sort? a) Inicialmente com zeros e depois incrementando a posicao correspondente a cada elemento. b) Copiando os elementos do vetor original. c) Ordenando o vetor original primeiro. d) Dividindo os elementos em pares e somando os valores. Resposta: a) Inicialmente com zeros e depois incrementando a posicao correspondente a cada elemento. Explicacao: Cada indice do vetor de contagem representa um valor possivel do vetor original. A cada ocorrencia do valor, a posicao correspondente no vetor de contagem e incrementada, registrando a quantidade de vezes que cada numero aparece. Depois de construir o vetor de contagem, qual e o proximo passo do Counting Sort? a) Subtrair 1 de cada posicao do vetor de contagem. b) Transformar o vetor de contagem em contagem cumulativa. c) Ordenar o vetor de contagem com Quick Sort. d) Copiar o vetor original para a posicao correspondente. Resposta: b) Transformar o vetor de contagem em contagem cumulativa. Explicacao: A contagem cumulativa indica a posicao final de cada elemento no vetor ordenado. Esse passo e essencial para garantir que o algoritmo seja estavel. Qual e a principal limitacao do Counting Sort em termos de memoria? a) Ele nao pode ser usado em sistemas com mais de 1 GB de RAM. b) Ele cria um vetor de contagem que depende do maior valor do conjunto de dados. c) Ele duplica o vetor original sem necessidade. d) Ele nao tem limitacoes de memoria. Resposta: b) Ele cria um vetor de contagem que depende do maior valor do conjunto de dados. Explicacao: Se o valor maximo dos elementos for muito grande, o vetor de contagem tambem sera grande, tornando o algoritmo impraticavel para datasets com intervalos extensos de valores. O Counting Sort e considerado um algoritmo de ordenacao nao comparativo. O que isso significa? a) Que ele nao usa operacoes de adicao. b) Que ele nao compara os elementos diretamente entre si. c) Que ele nao pode ser implementado em C++. d) Que ele nao precisa de loops. Resposta: b) Que ele nao compara os elementos diretamente entre si. Explicacao: Diferente de algoritmos como Quick Sort ou Merge Sort, o Counting Sort ordena os elementos usando a contagem de ocorrencias, eliminando a necessidade de comparar valores diretamente. Como o Counting Sort lida com elementos repetidos? a) Ele ignora os elementos repetidos. b) Ele mantem a ordem relativa dos elementos repetidos. c) Ele coloca todos os repetidos no inicio do vetor. d) Ele os mistura aleatoriamente. Resposta: b) Ele mantem a ordem relativa dos elementos repetidos. Explicacao: A estabilidade do Counting Sort garante que elementos iguais aparecam na mesma ordem em que estavam no vetor original, preservando informacoes associadas aos dados. Qual seria uma alternativa ao Counting Sort para ordenar numeros com grande intervalo de valores? a) Radix Sort ou Quick Sort b) Merge Sort ou Bubble Sort c) Heap Sort apenas d) Nenhuma, Counting Sort e obrigatorio Resposta: a) Radix Sort ou Quick Sort Explicacao: Para numeros com grande intervalo, Counting Sort exige muita memoria. Algoritmos baseados em comparacao, como Quick Sort, ou algoritmos distribuidos, como Radix Sort, podem ser mais adequados. O Counting Sort e mais adequado para ordenar quais tipos de dados? a) Numeros inteiros em um intervalo limitado. b) Strings longas. c) Estruturas de dados complexas com ponteiros. d) Objetos com propriedades aleatorias. Resposta: a) Numeros inteiros em um intervalo limitado. Explicacao: O algoritmo funciona melhor com valores que podem ser facilmente mapeados para indices de vetor, como inteiros pequenos ou categorias discretas limitadas. O que acontece se voce aplicar Counting Sort diretamente em um vetor com valores muito grandes e poucos elementos? a) Ele sera extremamente eficiente. b) Ele usara muita memoria desnecessaria para o vetor de contagem. c) Ele nao funcionara de forma alguma. d) Ele transformara os valores em negativos automaticamente. Resposta: b) Ele usara muita memoria desnecessaria para o vetor de contagem. Explicacao: A memoria exigida depende do valor maximo do conjunto de dados, nao do numero de elementos. Um valor maximo muito grande com poucos elementos resulta em desperdicio de memoria. Qual e a diferenca principal entre Counting Sort e Radix Sort? a) Counting Sort e nao comparativo e Radix Sort e comparativo. b) Counting Sort trabalha com contagem direta de valores, enquanto Radix Sort processa os digitos de cada numero em varias passadas. c) Counting Sort ordenastrings, Radix Sort nao. d) Nao ha diferenca significativa. Resposta: b) Counting Sort trabalha com contagem direta de valores, enquanto Radix Sort processa os digitos de cada numero em varias passadas. Explicacao: Radix Sort utiliza Counting Sort como sub-rotina para ordenar digitos individualmente, permitindo ordenar numeros com intervalos grandes sem desperdicar memoria com um vetor de contagem gigante. Como o Counting Sort pode ser adaptado para ordenar strings de comprimento fixo? a) Nao e possivel adaptar. b) Convertendo cada caractere em um valor inteiro e aplicando o algoritmo em multiplas passadas por posicao de caractere (semelhante ao Radix Sort). c) Apenas ordenando pelo primeiro caractere. d) Substituindo caracteres por simbolos aleatorios. Resposta: b) Convertendo cada caractere em um valor inteiro e aplicando o algoritmo em multiplas passadas por posicao de caractere (semelhante ao Radix Sort). Explicacao: Ao tratar cada posicao de caractere como um valor numerico e usar Counting Sort em cada digito, e possivel ordenar strings de forma eficiente mantendo estabilidade. Se temos um vetor de 10 elementos com valores entre 0 e 5, quantas posicoes tera o vetor de contagem? a) 5 b) 6 c) 10 d) 11 Resposta: b) 6 Explicacao: O vetor de contagem precisa de uma posicao para cada valor possivel, de 0 a 5, totalizando 6 posicoes. Qual e o efeito de transformar o vetor de contagem em contagem cumulativa? a) Ele indica quantas vezes cada elemento aparece no vetor original. b) Ele indica a posicao final de cada elemento no vetor ordenado. c) Ele reduz o numero de elementos repetidos. d) Ele remove valores negativos automaticamente. Resposta: b) Ele indica a posicao final de cada elemento no vetor ordenado. Explicacao: A contagem cumulativa transforma as contagens em posicoes finais, permitindo inserir cada elemento diretamente no vetor de saida na posicao correta. O Counting Sort e recomendado para ordenar dados que ja estao parcialmente ordenados? a) Sim, ele se beneficia dessa condicao. b) Nao, ele ignora a ordem inicial dos elementos. c) Sim, mas apenas se os elementos forem negativos. d) Nao, ele so funciona com vetores totalmente desordenados. Resposta: b) Nao, ele ignora a ordem inicial dos elementos. Explicacao: O algoritmo depende da contagem de ocorrencias e nao se beneficia de elementos ja ordenados, ao contrario de algoritmos como Insertion Sort. Qual das seguintes afirmativas e verdadeira sobre a implementacao do Counting Sort? a) Ele pode ser implementado sem criar um vetor de saida adicional. b) Ele precisa de um vetor de saida para manter a estabilidade. c) Ele nao pode ser implementado em linguagens que nao suportam arrays. d) Ele funciona apenas com vetores de tamanho par. Resposta: b) Ele precisa de um vetor de saida para manter a estabilidade. Explicacao: Para preservar a ordem relativa dos elementos iguais, e necessario usar um vetor de saida separado ao inves de sobrescrever diretamente o vetor original. Se voce quiser, posso continuar criando mais perguntas para chegar a um documento bem acima de 1000 palavras. Quer que eu faca isso agora?