• Nenhum resultado encontrado

Busca e Ordenação (parte I) - Métodos simples de busca - Métodos ingênuos de ordenação (introdução)

N/A
N/A
Protected

Academic year: 2022

Share "Busca e Ordenação (parte I) - Métodos simples de busca - Métodos ingênuos de ordenação (introdução)"

Copied!
38
0
0

Texto

(1)

Busca e Ordenação (parte I) - Métodos simples de busca

- Métodos ingênuos de ordenação (introdução)

MCTA028 – Programação Estruturada

Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti

Luiz Rozante

3Q-2018

(2)

2

Busca de um elemento em um vetor

(3)
(4)

(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008. 4

(5)

Busca Linear

(6)

6

Busca Linear Recursiva

Crie uma função recursiva para identificar um elemento em um vetor.

Assinatura / Prototipo:

(7)

Busca Linear Recursiva

(8)

8

Busca Binária

(9)

11 22 33

44 66 55 77

88 100 99 140 120 130 200 110 150

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200

Vetor crescente

Melhor caso: 1 Pior caso: n

Melhor caso: 1 Pior caso: log(n)

Vetor sem ordem

0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

(10)

10

Busca Binaria Recursiva

Melhor caso: 1 Pior caso: log(n)

(11)

11 22 33

44 66 55 77

88 100 99 140 120 130 200 110 150

Melhor caso: 1 Pior caso: n

Vetor sem ordem

0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

(12)

12

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15 Chave = 101

(13)

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 Inf = 0 Sup = 15 Chave = 101

(14)

14

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 Inf = 0 Sup = 15 Chave = 101

99 100 110 120 130 140 150 200 Inf = 8 Sup = 15

(15)

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 Inf = 0 Sup = 15 Chave = 101

99 100 110 120 130 140 150 200 Inf = 8 Sup = 15

99 100 110 Inf = 8

Sup = 10

(16)

16

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 Inf = 0 Sup = 15 Chave = 101

99 100 110 120 130 140 150 200 Inf = 8 Sup = 15

99 100 110 Inf = 8

Sup = 10

110 Inf = 10

Sup = 10

(17)

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 0  1  2  3 4  5  6  7  8  9 10 11 12 13 14 15

11 22 33 44 55 66 77 88 99 100 110 120 130 140 150 200 Inf = 0 Sup = 15 Chave = 101

99 100 110 120 130 140 150 200 Inf = 8 Sup = 15

99 100 110 Inf = 8

Sup = 10

110 Inf = 10

Sup = 10

(18)

18

O problema de ordenação

(19)

Ordenação

Ordenar corresponde ao processo de re-arranjar um

conjunto de objetos em ordem ascendente ou descendente.

Por que ordenar?

O objetivo principal da ordenação é facilitar a recuperação posterior de itens do conjunto ordenado.

Geralmente considerado no primeiro passo para resolver um problema prático.

As ordens mais utilizadas são a numérica e lexicográfica.

(20)

20

Por que ordenar?

Busca de elementos:

O usuário geralmente quer os dados ordenados.

Deduplicação de elementos:

Ordenar é muito útil para eliminar duplicações.

Projeção de objetos em um espaço 3D.

Criação de uma árvore geradora mínima.

Ordenar é o primeiro passo para “carregar” os dados em uma

estrutura tipo árvore B+.

(21)

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

(22)

22

O problema de ordenar na forma crescente

Um vetor v[0..n-1] é crescente se v[0] ≤ v[1] ≤ … ≤ [n-1]

O problema de ordenação de um vetor consiste em

rearranjar (ou seja, permutar) os elementos de um vetor v[0..n-1] de tal modo que ele se torne crescente.

Vetores ordenados na forma crescente:

{1, 1, 1, 1, 1, 1, 1, 1}

{0, 1, 1, 1, 2, 3, 4, 4, 4, 4, 4, 4, 100}

(23)

Verificar se um vetor v[0..n-1] é crescente

(24)

24

Crie uma versão recursiva da função crescente

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

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

Atividade em aula

(25)

Vetor crecente (recursiva)

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

- No melhor caso: T(n) = 1

(26)

26

Embaralhando um vetor

(27)

Número de trocas de elementos T(n):

- No melhor caso: T(n) = n - No pior caso: T(n) = n T(n) = O(n)

(28)

28

(1)

Bogo sort

Miracle sort

Monkey sort

Stupid sort

(29)

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

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

(30)

30

Selection Sort

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

(31)

Selection Sort

(32)

32

Selection sort

https://www.youtube.com/watch?v=92BfuxHn2XE

(33)

Insertion Sort

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ência destino, 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 …

(34)

34

Insertion Sort

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

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

(35)

Insertion sort

(36)

36

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 principio 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

(37)

Bubble Sort

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

- No melhor caso: T(n) = n²/2 – n/2

(38)

38

Bubble sort

https://www.youtube.com/watch?v=Cq7SMsQBEUw

Referências

Documentos relacionados

d) O valor com Transporte para Associados e seus dependentes legais para tratamento de saúde. Este pecúlio deverá ser autorizado e controlado pelo serviço de assistência

Para poder definir as permissões a atribuir aos empregados tem que aceder no BackOffice a Configuração\Empregados. No separador “Permissões” nas propriedades de empregado

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

No âmbito do Programa do Medicamento Hospitalar do Ministério da Saúde, a Farmacotecnia está descrita como sendo o “sector dos Serviços Farmacêuticos Hospitalares onde é

A Vector Network Analyser is used to generate the transmitted signal and to collect the received signals, being both in the frequency range of 100 MHz to 3 GHz.. Figure 3.4:

Este capítulo apresentou o desenvolvimento da estrutura sonora para a integração do feedback sonoro nas aplicações do dispositivo SHaRe e do dispositivo WESt, de forma a

Figura 20: Ilustração do método da Ordenação Topológica sem Análise Semântica Para a exclusão dos ciclos, avalia-se a semântica de cada relação CST, onde é feita uma

Caso a busca tenha que continuar, podemos proceder exatamente da mesma maneira: verificamos o item existente no meio da metade escolhida e se ele ainda não for aquele que