• Nenhum resultado encontrado

SLIDES - AULA 4 – ANÁLISE DOS ALGORITMOS DE ORDENAÇÃO

N/A
N/A
Protected

Academic year: 2021

Share "SLIDES - AULA 4 – ANÁLISE DOS ALGORITMOS DE ORDENAÇÃO"

Copied!
44
0
0

Texto

(1)

Aula 4 – Análise dos Algoritmos

de Ordenação

Cleyton Caetano de Souza IFPB – Campus Monteiro

(2)

Introdução

• Um método de ordenação pode ser

– Interna ou Extena – In-place ou não – Estável ou não

– Adaptativos ou não – Direto ou indireto

(3)

Interna x Externa

• Interna – São os métodos que não necessitam de uma memória secundária para o processo, a ordenação é feita na memória principal do computador

– Todos que estudamos foram algoritmos para ordenação em memória principal

• Externa – Quando o arquivo a ser ordenado não cabe na memória principal e, por isso, tem de ser armazenado em fita ou disco

(4)

in-place

• Uma ordenação pode ser in-place ou não • A ordenação in-place é a ordenação que é

efetuada com a própria sequência sem utilizar sequências adicionais

– Este método é utilizado em sistemas onde não se pode gastar memória adicional

(5)

Estável vs. Instável

• Um método é dito estável se a ordem relativa dos itens com a mesma chave não se altera durante o processo de ordenação.

(6)

Adaptativo

• Não adaptativos: sequência de operações independente da ordenação original dos dados

• Adaptativos: sequência de operações

dependente do resultado de comparações

(7)

Direto vs. Indireto

• Um algoritmo de ordenação é direto se os

dados que serão ordenados são os que estão sendo comparados e trocados; caso contrário é indireto.

– Exemplo

• Se a chave que se está utilizando para ordenar é

pequena, mas os dados satélites são grandes, não é interessante ordenar os dados diretamente.

• Basta trocar a informação que se quer ordenar pelos índices, ordenar os índices e utilizar a sequência de índices ordenados para ordenar os registros originais.

(8)

Análise Bolha

• Os elementos mais leves vão “borbulhando ” a cada iteração até a posição correta para

ordenação da lista • Características – Interna ou Externa – In-place ou não – Estável ou não – Adaptativo ou não

(9)

Custo do Bolha

• O bolha tem complexidade de caso médio e

pior caso igual a 𝐎 𝒏𝟐 , a sua complexidade de melhor caso é 𝑶 𝒏 .

– Dentre todos os algoritmos de ordenação

elementar é considerado o algoritmo com pior performance

(10)

Recomendação Bolha

• O bolha não é recomendado para a ordenação de sequência com muitos elementos, uma vez que rapidamente ele atinge tempos

impraticáveis.

• Sua vantagem e a facilidade de

implementação e pouco necessidade de espaço extra.

(11)

Análise Inserção Direta

• Insere cada elemento do vetor, na sua posição correta em uma subsequência ordenada de

elementos, de modo a mantê-la ordenada • Características

– Interna ou Externa

– In-place ou não

– Estável ou não

(12)

Custo Inserção Direta

• O bolha tem complexidade de caso médio e

pior caso igual a 𝐎 𝒏𝟐 , a sua complexidade de melhor caso é 𝑶 𝒏 .

– No geral, ele considerado superior ao Bolha, mas ainda assim é um algoritmo relativamente

(13)

Recomendação Inserção Direta

• Pode ser utilizado quando o vetor possui poucos elementos.

• É o método a ser utilizado quando o arquivo está “quase” ordenado.

(14)

Análise Seleção Direta

• Tem como principio de funcionamento selecionar o n-ésimo menor elemento do vetor e em seguida posicioná-lo na n-ésima posição correspondente do vetor.

• Características

– Interna ou Externa

– In-place ou não – Estável ou não

(15)

Custo Seleção Direta

• Como o algoritmo não é adaptativo, o custo no melhor caso, caso médio e pior caso é o

(16)

Recomendação Seleção Direta

• É um algoritmo relativamente simples, entretanto ainda considerado ineficiente • Ele se destaca quando o custo para fazer

trocar dentro da sequência que se deseja ordenar é muito elevado

– É recomendado para ordenar registros grandes e/ou sequências pequenas

(17)

Análise Shell

• Consiste em uma variação do Inserção

– De maneira geral ele, divide o vetor em vetores menores e nestes são aplicados o algoritmo de

ordenação por inserção tradicional, esse processo é repetido diversas vezes, a cada iteração para

subvetores maiores, até que o subvetor seja do tamanho do vetor. • Características – Interna ou Externa – In-place ou não – Estável ou não – Adaptativo ou não

(18)

Análise Shell

• No Insertion Sort, se os menores valores estão mais a direita na sequência, é necessário que muitas comparações sejam feitas, até que

esses números tenham a chance de ocupar o início da sequência

• O Shell reduz esse problema ao comparar números que estão a uma certa distância ℎ

– A determinação da sequência de valores que será considerada para ℎ é essencial para que o

(19)

Sequências para o ℎ famosas

