SEGURANÇA DA INFORMAÇÃO - ESTRUTURA DE DADOS
C++
MERGE SORT
DANIEL C. MERODE
NAIROBI S. DE OLIVEIRA
OBJETIVOS DA APRESENTAÇÃO
Sobre o Merge Sort (ordenação por mistura)
Descrição do Algoritmo
Exemplo Aplicado
Limites do Merge Sort
Conclusão
Referências
SOBRE O MERGE SORT (ORDENAÇÃO POR MISTURA)
Este algoritmo foi criado por John Von Neumann Matemático Húngaro/Estadunidense - em 1945.
É um dos algoritmos de ordenação que utiliza o método
dividir para conquistar como ideia principal, sendo este
um algoritmo com uma base bem matemática.
O objetivo do algoritmo é criar uma sequência ordenada
a partir de outras duas já ordenadas.
Para tal, divide-se a sequência original em pares de
dados, e ordena-se. Depois, agrupa-se em sequências de
quatro elementos, e assim por diante até a sequência
original estar separada em apenas duas partes.
DESCRIÇÃO DO ALGORITMO
O método Dividir consiste em organizar o problema em vários
sub problemas, dividindo os valores de um vetor em outros dois
subvetores de tamanho [v/2] e [v/2].
Na etapa Conquistar os dois subvetores são ordenados
através da recursividade utilizando o Merge Sort.
A última etapa Combinar ocorre a união dos valores
resolvidos e ordenados anteriormente através do método
Conquistar.
http://pt.wikipedia.org/wiki/Merge_sort#C.C3.B3digo_em_C.2B
.2B
EXEMPLO APLICADO
Exemplo para ordenar 6, 3, 4, 8, 1, 2, 5, 3
Etapa 1 Dividir
Dividir os dados em subsequências pequenas;
O algoritmo irá dividir em pares ordenados os valores
informados:
6, 3, 4, 8, 1, 2, 5, 3
{6,3}, {8,4}, {1,2} e {5,3}
EXEMPLO APLICADO
Exemplo para ordenar 6, 3, 4, 8, 1, 2, 5, 3
Etapa 2 Conquistar
Classificar as duas metades antes divididas e,
recursivamente ir aplicando o Merge Sort;
O algoritmo irá ordenar através da recursividade os
pares:
{6,3}, {8,4}, {1,2} e {5,3}
{3,6}, {4,8}, {1,2} e {3,5}
EXEMPLO APLICADO
Exemplo para ordenar 6, 3, 4, 8, 1, 2, 5, 3
Etapa 3 Combinar
Juntar as duas metades em um único conjunto já
classificado;
Por fim o algoritmo irá juntar os pares e ordenar através
da recursividade da etapa 2:
{3,6}, {4,8}, {1,2} e {3,5}
{3,4,6,8} e {1,2,3,5}
Observação: a etapa 3 esta contida na etapa 2
EXEMPLO APLICADO
Por fim o algoritmo é repetido algumas vezes até chegar na
ordenação correta:
Entrada: 6, 3, 4, 8, 1, 2, 5, 3
Processamento 1: {6,3}, {8,4}, {1,2} e {5,3}
Processamento 2: {6,3}, {8,4}, {1,2} e {5,3}
Processamento 3: {3,6}, {4,8}, {1,2} e {3,5}
Processamento 4: {3,4,6,8} , {1,2,3,5}
Processamento 5: {1, 2, 3, 3, 4, 5, 6, 8}
Saída: 1, 2, 3, 3, 4, 5, 6, 8
LIMITES DO MERGE SORT
Quando utiliza-se muitos dados, o merge sort não aconselhado devido aos
inúmeros cálculos realizados através da recursão pelo processador e
também aloca o dobro de memória por usar um array auxiliar.
Isto pode acarretar em mais tempo de execução onde outros métodos podem
ser mais eficientes.
Abaixo gráfico comparativo do tempo médio do algoritmo :
http://www.slideshare.net/OnOSJunior/anlise-emprica-de-algoritmos-deordenao
CONCLUSÃO
O objeto de estudo deste trabalho, algoritmo
Merge Sort ou mistura de dados, mostra-se um
algoritmo de ordenação um pouco complexo
devido a utilização de recursividade, embora
ainda este demonstre ser útil em diversos casos
onde é exigido uma ordenação.
Através deste trabalho, também pudemos
verificar que existem diversos algoritmos para
ordenação de dados, onde dentre eles o merge
sort que apresenta um nível de utilização médio
baixo.
REFERÊNCIAS
http://pt.wikipedia.org/wiki/Merge_sort#C.C3.B3digo_em_C.2B.2B
http://www.dct.ufms.br/~marco/aed22008/aula04_4.pdf
http://www.dca.fee.unicamp.br/~andreric/arquivos/Algoritmos_de_ordenacao.pdf
http://www.slideshare.net/OnOSJunior/anlise-emprica-de-algoritmos-de-ordenao
http://imasters.com.br/artigo/13015/desenvolvimento/principais-algoritmos-de-ordenacao-de-dados
http://www.lcad.icmc.usp.br/~nonato/ED/Ordenacao/node52.htm