de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO...

Post on 26-Jul-2020

9 views 0 download

Transcript of de Algoritmos Complexidade … · Bubble Sort Merge Sort Heapsort Quick Sort Agenda. INTRODUÇÃO...

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