Download - de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Transcript
Page 1: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Complexidade de Algoritmos

Page 2: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Algoritmos de ordenaçãoMsc. Marcelo Aires

Page 3: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ Introdução➢ Estruturas lineares➢ Pilha e Fila➢ Árvores

Relembrando

Page 4: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ Introdução➢ Algoritmos de Ordenação

○ Insertion Sort○ Selection Sort○ Bubble Sort○ Merge Sort○ Heapsort○ Quick Sort

Agenda

Page 5: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

INTRODUÇÃO AOSALGORITMOS DE ORDENAÇÃO

5

Page 6: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 7: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ Existem diversos algoritmos de ordenação, abordaremos a seguir alguns deles:○ Insertion Sort○ Selection Sort○ Bubble Sort○ Merge Sort○ Heapsort○ Quick Sort

Introdução

Page 8: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

INSERTION SORT

8

Page 9: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 10: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 11: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ Interessante para popular um vetor (vazio).➢ Exemplo:

Insertion Sort

Page 12: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Insertion Sort

Page 13: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

SELECTION SORT

13

Page 14: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 15: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 16: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Selection Sort

Page 17: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Selection Sort

Page 18: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

BUBBLE SORT

18

Page 19: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 20: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 21: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Bubble Sort

Page 22: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Bubble Sort

Page 23: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

MERGE SORT

23

Page 24: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 25: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 26: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ p: primeiro➢ r: último➢ q: meio

Merge Sort

Page 27: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Merge Sort

Page 28: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

HEAPSORT

28

Page 29: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 30: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ Características importantes:○ Melhor/Médio/Pior caso: O(n log n).○ Rápido em cenários de pior caso.

Heapsort

Page 31: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

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

Page 32: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

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

Page 33: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Heapsort

Page 34: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

QUICK SORT

34

Page 35: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 36: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 37: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ pivot: elemento escolhido.

Quick Sort

Page 38: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

Quick Sort

Page 39: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ 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

Page 40: de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO AOS ALGORITMOS DE ORDENAÇÃO 5 Ordenação de elementos em uma estrutura de dados

➢ CORMEN, T. H.; STEIN, C.; LEISERSON, C.; RIVEST, R. L. Algoritmos: teoria e prática. Rio de Janeiro: Campus, 2002.

Referências