• A questão sobre decidir qual a sequência ideal de ℎ é bastante difícil

– Qualquer sequência que contiver 1 levará ao ordenamento correto

– Entretanto, na prática o valor d ℎ impacta significativamente no desempenho do Shell

(20)

Sequências para o ℎ famosas

Termo Geral Sequência Complexidade do Pior Caso Proposto por 𝑁 2𝑘 𝑁 2 , 𝑁 4 , … , 1 Θ 𝑛2 Shell, 1959 2𝑝3𝑞 1, 2, 3, 4, 5, 6, 8, 9, 12 … Θ 𝑛 log 𝑛 2 Pratt, 1971 3𝑘 − 1 2 1, 4, 14, 40, 121 … Θ 𝑛3/2 Knuth, 1973 4𝑘 + 3 ∗ 2𝑘−1 + 1, começando de 1 1, 8, 23, 77, 281, … 𝑂 𝑛4/3 Sedgewick, 1986

(21)

Custo Shell

• O estudo da complexidade deste algoritmo

contém alguns problemas matemáticos muito difíceis,

– A começar pela própria escolha da sequencia de incrementos para ℎ.

• Ainda não existe uma análise matemática

completa e satisfatório que apresente um limite inferior para a performance do Shell

– A única certeza é que, dentre os algoritmos de

ordenação interna que tem ordem de complexidade quadrática, o ShellSort é o mais eficiente

(22)

Custo Shell

• Há alguns palpites mais difundidos utilizando sequências famosas para o ℎ

– Oscila em torno de O 𝑛3/2 , O 𝑛4/3 , 𝑶 𝒏𝟓/𝟒

ou 𝑶 𝒏 (𝐥𝐨𝐠 𝒏)𝟐 , no caso médio, sendo essas

duas em negrito as mais difundidas.

– Há quem diga que o custo pode no melhor caso

(23)

Recomendação Shell

• Shell é uma ótima opção para sequências de tamanho moderado

– Implementação relativamente simples, devido a ser uma variação do Inserção

– Diversos estudos sobre a sequência de ℎ mais eficiente

• Assim como o inserção, apresenta bom desempenho para sequências quase

(24)

Análise Mergesort

• É um algoritmo do tipo dividir para conquistar

– Também conhecido como intercalação ordenada

• Recursivamente a sequência é dividida em duas sequencias menores com metade do seu

tamanho original, esse processo acontece até que as sequências menores tenham tamanho 1.

• Quando as sequências menores passam a ter tamanho 1, o processo volta mesclando as sequências menores em um processo

(25)

Análise Mergesort

• Características

– Interna ou Externa – In-place ou não (?)

• Embora sua implementação clássica demande uma memória auxiliar, já existem implementações in-place. – Estável ou não (?)

• Embora ele possa se tornar estável tomando certos cuidados na operação de intercalação

(26)

Custo Mergesort

• Como o Mergesort não é adaptativo, seu custo para o pior caso, melhor caso e caso

médio é o mesmo e igual a 𝑶 𝒏 𝐥𝐨𝐠 𝒏 – A relação de recorrência do Mergesort é

𝑇 𝑛 = 2𝑇 𝑛2 + 𝑛

(27)

Recomendação Mergesort

• Vantagens do Mergesort

– Possui tempo de execução constante O 𝑛 log 𝑛 , que é um tempo considerado razoável

– Indicado para aplicações que tem restrições de tempo

• Uma desvantagem do Mergesort é que sua implementação necessita de uma memória auxiliar

– Além disso, na prática, ele costuma ser menos eficiente que o Quicksort, por exemplo.

(28)

Análise Quicksort

• Outro algoritmo do tipo dividir para conquistar • Recursivamente, é escolhido um elemento para

dividir a lista em duas partes: a primeira, com todos os elementos menores que o elemento escolhido; e a segunda, com todos os maiores.

– Esse elemento divisor é chamado de pivô

• Características

– Interna ou Externa

– In-place ou não – Estável ou não

(29)

Custo Quicksort

• Assim como o Shell, a análise da

complexidade do Quicksort não é algo tão simples

– Sua eficiência depende da escolha do pivô

• No pior caso, seu custo chega a 𝐎 𝒏𝟐

• No caso médio e melhor caso seu custo é 𝐎 𝒏 𝐥𝐨𝐠 𝒏

(30)

Recomendação Quicksort

• O QuickSort é considerado um do métodos mais eficientes e é altamente recomendável para sequências grandes.

– Quanto mais o vetor estiver desordenado, maior será sua vantagem em relação aos outros

métodos.

– Entretanto, a escolha correta do pivô é essencial para a garantia de eficiência do algoritmo.

(31)

Análise Heapsort

• O Heapsort é um algoritmo que faz uso de uma árvore binária chamada Heap Tree

– Na Max Heap Tree o nó pai é maior que os filhos e a raiz corresponde ao maior elemento da sequência

• Resumidamente, copia-se a raiz para a ultima posição do vetor (no caso da Max Heap Tree) e reconstrói-se a árvore, desconsiderando o último elemento da sequência

