1 Análise e Complexidade d Al it de Algoritmos Métodos de Ordenação - seleção e inserção - seleção e troca (bubble sort) ik t - merge e quick sort - radix - hashing http://www.bolinhabolinha.com Prof. Rodrigo Rocha [email protected]Onde Estamos Ementa • Revisão: Estrutura de dados;Crescimento de funções; Indução matemática e métodos matemáticos Indução matemática e métodos matemáticos. Medidas de complexidade, análise assintótica de limites de complexidades. Exemplos de análise de algoritmo iterativos e recursivos. Análise de desempenho de alguns algoritmos clássicos de busca e ordenação. Introdução aos principais paradigmas do projeto de algoritmos. Complexidade do Problema: Limites de Complexidade, Intratabilidade, Classes P, NP, problemas Np completos e NP-difíceis.
28
Embed
Análise e Complexidade dAl itde Algoritmos - BolinhaBolinha · Análise e Complexidade ... Introdução aos principais paradigmas do projeto de ... Refinamento do algoritmo de dividir
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
Análise e Complexidade d Al itde Algoritmos
Métodos de Ordenação- seleção e inserção- seleção e troca (bubble sort)
Dividir os valores a serem ordenados em:• coleção U de valores desordenados (a serem ordenados)
• coleção S de valores ordenados
Remover um a um os valores de U e inserí-los em S• Mantendo S ordenado
Início:• U = conjunto desordenado de valores
• S = vazio
Termino:• U = vazio
• S = conjunto ordenado de valores
5
Inserção - Insertion Sort Para ordenar n valores, no vetor A[0:n-1]
• Utilize A contendo subvetor S e U “lado-a-lado”• S inicia no lado esquerdo de A• U inicia no lado direito de A• retire um valor V do final a esquerda de U
criará um espaço entre S e U
• mova todos os valores em S que forem maiores que V um espaço a direita
• insira V no espaço remanescente em S
Repetir até todos os valores em U estarem inseridos em S
No final, S ocupa o mesmo espaço que A
Inserção - Insertion Sort
6
Inserção - Insertion Sort
Algoritmo
Inserção - Insertion Sort
Complexidade• Melhor casoentrada já ordenada O(n)entrada já ordenada O(n)
1-) Simular o processo do algoritmo de ordenação Merge Sort para o seguinte conjunto de valores:conjunto de valores:• 10,3,6,12,33,21,56,2,13,1
2-) Implementar o algoritmo de merge sort e testá-lo.
18
Quick sort
QuickSort foi descoberto em 1962. Refinamento do algoritmo de dividir para conquistar Para ordenar n valores em um vetor A[0:n-1], na
ordem ascendente:ordem ascendente:• 1. Particionar a seqüência A em direita D e esquerda E
utilizando um valor de A como pivô• 2. QuickSort a porção esquerda E.• 3. QuickSort a porção direita D.
Utilizar recursividade para ordenar os dois lados• Até uma seqüência de 1 elemento que está ordenadaAté uma seqüência de 1 elemento, que está ordenada
o “coração” do QuickSort é o passo de Particionar partir o vetor em dois sub vetores, tal que todos os
elementos do primeiro sejam menores ou iguais a todos os elementos do segundo
Particionamento dos dados
Particionando• Para particionar os dados, dividimos em dois grupos
• selecionamos um pivôpodemos utilizar diversas técnicas (exemplo: meio do vetor)
• percorro o vetor de baixo para cima até achar um valor que seja maior que o pivô
• percorro o vetor de cima para baixo até achar um valor que seja menor que o pivô
• troca-se os dois elementos (aquele que não era menortroca se os dois elementos (aquele que não era menor que o pivô com aquele que não era maior que o pivô)
• término = quando os percursos se cruzarem:dois grupos, um abaixo do pivô, com elementos menor que este
outro acima do pivô, com elementos maiores que este
19
Quick sort - particionamento
Quick sort - particionamento
20
Quick sort - particionamento
Quick sort - particionamento
21
Quick sort - particionamento
Exemplo
22
Quick sort
Algoritmovoid quicksort (int[] a, int lo, int hi) {// lo é o índice mais baixo, hi é o índice mais alto// da região do vetor que irá ser ordenada
int i=lo j=hi h;int i=lo, j=hi, h;int x=a[(lo+hi)/2];// particionamentodo {
while (a[i]<x) i++; while (a[j]>x) j--;if (i<=j) {
h=a[i]; a[i]=a[j]; a[j]=h;i++; j--;
}} while (i<=j);// recursãoif (lo<j) quicksort(a, lo, j);if (i<hi) quicksort(a, i, hi);
}
Quick sort
Complexidade• melhor caso (a)
cada particionamento produz duas partes de tamanhos iguais O(n log n) - log n cada metade
• Caso médio O(n log n)
• Pior Caso (c) Pivo é o maior ou menor valor da partição
– Passo de particionamento separa n valores em “grupos” de um valor, e os grupos contém n-1 valores)O(n2)
Modifique o programa selection sort para sempre jogar o maior elemento para o final, ao invés do menor para o começo. Aao invés do menor para o começo. A complexidade mudou? Justifique.
Modifique o programa selection sort para ordenar de forma decrescente
• Desenhe a seqüência de passos realizados para ordená-los, utilizando os métodos de busca insertion sort e bubble sort.
• Qual a complexidade de cada ordenação para cada vetor?
2-) Se para cada comparação feita no algoritmo de ordenação bubble sort, você realiza-se uma busca seqüencial, com que complexidade ficaria este novo algoritmo?
3-) Se a busca implementada no exercício 2 fosse binária, a complexidade mudaria? Justifique.
4-) Um programador desconfiado, achou melhor implementar em cada iteração do insertion sort (no vetor parcialmente ordenado S), uma verificação, para isso, executa o procedimento de ordenação bubble sort na parte ordenada pelo insertion sort.
Você acredita que foi uma boa escolha ? Justifique ?
Exercícios
1-) Simular a ordenação por quick sort no seguinte conjunto de valores:• 7 1 3 9 8 4 2 7 4 2 3 57, 1, 3, 9, 8, 4, 2, 7, 4, 2, 3, 5.
2-) Implementar o algoritmo de quick sort e testá-lo.
27
Radix sort
Exercício• Ordenar utilizando radix sort os seguintes conjuntos:
a-) 45 93 38 74 39 32 72 14 92 5 91 66
0 1 2 3 4 5 6 7 8 9
Radix sort
Exercício• Ordenar utilizando radix sort os seguintes conjuntos:
b-) 111 12 11 1 33 22 112 2 96 55 14 66
0 1 2 3 4 5 6 7 8 9
28
Radix sort
Exercício
c ) Como ficaria a implementação do Radix para• c-) Como ficaria a implementação do Radix para ordenação de palavras?
Dê um exemplo de ordenação de palavras com até 3 letras.
Como ficou a complexidade, ela mudou ?
Bibliografia
Livro texto• ZIVIANI, Nivio. Projeto de Algoritmos : com implementação em Pascal
e C.. 2ª ed. São Paulo: Pioneira Thomson Learning, 2004.
• VELOSO, Paulo A. S.. Estrutura de Dados. 1ª ed. São Paulo: Campus, , p ,1983.
• CORMEN, Thomas H. Algoritmos : teoria e prática. 1ª ed. Rio de Janeiro: CAMPUS, 2002.
Complementar• SCHILDT, Herbert. C Completo e Total. 3ª ed. São Paulo: Pearson
Education, 2005.Education, 2005.
• CELES, Waldemar; CERQUEIRA, Renato. Introdução a Estruturas de Dados : com técnicas de programação em C. 4ª ed. Rio de Janeiro: Elsevier, 2004
• WIRTH, Niklaus. Algoritmos e Estruturas de Dados. 1ª ed. Rio de Janeiro: LTC, 1989
• TENENBAUM, Aaron M; SOUZA, Tereza Cristina Félix de. Estruturas de Dados usando C. 1ª ed. São Paulo: Makron Books,1995.