• Nenhum resultado encontrado

06 - Ordenacao - Parte I

N/A
N/A
Protected

Academic year: 2021

Share "06 - Ordenacao - Parte I"

Copied!
38
0
0

Texto

(1)

Estrutura de Dados

Ordenação

(2)

Ordenação

● Processo de organizar itens em ordem crescente ou

decrescente segundo algum critério.

● Geralmente o que se deseja ordenar é um registro.

● Esse registro apresenta um ou mais dados

● Geralmente o método de ordenação leva em conta apenas um dos

itens para efetuar a ordenação (chave)

● Duas alternativas

● Mantes os itens de uma estrutura de dados sempre organizados ● Aplicar algum método de ordenação a um conjunto de dados já

(3)

3

Classificação - Estabilidade

Métodos estáveis

A ordem relativa dos itens com chaves iguais é

preservada durante o processo de ordenação

Métodos instáveis

A ordem relativa dos itens com chaves iguais não

(4)
(5)

5

Classificação – Conjunto de

Registros

Ordenação interna – o conjunto de registros a

ser ordenado cabe na memória principal

Ordenação externa – o conjunto de registros

não cabe na memória principal e é necessário

armazenar parte dos mesmos em memória

(6)

Métodos de Ordenação

O que é necessário saber?

Quais são os principais algoritmos de ordenação

interna

Quais são as suas características

– Como o método efetua a ordenação – Complexidade temporal do algoritmo – Classificação quanto a estabilidade

(7)

7

Ordenação por Bolha (Bublesort)

● Faz uma série de comparações entre elementos do vetor;

● Quando dois elementos estão fora de ordem, esses dois elementos

são trocados de posição;

● Assim, o primeiro elemento é comparado com o segundo e se uma

inversão é encontrada, a troca é feita;

● Independente se houve troca ou não após a primeira comparação, o

segundo elemento é comparado com o terceiro, e, caso uma inversão seja encontrada, a troca é feita;

● O processo continua até que o penúltimo elemento seja comparado

com o último.

● Ou seja, os elementos são colocados em ordem a partir do último

(8)
(9)

9

(10)
(11)

11

(12)

Esforço computacional Bublesort

● Na primeira iteração são feitas n-1 comparações ● Na segunda iteração n-2

● Na terceira iteração n-3

● (n-1)+(n-2)+(n-3)+... + 2 + 1 = (n-1+1)*n/2

● Soma dos elementos de uma PA ● O (n2)

● Indicado quando o número de elementos é pequeno ● Algoritmo estável

● Melhor caso: vetor já ordenado

● Nenhuma troca é efetuada

● Pior caso: vetor em ordem reversa

(13)

13

Bublesort Otimizado

O Bubblesort otimizado é uma variação do

algoritmo Bubblesort em que é verificado se, em

uma passada completa pelo vetor, houve troca

de elementos.

Se houve troca, continua → o vetor ainda não está

ordenado

Se não houve troca, pare → o vetor já está ordenado.

O melhor caso para esse algoritmo acontece quando

(14)

Ordenação por Seleção

Pegue o menor item do conjunto e coloque-o

na posição 1

Faça isso para os demais elementos do

(15)

15

(16)
(17)

17

Ordenação por Seleção

● O método não é estável

● O fato do vetor já estar ordenado em nada ajuda o método. ● Quanto ao número de comparações: O(n2)

● Quanto ao número de trocas O(n)

● Como o número de trocas é linear, é indicado para vetores

que apresentam registros muitos grandes.

● Mas como é um algoritmo com comparações quadráticas, é

(18)

Ordenação por Inserção

● Este método consiste em realizar a ordenação pela inserção de

cada um dos elementos em sua posição correta, levando em consideração os elementos já ordenados.

● O método segmenta o vetor em duas porções:

● Primeira porção: os elementos já ordenados

● Segunda porção: os elementos a serem ordenados

● Inicialmente a primeira porção contém apenas um elemento e

na segunda porção, os demais

● A primeira porção vai crescendo a medida em que os

elementos vão sendo retirados da porção 2 e colocados na porção 1 em sua posição correta.

(19)

19

(20)
(21)

21

(22)
(23)

23

(24)
(25)

25

(26)

Ordenação por Inserção

Algoritmo estável

Comparações

Melhor caso: O(n) → vetor ordenado

