Aula 17: - Métodos simples de...

39
1 Aula 17: - Métodos simples de ordenação MCTA028 Programação Estruturada Prof. João Henrique Kleinschmidt Material elaborado pelo prof. Jesús P. Mena-Chalco 3Q-2018

Transcript of Aula 17: - Métodos simples de...

Page 1: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

1

Aula 17:

- Métodos simples de ordenação

MCTA028 – Programação Estruturada

Prof. João Henrique Kleinschmidt

Material elaborado pelo prof. Jesús P. Mena-Chalco

3Q-2018

Page 2: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

2

Algoritmos para ordenar elementos

Baseado em comparações:

Bogo sort

Selection sort

Insertion sort

Bubble sort

Mergesort

Quicksort

Heapsort

Ordenação em tempo linear:

Radix sort

Ordenação de primeiros elementos (seleção parcial):

Partial Quicksort

Page 3: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

3

(1)

Bogo sort

Miracle sort

Monkey sort

Stupid sort

Page 4: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

4

Número de comparações T(n):

- No melhor caso: T(n) = n-1

- No pior caso: T(n) = ?

Page 5: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

5

(2)

Selection Sort:

Algoritmo de ordenação por seleção

Page 6: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

6

Selection Sort

Animação: https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

Page 7: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

7

Selection Sort

Complexidade computacional: No pior caso?

Page 8: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

8

Selection Sort

Quanto tempo o algoritmo consome para fazer o serviço?

(A complexidade computacional é proporcional ao número de comparações v[iMin]>v[j])

Page 9: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

9

Selection Sort

Quanto tempo o algoritmo consome para fazer o serviço?

(A complexidade computacional é proporcional ao número de comparações v[iMin]>v[j])

9 8 7 6 5 4 3 2 1

1 8 7 6 5 4 3 2 9

1 iteração n-1

2 iteração n-2

3 iteração n-3

n-1iteração 1

Page 10: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

10

Selection Sort

1 iteração n-1

2 iteração n-2

3 iteração n-3

n-1iteração 1

Tempo = (n–1)(n)/2

Tempo = n²/2 – n/2

Se o vetor tiver n=10.000 elementos, o número de comparações(tempo) será proporcional a: 49.995.000.

Se o computador fizer 1000 comparações por segundo, o tempo gasto será de: 49995 segundos = 832.25 min = 13.88 horas

Page 11: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

11

Selection Sort: Eficiente para quais sequências?

Vetor Crescente Vetor Parcialmente Crescente

Vetor Decrescente Vetor Parcialmente Decrescente

Page 12: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

12

Selection Sort: Eficiente para quais sequências?

Vetor Crescente Vetor Parcialmente Crescente

Vetor Decrescente Vetor Parcialmente Decrescente

Para qualquer sequência o algoritmo custa n²/2 – n/2 → O(n²)

Page 13: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

13

Selection Sort

10 30 50 70 90 110 130 150 170 190 210 230 250 270 290 310 330 350 370 390 410 430 450 470 490

0

20000

40000

60000

80000

100000

120000

140000

Número de elementos = n

Tempo(comparações)

Número de comparações, em qualquer caso = O(n²)

Page 14: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

14

Versão recursiva do Selection Sort

Page 15: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

15

(3)

Insertion Sort:

Algoritmo de ordenação por inserção

Page 16: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

16

Insertion Sort

Animação: https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

Método preferido dos jogadores de cartas

Em cada passo, a partir do i=1, o i-ésimo elemento da sequência fonte é apanhado e transferido para a sequênciadestino, sendo inserido no seu lugar apropriado.

1 5 7 10 55 6

1 5 7 10 55

6

0 1 2 3 4 5 6 …

Page 17: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

17

Insertion Sort

A principal característica deste algoritmo consiste em ordenar

o vetor utilizando um subvetor ordenado em seu inicio.

A cada novo passo, acrescentamos a este subvetor mais

um elemento até atingirmos o último elemento de um

arranjo.

Ordenado Sem ordem

Page 18: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

18

void InsertionSort

(int[] v, int n)

Page 19: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

19

Insertion Sort

Page 20: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

20

Insertion Sort: Eficiente para quais sequências?

Vetor Crescente Vetor Parcialmente Crescente

Vetor Decrescente Vetor Parcialmente Decrescente

