(1) O documento descreve o algoritmo de ordenação Merge Sort, seu funcionamento baseado em divisão e conquista, e complexidade de tempo O(n log n). (2) Apresenta gráficos comparando o tempo de execução e número de trocas do Merge Sort em diferentes situações. (3) Conclui que o Merge Sort é um algoritmo eficiente e consistente, independente da distribuição inicial dos dados no array.
(1) O documento descreve o algoritmo de ordenação Merge Sort, seu funcionamento baseado em divisão e conquista, e complexidade de tempo O(n log n). (2) Apresenta gráficos comparando o tempo de execução e número de trocas do Merge Sort em diferentes situações. (3) Conclui que o Merge Sort é um algoritmo eficiente e consistente, independente da distribuição inicial dos dados no array.
(1) O documento descreve o algoritmo de ordenação Merge Sort, seu funcionamento baseado em divisão e conquista, e complexidade de tempo O(n log n). (2) Apresenta gráficos comparando o tempo de execução e número de trocas do Merge Sort em diferentes situações. (3) Conclui que o Merge Sort é um algoritmo eficiente e consistente, independente da distribuição inicial dos dados no array.
(1) O documento descreve o algoritmo de ordenação Merge Sort, seu funcionamento baseado em divisão e conquista, e complexidade de tempo O(n log n). (2) Apresenta gráficos comparando o tempo de execução e número de trocas do Merge Sort em diferentes situações. (3) Conclui que o Merge Sort é um algoritmo eficiente e consistente, independente da distribuição inicial dos dados no array.
Baixe no formato DOCX, PDF, TXT ou leia online no Scribd
Fazer download em docx, pdf ou txt
Você está na página 1de 5
INTRODUÇÃO
Um algoritmo de ordenação é um conjunto de instruções que recebe um
array ou lista como entrada e organiza os itens em uma ordem específica, normalmente alfabética ou numérica. Esses algoritmos são fundamentais na computação por diminuir a complexidade de problemas, facilitando algoritmos de busca, banco de dados, entre outros.
O seguinte trabalho abordará o funcionamento do algoritmo de
ordenação Merge Sort, contendo suas principais características, modo de funcionamento, gráficos com seus tempos de execução e total de trocas em diferentes situações, entre outras informações. MERGE SORT Existem diversos tipos de algoritmos de ordenação, possuindo os mais diferentes métodos de funcionamento, no caso do Merge Sort ele utiliza a lógica de divisão e conquista, sendo conhecido por ser estável e possuindo uma complexidade de tempo de O (n log n), o que o torna eficiente em listas grandes. O seu funcionamento pode ser descrito em alguns passos: A primeira etapa na ordenação é dividir a lista em duas metades. Isso é feito recursivamente até que cada segmento contenha apenas um elemento. As metades divididas são então reunidas em ordem. Isto é feito comparando os elementos das duas metades e colocando-os em ordem. A próxima etapa envolve comparar os elementos das metades reunidas anteriormente e criar um segmento ordenado com base nessas comparações. Para fazer isso, você precisa comparar o primeiro elemento das duas metades, mover o elemento menor para o novo segmento ordenado e, em seguida, avançar na metade de onde você obteve o elemento. Este processo continua até que uma das metades esteja completamente mesclada na lista ordenada. Quaisquer elementos restantes na outra metade serão adicionados à lista ordenada porque já estão em ordem. Essas etapas de ordenação devem ser repetidas, geralmente por recursão, até que a lista seja classificada. À medida que os segmentos são mesclados, a lista é colocada novamente na ordem correta. A seguir uma imagem que ilustra o funcionamento descrito: Com base em uma implementação do Merge Sort para Java foram realizados alguns testes em diferentes situações, com elementos inseridos em ordem, elementos inseridos em ordem inversa e elementos inseridos aleatoriamente, assim, coletando o tempo médio de execução e o total de trocas em diversos tamanhos de arrays. Seguem dois gráficos para visualização dos resultados:
Gráfico de total de trocas.
Como o Merge Sort sempre vai dividir e mesclar o array o mesmo número de vezes de acordo com o seu tamanho, a quantidade de movimentações sempre será a mesma independente dos elementos pertencentes a ele, portanto as três situações se sobrepõem no gráfico. Gráfico do tempo de execução. Se torna visível que o único caso que o tempo é maior é na situação de elementos aleatórios, isso ocorre porque o algoritmo Merge Sort vai precisar fazer mais comparações totais, mesmo que a quantidade de movimentação se mantenha, porém, ainda assim os tempos de execução não se distanciam muito, mantendo uma eficiência semelhante em qualquer caso.
Como visto anteriormente a complexidade do Merge Sort é O (n log n)
em qualquer situação, seja no melhor, médio ou pior caso, ele sempre vai realizar a segmentação do array e posteriormente a sua mesclagem independente da distribuição dos elementos do array previamente. A origem da complexidade do Merge Sort se dá a partir da sua equação de recorrência T(n) = 2T(n/2) + Θ(n), onde utilizando o segundo caso do teorema mestre obtemos T(n) = Θ (n^ logba * logn) = Θ(nlogn), chegando assim à T(n) = O(nlogn).
Um algoritmo é estável quando números com o
mesmo valor aparecem no array de saída na mesma ordem em que aparecem no array de entrada. Esta propriedade é importante quando os dados de satélite que acompanham o objeto ordenado precisam ser transmitidos com ele. Dessa forma, o Merge Sort pode ser considerado um algoritmo de ordenação estável, já que corresponde corretamente a esta característica. Concluindo, o Merge Sort é um algoritmo muito eficiente de ordenação, sendo consistente na sua complexidade, O(nlogn), indiferentemente da distribuição anterior dos dados. Ele se baseia em sucessivas partições e junções para organizar os elementos do array, não sendo in-place, pois utiliza array auxiliar (helper) na ordenação, e sendo um algoritmo estável.