– Repete-se esse processo até que a sequência esteja ordenada

(32)

Análise Heapsort

• Características – Interna ou Externa – In-place ou não – Estável ou não – Adaptativo ou não

(33)

Custo Heapsort

• Como o Heapsort não é adaptativo, seu custo para o pior caso, melhor caso e caso médio é o mesmo e igual a 𝐎 𝒏 𝐥𝐨𝐠 𝒏

– O custo para construir o heap a primeira vez é O 𝑛

– O custo para retirar a raiz é O 1

– O custo para corrigir o heap após uma remoção da raiz é O log 𝑛

(34)

Recomendação Heapsort

• Não é recomendado para sequências

pequenas, pois demanda um tempo extra para a construção do Heap

• De modo geral, o ciclo interno do Heapsort é mais complexo que o Quicksort e o Mergesort, o que pode fazer que em alguns casos

específicos ele seja bem menos eficiente que esses dois

(35)
(36)

Conclusão

• Os algoritmos podem ser divididos em dois grandes grupos:

– Menos eficientes: bolha, inserção e seleçõa

– Mais eficientes: heapsort, mergesort, quicksort e shell

• O 𝑛 log 𝑛 é considerado um limite teórico para o problema de ordenação

– Em tese, é impossível um algoritmo que ordena um vetor utilizando apenas comparações ser mais

eficiente que O 𝑛 log 𝑛

(37)

Algoritmos de Ordenação com custo linear

• Os algoritmos de distribuição são, na teoria, mais eficientes que os estudados até agora

– Entretanto, eles exigem algum outro tipo de conhecimento sobre os dados que deve ser

ordenados, portanto, não são tão genéricos como os vistos até agora.

– Os seguintes algoritmos tem complexidade O 𝑛 • Radix Sort

(38)

Análise Radixsort

• (Para números) Primeiro, ordena-se os elementos pela casa da unidade, depois dezena, depois centena e assim

sucessivamente, até a última casa decimal do maior número da sequência

– Além de números, o Radixsort também pode ser utilizado para ordenar outros tipos de elementos, como datas ou palavras, desde que esses elementos consistam em uma sequência de itens comparáveis • Características – Interna ou Externa – In-place ou não – Estável ou não – Adaptativo ou não

(39)

Custo Radixsort

• O custo do Radixsort, em qualquer caso, é 𝚯 𝒏𝒅 + 𝒌𝒅

– 𝑘 é o domínio dos possíveis valores – 𝑛 é o número de elementos

– 𝑑 é o número de dígitos

• O custo para ordenar por cada dígito é Θ 𝑛 + 𝑘

(40)

Recomendação Radixsort

• Esse algoritmo é particularmente eficiente

quando se tem muitos números a ordenar e as chaves são de tamanho pequeno.

(41)

Análise Distribuição de Chaves

• A lógica por trás da Distribuição de Chaves é descobrir para cada elemento 𝑥 da sequência o número de elementos menor que 𝑥

• Características

– Interna ou Externa – In-place ou não

– Estável ou não

(42)

Custo Distribuição de Chaves

• O custo da Distribuição de Chaves, em qualquer caso, é 𝐎 𝒏 + 𝒌

(43)

Recomendação Distribuição de Chaves

• Da mesma forma, esse algoritmo é

particularmente eficiente quando se tem

muitos números a ordenar e as chaves são de tamanho pequeno.

– Ou seja, quando 𝑘 < 𝑛

• Desvantagem

(44)

Algoritmos de Ordenação com custo linear

• Os algoritmos podem ser alterados para aumentar sua eficiência

– Exemplo

• Eu não preciso criar um vetor de 10 posições se o maior digito é 5, por exemplo.

• Eu não preciso começar o vetor de 0 se o menor dígito é 7, por exemplo.

• Embora os algoritmos sejam não adaptativos,

dependendo das características da sequência sua complexidade pode melhorar ou piorar

– Se o valor de 𝑘 for muito elevado esses algoritmos podem se tornar impraticáveis

Referências

Documentos relacionados

Para se buscar mais subsídios sobre esse tema, em termos de direito constitucional alemão, ver as lições trazidas na doutrina de Konrad Hesse (1998). Para ele, a garantia

rendimento de carcaça de frangos de corte e observaram que a energia metabolizável, tanto do milho como do farelo de soja, foi aumentada em 2 e 9%, respectivamente; e

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

3º Lugar – Seletiva Nacional Combat Games - Lívia Braga Luciano 3º Lugar - Taça Brasil de Juniores – André Henrique Humberto 3º Lugar - Brasileiro Sênior - André

O Departamento de Controle de Qualidade é o responsável pela revisão dos resultados de testes e da documentação pertinente ao produto (determinação de componentes / materiais,

A Organização estará a cargo do Município de Fornos de Algodres, assim como todos os membros do STAFF que estarão disponíveis para vos auxiliar no que for preciso.. Ao

1 - para hinos com um bemol na armadura de clave original, a nova armadura de clave será formada com dois sustenidos. 2 - para hinos com dois bemóis na armadura de clave original, a