Pior caso: O(n

2

) → vetor em ordem inversa

Trocas

Melhor caso: O(n) → vetor ordenado

(27)

27

Ordenação por Inserção

Algoritmo a ser utilizado quando o vetor

encontra-se quase ordenado.

Bom algoritmo também para se adicionar

(28)

Shellsort

● O método de inserção troca itens adjacentes quando está procurando o

ponto de inserção na sequencia destino.

● Se o menor item estiver na posição mais à direita no vetor, então o número

de comparações e movimentações é igual a n-1 para encontrar o seu ponto de inserção.

● O método shellsort tenta contornar esse problema inicialmente fazendo

troca entre itens distantes em h posições.

● Isso “joga” itens de menor chave para as posições iniciais do vetor

● “adiantando” a inserção de itens de menor chave na posição correta ● diminuindo o número de trocas e movimentações.

O algoritmo escolhe uma sequencia para h.

Quando essa sequencia chega em h=1, o algoritmo shellsort torna-se o algoritmo de

(29)

29

Shellsort

● void shellsort (int a[]) {

int h = 1;

do h = h * 3 + 1; while (h < n); do {

h = h / 3;

for (int i = h + 1; i <= a.length; i++) { int value = a[i];

j = i – h;

while (j > 0 && value < a[j]) { a[j + h] = a[j]; j = j – h; } a[j + h] = value; } } while (h > 1) }

(30)

Shellsort

h = 4 i = 5

value = 'P' (valor a ser ordenado) j = i – h / j = 5 – 4 = 1

Compara a[5] = 'P' com a[1] = 'E'.

Como a[5] não é menor que a[1], não haverá troca.

Value 1 2 3 4 5 6 7 8 9 10 11 12

E X E M P L O F A C I L

(31)

31

Shellsort

h = 4 i = 6

value = 'L' (valor a ser ordenado) j = i – h / j = 6 – 4 = 2

Como value é menor que a[2], a[2] ocupará o espaço de a[j+h], a[2+4], a[6]. Ou seja, a[6] = 'X'

j = j – h, j = 2 – 4, j = -2, O loop termina

value ocupará a posição a[j+ h], a[-2+4], a[2] i que era 6 passa a ser igual a 7

Value 1 2 3 4 5 6 7 8 9 10 11 12

E X E M P L O F A C I L

L E X E M P L O F A C I L

L E E M P X O F A C I L

(32)

Shellsort

h = 4 i = 7

value = '0' (valor a ser ordenado) j = i – h / j = 7 – 4 = 3

Compara a[7] = 'O' com a[3] = 'E'.

Como a[7] não é menor que a[3], não haverá troca.

Value 1 2 3 4 5 6 7 8 9 10 11 12

(33)

33

Shellsort

h = 4 i = 8

value = 'F' (valor a ser ordenado) j = i – h / j = 8 – 4 = 4

Como value é menor que a[4], a[4] ocupará o espaço de a[j+h], a[4+4], a[8]. Ou seja, a[8] = 'M'

j = j – h, j = 4 – 4, j = 0, O loop termina

value ocupará a posição a[j+ h], a[0+4], a[4] i que era 8 passa a ser igual a 9

Value 1 2 3 4 5 6 7 8 9 10 11 12

F E L E M P X O F A C I L

F E L E P X O M A C I L

(34)

Shellsort

h = 4 i = 9

value = a[9] = 'A' (valor a ser ordenado) j = i – h / j = 9 – 4 = 5

Compara value = 'A' com a[5] = 'P'.

Como value é menor que a[5], a[5] ocupará o espaço de a[j+h], a[5+4], a[9]. Ou seja, a[9] = 'P'

j = j – h, j = 5 – 4, j = 1

Compara value = 'A' com a[1] = 'E'.

Como value é menor que a[1], a[1] ocupará o espaço de a[j+h], a[1+4], a[5]. Ou seja, a[5] = 'E'

Value 1 2 3 4 5 6 7 8 9 10 11 12

A E L E F P X O M A C I L

A E L E F X O M P C I L

A L E F E X O M P C I L

(35)

35

Shellsort

h = 4 i = 10

value = a[10] = 'C' (valor a ser ordenado) j = i – h / j = 10 – 4 = 6

Compara value = 'C' com a[6] = 'X'.

