Baixe o app para aproveitar ainda mais
Prévia do material em texto
Disciplina: Pesquisa e Ordenação Professor: José Couto Júnior Aluna: Patrícia Fernandes do Carmo Lista de Exercícios 1 1. Observe o trechos de pseudocódigos a seguir: A B C Sobre os pseudocódigos na tabela anterior responda: a. Que método de ordenação está relacionado com trecho de código A ? Justifique sua resposta explicando o método de ordenação e sua relação com o código. Método Bolha - No pseudocódigo tem uma descrição "n - 1" é onde faz a comparação entre os elementos "N" do vetor com seu sucessor levando até o a posição "0" que satisfaz a condição de ordem crescente. b. O código B representa uma melhoria do primeiro algoritmo. Observe e indique as diferenças entre o código anterior, quais melhorias foram realizadas, o papel do FLAG os impactos positivos destas melhorias na ordenação O Metodo "FLAG" foi usado apenas para evitar iterações inúteis isso é interessante, pois economiza tempo e memoria facilitando todo o processo. c. Que método de ordenação está relacionado com trecho de código C? Justifique sua resposta explicando o método de ordenação e sua relação com o código. Método seleção, pois o algoritmo de ordenação por seleção possui dois laços de repetição, os quais são responsáveis por pegar o elemento atual e compará-lo com seus sucessores, ao final das comparações de cada iteração, o elemento atual trocará de lugar com o menor sucessor encontrado durante aquela iteração. Esse método realiza poucas operações de swap. Seu desempenho costuma ser superior ao do método bolha, mas inferior ao do método inserção. Nesse método a lista está dividida em parte esquerda, já ordenada, e parte direita em possível desordem, além disso, os elementos da parte esquerda são todos menores ou iguais aos da parte direita. Cada interação consiste em selecionar o menor elemento da parte direita (pivô) e trocá-lo com o primeiro elemento a parte direita. Se a lista possui n elementos, após n – 1 iterações ela estará ordenada. No código é evidente que o Algoritmo Seleção realiza (n 2 – n) / 2 e sua complexidade temporal pertence a O (n2). O Algoritmo Seleção necessita de apenas quatro variáveis escalares para fazer o seu trabalho, sendo assim a complexidade espacial desse método é O (1). 2. Sobre as figuras a seguir responda: a) Que algoritmo foi utilizado para ordenar o vetor a seguir? Justifique sua resposta indicando o passo a passo deste algoritmo de ordenação O Selection Sort, pois esse método pega o elemento atual e percorre o conjunto procurando verificar se ele é o menor elemento do conjunto. Se o elemento escolhido não for o menor, ele trocará de lugar com o menor elemento. subsequente. Estando este elemento já ordenado, procura-se o segundo menor elemento, e assim por diante até obter todos os elementos ordenados. É o conteúdo de um vetor após cada iteração do laço mais externo do Algoritmo, onde a parte esquerda da lista aparece sombreada. Aqui o método Seleção é não estável. Na figura acima é possível observar que na lista original o elemento inicial é o 10, e ao percorrer o conjunto verificou-se que o menor elemento subsequente é o 2, assim, o elemento inicial 10 troca de lugar com o menor elemento. Em seguida, o elemento a ser comparado é o da posição seguinte a já ordenada, no caso é o elemento 4, e após ser comparado com os demais elementos subsequentes o menor elemento encontrado é o 3, acontece a troca de posição entre o elementos 3 e 4. Avançamos para o elemento seguinte da posição seguinte a já ordenada, o elemento 5, ao ser comparado com os subsequentes obtém o elemento 4 como menor, há a troca de posições desses elementos. Em seguida ao comparar o elemento atual, o elemento 10, com seu subsequente, o elemento 10, não há inferioridade do elemento subsequente em questão, o que faz com que não haja troca de posições e aí algoritmo é encerrado. b) Que algoritmo foi utilizado para ordenar o vetor a seguir? justifique sua resposta indicando o passo a passo deste algoritmo de ordenação Resposta: O algoritmo utilizado foi o Insertion Sort. Nesse método considera-se que a lista está dividida em parte esquerda já ordenada, e parte direita em possível desordem. É fácil perceber que se a lista possui n elementos, após n – 1 inserções ela estará ordenada. E para inserir o pivor percorre-se a parte esquerda, da direita para a esquerda, deslocando apenas os elementos maiores que um pivor uma posição para direita. Esse algoritmo requer apenas três variáveis escalares e sua complexidade espacial é O(1). Ele é estável. 3. Pesquise sobre o algoritmo de ordenação ShellSort e responda: Quais valores para h foram sugeridos pelos pesquisadores Donald L. Shell Donald Knuth, e Robert Sedgewick. Explique a sequência de valores de h gerados e quais fórmulas para gerar h foram sugeridas por estes cientistas da computação. Feito isso explique como funciona este algoritmo de ordenação. - Foi proposto por Shell em 1959 uma extensão do algoritmo por inserção; O algoritmo de inserção é aplicado utilizando uma distância h entre os elementos. Desse modo, os elementos que estão muito distantes de sua posição real são aproximados mais rapidamente para a posição relativa à ordenação; Sequencias de h têm sido experimentadas. Shell sugeriu usar potências de 2 como valores de h, por exemplo: para ordenar uma lista de 100 elementos seriam utilizados os números 64,32,16,8,4,2 e 1 como valores de h. - Donald Knuth mostrou que h(s) = 3 * h(s-1) + 1 e h(1) = 1 é difícil de ser superado por outra série de saltos em mais do que 20% das ocasiões. Ele sugeriu calcular os valores de h usando a seguinte fórmula de recorrência: h = 3 * h + 1. Como o último valor de h tem que ser 1 usando essa fórmula, o valor anterior de h seria 4. Antes de 4, o valor de h seria 13 e assim por diante. Ex: Para ordenar uma lista de 100 elementos seriam utilizados os números 40,13,4 e 1 como valores de h. - Robert Sedgewick propôs a sequência h i = 4 i + 3 . 2 i −1 + 1 para i ≥ 1 h 0 = 1 A sequência h = 1, 8, 23, 77, 281, 1073, 4193, 16577,..., que segundo Sedgewick, é mais rápida que a proposta por Knuth de 20 a 30% 4. Considere as figuras a seguir: 02 a) Que método está sendo utilizado na figura 01? Resposta: Mergesort b) O método da figura 01 é recursivo? Justifique sua resposta indicando trechos de códigos deste algoritmo em linguagem JAVA Sim. /** * Método chamado recursivamente que divide o vetor ao meio e depois chama mesclagem e ordenação os dos elementos. * * @ param inicio Posição inicial do conjunto. * @ param fim Posição final do conjunto. */ public static void dividir(int inicio, int fim) { // Se o inicio for menor que o fim, conclui-se que ainda pode dividir o conjunto. if (inicio < fim) { // Pega a posição do meio do conjunto. int meio = (inicio + fim) / 2; // Divide a primeira metade. dividir(inicio, meio); // Divide a segunda metade. dividir(meio + 1, fim); // Junta as metades com os elementos ordenados. mesclar(inicio, meio, fim); } } c) Explique passo a passo deste método de ordenação e indique como funciona a fase de INTERCALAÇÃO deste método O algoritmo Mergesort utiliza o princípio de dividir para conquistar, sendo assim, o conjunto inicial é dividido ao meio, esses dois subconjuntos são divididos da mesma forma e assim sucessivamente até termos diversos subconjuntos compostos por apenas 1 elemento. Logo após é feita a comparação dos elementos subconjuntos filhos de 1 elemento apenas que foram gerados do subconjunto pai de 2 elementos, colocando os elementos ordenados em um novo subconjunto filho, mas agora formado por 2 elementos ordenados.Em seguida, esse novo subconjunto filho com 2 elementos ordenados é comparado com o outro subconjunto filho ordenado, também de 2 elementos, que fazia parte do subconjunto pai com 4 elementos. Então é criado um novo subconjunto filho com 4 elementos ordenados, o qual terá seus elementos comparados com os de seu irmão, e gerarão um novo conjunto pai com os 8 elementos ordenados. E assim sucessivamente será feito até obter um conjunto pai totalmente ordenado, com os mesmos elementos do conjunto inicial desordenado. A classificação por intercalação consiste em dividir o vetor de chaves a ser classificado em dois ou mais, ordená-los separadamente e, depois intercalá-los dois a dois, formando cada par intercalado, novos segmentos, ordenados, os quais serão intercalados entre si, repetindo-se o processo até que resulte apenas um segmento ordenado que seria o próprio vetor ordenado. d) Que método está sendo utilizado na figura 02? Resposta: Quicksort. e) O método da figura 02 é recursivo? Justifique sua resposta indicando trechos de códigos deste algoritmo em linguagem JAVA Resposta: Sim. /** * Divide o vetor ao meio recursivamente, tendo como base o pivô, e depois mescla e ordena os elementos. * * @param inicio Inicio do vetor a ser ordenado. * @param pivo Pivô do vetor a ser ordenado. * @param fim Fim do vetor a ser ordenado. */ public static void ordenacao_quick_sort(int[] vetor, int inicio, int fim) { // Pivo do vetor. int pivo; // Se o inicio é menor que o fim, temos elementos para particionar. if (inicio < fim) { // O pivo é retornado depois de particionar o vetor. pivo = particionar(vetor, inicio, fim); // Ordena o vetor do inicio para o meio. ordenacao_quick_sort(vetor, inicio, pivo); // Ordena o vetor do meio para o fim ordenacao_quick_sort(vetor, pivo + 1, fim); } } f) Como é feita a escolha do Pivô no método da figura 02? existem outras possibilidades? Quais são? Foi feito através da escolha da mediana do conjunto. Sim, ou pela média aritmética ou pela escolha aleatória de um elemento. 5. No caso do quicksort, considere que o pivô é o elemento central e apresente a ordenação do vetor A = {2, 5, 32, 21, 102, 1, 11, 24, 35, 44, 56}. Informe a quantidade de comparações e trocas efetuadas. Foram feitas 15 trocas e 19 comparações 6. Dada a sequência de números: 3 4 9 2 5 8 2 1 7 4 6 2 9 8 5 1, ordene-a em ordem crescente segundo os seguintes algoritmos, apresentando a sequência obtida após cada passo do algoritmo: a. MergeSort b. QuickSort
Compartilhar