Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
Complexidade de Algoritmos
Algoritmos de ordenaçãoMsc. Marcelo Aires
➢ Introdução➢ Estruturas lineares➢ Pilha e Fila➢ Árvores
Relembrando
➢ Introdução➢ Algoritmos de Ordenação
○ Insertion Sort○ Selection Sort○ Bubble Sort○ Merge Sort○ Heapsort○ Quick Sort
Agenda
INTRODUÇÃO AOSALGORITMOS DE ORDENAÇÃO
5
➢ Ordenação de elementos em uma estrutura de dados é parte fundamental no estudo de complexidade.
➢ Membros da computação consideram a ordenação o problema mais fundamental no estudo de algoritmos:○ a necessidade de ordenar informações é inerente a uma
aplicação;○ algoritmos usam a ordenação como uma sub-rotina
chave;○ os algoritmos de ordenação empregam um rico conjunto
de técnicas.
Introdução
➢ Existem diversos algoritmos de ordenação, abordaremos a seguir alguns deles:○ Insertion Sort○ Selection Sort○ Bubble Sort○ Merge Sort○ Heapsort○ Quick Sort
Introdução
INSERTION SORT
8
➢ Ordenação por inserção;➢ Funcionamento:
○ Primeiro elemento está "ordenado" (ou seja, na posição correta);
○ A partir do segundo elemento, a cada um, insere-o na posição apropriada (entre os ordenados);
○ O elemento é inserido na posição adequada movendo-se todos os elementos maiores para posição seguinte do vetor.
Insertion Sort
➢ Características importantes:○ É de simples implementação, leitura e manutenção;○ Não muda os elementos com valores iguais;○ Útil para pequenas entradas;○ Muitas trocas, e menos comparações;○ Melhor caso: Ω(n), matriz está ordenada;○ Médio caso: Θ(n²/4), matriz tem valores aleatórios;○ Pior caso: O(n²), matriz está em ordem inversa.
Insertion Sort
➢ Interessante para popular um vetor (vazio).➢ Exemplo:
Insertion Sort
Insertion Sort
SELECTION SORT
13
➢ Ordenação por seleção;➢ Funcionamento:
○ Passa-se sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida);
○ Depois o de segundo menor valor para a segunda posição, e assim é feito sucessivamente, até os últimos dois elementos.
Selection Sort
➢ Características importantes:○ Algoritmo simples e não necessita de um vetor auxiliar;○ Ocupa menos memória e é uns dos mais velozes na
ordenação de vetores de tamanhos pequenos;○ Um dos mais lentos para vetores de tamanhos grandes.○ Melhor/Médio/Pior caso: O(n²).
Selection Sort
Selection Sort
Selection Sort
BUBBLE SORT
18
➢ Ordenação por flutuação;➢ Funcionamento:
○ Percorre-se o vetor diversas vezes, e a cada passagem faz-se flutuar para o topo o maior elemento da sequência. (semelhante às bolhas em um tanque de água que procuram seu próprio nível)
Bubble Sort
➢ Características importantes:○ Recomendado para programas que precisem de
velocidade e operem com quantidade elevada de dados.○ Pior caso: O(n²).○ Melhor caso: Ω(n)○ Caso médio: Θ(n²)
Bubble Sort
Bubble Sort
Bubble Sort
MERGE SORT
23
➢ Ordenação por mistura (dividir para conquistar);➢ Funcionamento:
○ Dividir: distribuir os dados em subsequências pequenas;■ Realizado recursivamente, divide-se o vetor em duas metades, que,
posteriormente, é dividido novamente, até não ser possível a divisão.
○ Conquistar: Classificar as duas metades recursivamente aplicando o merge sort;
○ Combinar: Juntar as duas metades em um único conjunto.○ Por fim, faz-se o merge ou a fusão dos sub-vetores ordenados.
Merge Sort
➢ Características importantes:○ Divide o vetor para melhorar a performance;○ Melhor/Médio/Pior caso: O(n log n).○ Desvantagem: requer o dobro de memória (dois vetores).
Merge Sort
➢ p: primeiro➢ r: último➢ q: meio
Merge Sort
Merge Sort
HEAPSORT
28
➢ Ordenação generalista;➢ Funcionamento:
○ Utiliza uma estrutura de dados chamada heap binário para ordenar os elementos à medida que os insere.
○ Depois das inserções, os elementos podem ser sucessivamente removidos da heap, na ordem desejada.
Heapsort
➢ Características importantes:○ Melhor/Médio/Pior caso: O(n log n).○ Rápido em cenários de pior caso.
Heapsort
Heapsort8
4 7
1 3 5
8
4 7
1 3 5
8
4 7
1 3 5
8
4 7
1 3 5
5
4 7
1 3 8
7
4 5
1 3 8
Heapsort3
4 5
1 7 8
5
4 3
1 7 8
1
4 3
5 7 8
4
1 3
5 7 8
3
1 4
5 7 8
1
3 4
5 7 8
Heapsort
QUICK SORT
34
➢ Ordenação rápida por pivot (elemento escolhido);➢ Funcionamento:
○ Defina um elemento da lista, denominado pivô;○ Particiona: divida a lista com elementos menores e maiores ao
pivô, faça isso até não ser possível dividir. Essa operação é denominada partição;
○ Recursivamente ordene a sub lista dos elementos menores e a sublista dos elementos maiores;
○ Por fim, agrupe as sublistas.
Quick Sort
➢ Características importantes:○ Divide o vetor para melhorar a performance, escolhendo
sempre um pivot;○ Pior caso: O(n²).○ Melhor caso: Ω(n log n)○ Caso médio: Θ(n log n)
Quick Sort
➢ pivot: elemento escolhido.
Quick Sort
Quick Sort
➢ Além destes algoritmos de ordenação existem muitos outros, como:○ Comb sort (pente): melhora o Bubble Sort.○ Bogo sort (case sort): não utilizado na prática.○ Shell sort: melhora o insertion sort.○ Radix sort: não é limitado a números inteiros.○ Gnome sort: semelhante ao insertion sort (várias trocas).○ Counting sort: define a quantidade de elementos menores.○ Bucket sort: divide o vetor em vários subvetores.○ Cocktail sort: bubble sort bidirecional (ambas as direções)○ Timsort: derivado do merge e insertion sort.
Extra
➢ CORMEN, T. H.; STEIN, C.; LEISERSON, C.; RIVEST, R. L. Algoritmos: teoria e prática. Rio de Janeiro: Campus, 2002.
Referências