Como value é menor que a[6], a[6] ocupará o espaço de a[j+h], a[6+4], a[10]. Ou seja, a[10] = 'X'

j = j – h, j = 6 – 4, j = 2

Compara value = 'A' com a[2] = 'L'.

Como value é menor que a[2], a[2] ocupará o espaço de a[j+h], a[2+4], a[6]. Ou seja, a[6] = 'L'

j = j – h, j = 2 – 4, j = -2. O loop termina value ocupará a posição a[j+ h], a[-2+4], a[2] i que era 10 passa a ser igual a 11

Value 1 2 3 4 5 6 7 8 9 10 11 12 C A L E F E X O M P C I L C A L E F E O M P X I L C A L E F E O M P X I L C A E F E L O M P X I L C A C E F E L O M P X I L

(36)

Shellsort

h = 4 i = 11

value = a[11] = 'I' (valor a ser ordenado) j = i – h / j = 11 – 4 = 7

Compara value = 'I' com a[7] = 'O'.

Como value é menor que a[7], a[7] ocupará o espaço de a[7+h], a[7+4], a[11]. Ou seja,

a[11] = 'O'

j = j – h, j = 7 – 4, j = 3

Compara value = 'I' com a[3] = 'L'.

Value 1 2 3 4 5 6 7 8 9 10 11 12

I A C E F E L O M P X I L

I A C E F E L M P X O L

I A C E F E L M P X O L

(37)

37

Shellsort

h = 4 i = 12

value = a[12] = 'L' (valor a ser ordenado) j = i – h / j = 12 – 4 = 8

Compara value = 'L' com a[8] = 'M'.

Como value é menor que a[8], a[8] ocupará o espaço de a[j+h], a[8+4], a[12]. Ou seja, a[12] =

'M'

j = j – h, j = 8 – 4, j = 4

Compara value = 'L' com a[4] = 'F'.

Como value não é menor que a[4], value ocupará a posição a[j+ h], a[4+4], a[8]

i que era 12 passa a ser igual a 13. O loop interno termina. h = h / 3 = 4/3 = 1 (Algoritmo de inserção) Value 1 2 3 4 5 6 7 8 9 10 11 12 L A C E F E L I M P X O L L A C E F E L I P X O M L A C E F E L I P X O M L A C E F E L I L P X O M

(38)

Shellsort

● A razão da eficiência do algoritmo ainda não é conhecida ● Ninguém foi capaz de analisar o algoritmo

● Existem algumas conjecturas a respeito da complexidade do

algoritmo

● Conjectura 1 – O (n1,25)

● Conjectura 2 – O (n (log n)2)

● Algumas questões de concurso consideram a ordem de

complexidade do Shellsort como O (n log n)

● Tempo de execução sensível à ordem inicial do arquivo. ● Algoritmo não estável

Referências

Documentos relacionados

“(...) PROCESSO EXTRADICIONAL E SISTEMA DE CONTENCIOSIDADE LIMITADA: INADMISSIBILIDADE DE DISCUSSÃO SOBRE A PROVA PENAL PRODUZIDA PERANTE O ESTADO REQUERENTE. - A ação de

Esta semana, daremos então início ao ciclo de leitura anual, com a primeira porção semanal da Torá, a Parashá Bereshit, que dá também o nome ao primeiro livro

• Fazem parte da porção condutora as fossas nasais, faringe, laringe, traqueia, brônquios, bronquíolos e bronquíolos terminais.. • Fazem parte da porção respiratória

quando os atos executórios do contratado não realizem a contento o objeto contratual licitado, gerando a capacidade de punir ao administrador, ressaltando que tal conclusão terá

melanotis foram registradas em áreas recém-queimadas (ca. menos de dois meses) tanto no presente estudo quanto em vários outros (ver Capítulo 2), sendo as duas primeiras

RESUMO – Os coeficientes de desagregação de chuvas intensas para relações entre diferentes durações são comumente usados para estimar precipitações em

Dentre os trabalhos que alteram o comprimento dos quadros de controle, o esquema proposto neste trabalho e em [Jr. e Gon¸calves 2011] introduzem o menor overhead e,

Lipoma Lipoma Abdômen porção ventral Lipoma Lipoma Tórax porção lateral Lipoma Lipoma Abdômen porção ventral Fibrossarcoma Plasmocitoma Fêmur porção ventral