Page 21: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

21

Insertion Sort: Eficiente para quais sequências?

Vetor Crescente Vetor Parcialmente Crescente

Vetor Decrescente Vetor Parcialmente Decrescente

Este algoritmo é o mais apropriado quando os elementos do vetor estiverem ordenados ou parcialmente ordenados.

Page 22: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

22

Insertion Sort

i=1 1

i=2 2

i=3 3

i=n-1 n-1

Comparações

0 1 2 3 4 5 6

n=7

L=

Tempo = (n–1)(n)/2Tempo = n²/2 – n/2

Tempo = O(n²)Número de comparações T(n):- No melhor caso: T(n) = n-1- No pior caso: T(n) = n²/2 – n/2

Page 23: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

23

(4)

Bubble Sort:

Ordenação pelo método da bolha

Ordenação por troca dois-a-dois

Page 24: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

24

Bubble Sort

O algoritmo de ordenação baseado em troca, consiste em

intercalar pares de elementos que não estão em ordem até que

não exista mais pares.

O princípio do bolha é a troca de valores entre posições

consecutivas fazendo com que os valores mais altos

“borbulhem” para o final do vetor.

Animação: https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

Page 25: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

25

Bubble Sort

Page 26: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

26

Bubble Sort: Eficiente para quais sequências?

Vetor Crescente Vetor Parcialmente Crescente

Vetor Decrescente Vetor Parcialmente Decrescente

Page 27: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

27

Bubble Sort

k=n-1 n-1

k=n-2 n-2

k=n-3 n-3

k=1 1

Comparações

0 1 2 3 4 5 6

n=7

L=

Tempo = (n–1)(n)/2Tempo = n²/2 – n/2

Page 28: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

28

Bubble Sort: Eficiente para quais sequências?

Vetor Crescente Vetor Parcialmente Crescente

Vetor Decrescente Vetor Parcialmente Decrescente

Para qualquer sequência o algoritmo custa n²/2 – n/2 → O(n²)

Page 29: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

29

(5)Quick sort

Page 30: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

30

Quick Sort

O algoritmo Quicksort utiliza o paradigma de

programação Dividir para Conquistar (divide and conquer).

É uma abordagem recursiva em que a entrada do algoritmo é

ramificada múltiplas vezes a fim de quebrar o problema maior

em problema menores da mesma natureza.

Dada a sequência de entrada, o método particionador deve

primeiramente escolher um elemento chamado de pivô.

Em seguida iterar sobre toda a sequência a fim de posicionar

todos elementos menores do que esse pivô à sua esquerda. A

escolha do pivô pode ser feita aleatoriamente, ser o primeiro

elemento ou o último.

Animação: https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

Page 31: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

Quick Sort

Page 32: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

32

Exercício em aula

Page 33: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

33

Questão 1

Uma versão alternativa do algoritmo de Bubble Sort

Page 34: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

34

Questão 1

Uma versão alternativa do algoritmo de Bubble Sort

0 1 2 3 4 5 6

n=7

L=

Page 35: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

35

Questão 1

Número de comparações T(n):- No melhor caso: T(n) = n²/2 – n/2- No pior caso: T(n) = n²/2 – n/2

Número de comparações T(n):- No melhor caso: T(n) = n-1- No pior caso: T(n) = n(n-1)

Page 36: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

36

Questão 2: Cocktail sort

Também conhecido como Shaker Sort ou bubblesort bidirecional, é uma variação do bubble sort.O algoritmo difere do bubble sort pelo fato de ordenar em ambas as direções em cada passagem através da lista.

Page 37: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

37

Questão 2: Cocktail Sort

Page 38: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

38

Questão 3

Tabela com número de comparações necessárias para

ordenar uma sequência de n elementos.

Algoritmo Melhor caso Pior caso

Selection sort n²/2 – n/2 n²/2 – n/2

Insertion sort n-1 n²/2 – n/2

Bubble sort n²/2 – n/2 n²/2 – n/2

Bubble2 sort n-1 n² – n

Cocktail sort n-1 ?

Page 39: Aula 17: - Métodos simples de ordenaçãoprofessor.ufabc.edu.br/~joao.kleinschmidt/aulas/prog2018/aula_17_… · ramificada múltiplas vezes a fim de quebrar o problema maior em

Comparação