SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Ordenação: Shellsort
Algoritmos e Estruturas de Dados II
Introdução
 Proposto por Donald Shell em 1959
 Extensão do algoritmo de ordenação por inserção
2
Motivação
 Ordenação por inserção só troca itens
adjacentes para determinar o ponto de inserção
 São efetuadas n-1 comparações e movimentações
quando o menor item está na última posição
 O método de Shell contorna este problema
permitindo trocas de registros distantes
3
permitindo trocas de registros distantes
Exemplo
4
Algoritmo
 Os conjuntos de itens separados de h posições
são ordenados
 O elemento na posição x é comparado (e trocado) com
o elemento na posição x-h
 O vetor resultante é composto de h arquivos
ordenados e entrelaçados
5
ordenados e entrelaçados
 O vetor (sequência) é dito estar h-ordenado
 Quando h = 1, o algoritmo é equivalente ao
algoritmo de inserção
Exemplo: Shellsort
E X E M P L O
E X E M P L O
E L E M P X O
E L E M P X O
E L E M P X O
E L E M P X O
h = 4
h = 2
h = 1 (inserção)
6
E L E M P X O
E L E M P X O
E L E M P X O
E L E M O X P
E L E M O X P
E L E M O X P
E L E M O X P
E E L M O X P
E E L M O X P
E L E M O X P
E L E M O X P
E L E M O P X
h = 1 (inserção)
Escolha da distância de salto h
 Qualquer sequência terminando com h = 1 garante
ordenação correta (h = 1 é ordenação por inserção)
 Forte impacto no desempenho do algoritmo
 Sequência para h:
1
1
1
3
1
1

+
=
=
=
s
)
h(s-
h(s)
s
,
h(s)
para
,
para
7
 A sequência corresponde a 1, 4, 13, 40, 121, 364,
1093, 3280, ...
 Knuth (1973, p. 95) mostrou experimentalmente que
esta sequência é difícil de ser batida por mais de
20% em eficiência
 Outras escolhas são possíveis
1
1
1
3 
+
= s
)
h(s-
h(s) para
,
Escolha da distância de salto h
 Qualquer sequência terminando com h = 1
garante ordenação correta
 h = 1 é ordenação por inserção
 Forte impacto no desempenho do algoritmo
 Exemplo de sequência ruim: 1, 2, 4, 8, 16, ...
8
 Não compara elementos em posições pares com
elementos em posições ímpares até a última iteração
Escolha da distância de salto h
 Sequência para h:
 A sequência corresponde a 1, 4, 13, 40, 121,
1
1
1
3
1
1

+
=
=
=
s
)
h(s-
h(s)
s
,
h(s)
para
,
para
9
 A sequência corresponde a 1, 4, 13, 40, 121,
364, 1093, 3280, ...
 Knuth (1973, p. 95) mostrou experimentalmente
que esta sequência é difícil de ser batida por
mais de 20% em eficiência
 Outras sequências têm desempenho similar
Shellsort
void shellsort(struct item *v, int n) {
int i, j, h;
struct item aux;
for(h = 1; h  n; h = 3*h+1); /* calcula o h inicial. */
while(h  0) {
h = (h-1)/3; /* atualiza o valor de h. */
for(i = h; i  n; i++) {
aux = v[i];
j = i;
j = i;
/* efetua comparações entre elementos com distância h: */
while(v[j – h].chave  aux.chave) {
v[j] = v[j – h];
j -= h;
if(j  h) break;
}
v[j] = aux;
}
}
}
Shellsort – Análise
 A complexidade do algoritmo ainda não é
conhecida
 Ninguém ainda foi capaz de encontrar
uma fórmula fechada para sua função de
complexidade
 A sua análise contém alguns problemas
matemáticos muito difíceis
 Exemplo: escolher a sequência de incrementos
 O que se sabe é que cada incremento não
deve ser múltiplo do anterior
Shellsort – Análise
 Conjecturas referentes ao número de
comparações para a seqüência de Knuth:
Conjectura 1: C(n) = O(n1,25)
Conjectura 2: C(n) = O(n (ln n)2 )
Vantagens e Desvantagens
 Vantagens:
 Shellsort é uma ótima opção para arquivos de
tamanho moderado
 Sua implementação é simples e requer uma
quantidade de código pequena
 Desvantagens:
 Desvantagens:
 O tempo de execução do algoritmo é sensível à
ordem inicial do arquivo
 O método não é estável
Exercícios
1. Dê um exemplo de um vetor com N elementos que
maximiza o número de vezes que o mínimo é
atualizado no método de ordenação seleção.
2. Mostre um exemplo de entrada que demonstra que o
método de ordenação seleção não é estável.
3. Mostre um exemplo que demonstra que o Shellsort é
14
Mostre um exemplo que demonstra que o Shellsort é
instável para sequencia h=1,2
4. O método da bolha não é adaptável, altere o código
para que ele se torne adaptável.
5. Qual dos métodos: bolha, inserção e seleção executa
menos comparações para um vetor de entrada
contendo valores idênticos.

Mais conteúdo relacionado

Semelhante a Shellsort: algoritmo de ordenação por salto

13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmosRicardo Bolanho
 
Controle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfControle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfCarlosAlexisAlvarado4
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Sistemas 2009 1
Sistemas 2009 1Sistemas 2009 1
Sistemas 2009 1Eli Brito
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Thaci Santos
 
Aprendizagem Automática
Aprendizagem AutomáticaAprendizagem Automática
Aprendizagem Automáticabutest
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoDelacyr Ferreira
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação FuncionalLambda 3
 
ordenacao shellsort quicksort em C
ordenacao shellsort quicksort em Cordenacao shellsort quicksort em C
ordenacao shellsort quicksort em CAlessandro Trevisan
 
Métodos Iterativos - Gauss-Seidel - @professorenan
Métodos Iterativos - Gauss-Seidel - @professorenanMétodos Iterativos - Gauss-Seidel - @professorenan
Métodos Iterativos - Gauss-Seidel - @professorenanRenan Gustavo
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
 

Semelhante a Shellsort: algoritmo de ordenação por salto (17)

13 introducao a analise de algoritmos
13   introducao a analise de algoritmos13   introducao a analise de algoritmos
13 introducao a analise de algoritmos
 
Math
MathMath
Math
 
Controle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdfControle con matlab - material adicional 1.pdf
Controle con matlab - material adicional 1.pdf
 
01
0101
01
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Sistemas 2009 1
Sistemas 2009 1Sistemas 2009 1
Sistemas 2009 1
 
Shell sort
Shell sortShell sort
Shell sort
 
Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.Algoritmo de ordenação heapsort.
Algoritmo de ordenação heapsort.
 
Algoritmo0
Algoritmo0Algoritmo0
Algoritmo0
 
Aprendizagem Automática
Aprendizagem AutomáticaAprendizagem Automática
Aprendizagem Automática
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Análise de Algoritmos - Método Guloso
Análise de Algoritmos - Método GulosoAnálise de Algoritmos - Método Guloso
Análise de Algoritmos - Método Guloso
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 
ordenacao shellsort quicksort em C
ordenacao shellsort quicksort em Cordenacao shellsort quicksort em C
ordenacao shellsort quicksort em C
 
Métodos Iterativos - Gauss-Seidel - @professorenan
Métodos Iterativos - Gauss-Seidel - @professorenanMétodos Iterativos - Gauss-Seidel - @professorenan
Métodos Iterativos - Gauss-Seidel - @professorenan
 
Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.Complexidade de algoritmos insertion, selection e bubble sort.
Complexidade de algoritmos insertion, selection e bubble sort.
 

Mais de gabriel-colman

Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdfSlide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdfgabriel-colman
 
8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdf8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdfgabriel-colman
 
Álgebra Linear e SQL Banco de Dados.pdf
Álgebra Linear e  SQL Banco de Dados.pdfÁlgebra Linear e  SQL Banco de Dados.pdf
Álgebra Linear e SQL Banco de Dados.pdfgabriel-colman
 
Definição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdfDefinição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdfgabriel-colman
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdfgabriel-colman
 
Engenharia de Software: Processos de Software
Engenharia de Software: Processos de SoftwareEngenharia de Software: Processos de Software
Engenharia de Software: Processos de Softwaregabriel-colman
 

Mais de gabriel-colman (8)

Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdfSlide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
Slide 4 CORREÇÃO DAS ATIVIDADES, Banco de dados.pdf
 
8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdf8-uml-e-modelagem-oo Introdução a UML.pdf
8-uml-e-modelagem-oo Introdução a UML.pdf
 
Álgebra Linear e SQL Banco de Dados.pdf
Álgebra Linear e  SQL Banco de Dados.pdfÁlgebra Linear e  SQL Banco de Dados.pdf
Álgebra Linear e SQL Banco de Dados.pdf
 
Definição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdfDefinição Formal do MER(Conceitos do Modelo Relacional).pdf
Definição Formal do MER(Conceitos do Modelo Relacional).pdf
 
14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf14-programacao-bd-Object Relational Mapper.pdf
14-programacao-bd-Object Relational Mapper.pdf
 
Engenharia de Software: Processos de Software
Engenharia de Software: Processos de SoftwareEngenharia de Software: Processos de Software
Engenharia de Software: Processos de Software
 
Introdução.pdf
Introdução.pdfIntrodução.pdf
Introdução.pdf
 
10 - JS OOP.pptx
10 - JS OOP.pptx10 - JS OOP.pptx
10 - JS OOP.pptx
 

Shellsort: algoritmo de ordenação por salto

  • 1. Ordenação: Shellsort Algoritmos e Estruturas de Dados II
  • 2. Introdução Proposto por Donald Shell em 1959 Extensão do algoritmo de ordenação por inserção 2
  • 3. Motivação Ordenação por inserção só troca itens adjacentes para determinar o ponto de inserção São efetuadas n-1 comparações e movimentações quando o menor item está na última posição O método de Shell contorna este problema permitindo trocas de registros distantes 3 permitindo trocas de registros distantes
  • 5. Algoritmo Os conjuntos de itens separados de h posições são ordenados O elemento na posição x é comparado (e trocado) com o elemento na posição x-h O vetor resultante é composto de h arquivos ordenados e entrelaçados 5 ordenados e entrelaçados O vetor (sequência) é dito estar h-ordenado Quando h = 1, o algoritmo é equivalente ao algoritmo de inserção
  • 6. Exemplo: Shellsort E X E M P L O E X E M P L O E L E M P X O E L E M P X O E L E M P X O E L E M P X O h = 4 h = 2 h = 1 (inserção) 6 E L E M P X O E L E M P X O E L E M P X O E L E M O X P E L E M O X P E L E M O X P E L E M O X P E E L M O X P E E L M O X P E L E M O X P E L E M O X P E L E M O P X h = 1 (inserção)
  • 7. Escolha da distância de salto h Qualquer sequência terminando com h = 1 garante ordenação correta (h = 1 é ordenação por inserção) Forte impacto no desempenho do algoritmo Sequência para h: 1 1 1 3 1 1 + = = = s ) h(s- h(s) s , h(s) para , para 7 A sequência corresponde a 1, 4, 13, 40, 121, 364, 1093, 3280, ... Knuth (1973, p. 95) mostrou experimentalmente que esta sequência é difícil de ser batida por mais de 20% em eficiência Outras escolhas são possíveis 1 1 1 3 + = s ) h(s- h(s) para ,
  • 8. Escolha da distância de salto h Qualquer sequência terminando com h = 1 garante ordenação correta h = 1 é ordenação por inserção Forte impacto no desempenho do algoritmo Exemplo de sequência ruim: 1, 2, 4, 8, 16, ... 8 Não compara elementos em posições pares com elementos em posições ímpares até a última iteração
  • 9. Escolha da distância de salto h Sequência para h: A sequência corresponde a 1, 4, 13, 40, 121, 1 1 1 3 1 1 + = = = s ) h(s- h(s) s , h(s) para , para 9 A sequência corresponde a 1, 4, 13, 40, 121, 364, 1093, 3280, ... Knuth (1973, p. 95) mostrou experimentalmente que esta sequência é difícil de ser batida por mais de 20% em eficiência Outras sequências têm desempenho similar
  • 10. Shellsort void shellsort(struct item *v, int n) { int i, j, h; struct item aux; for(h = 1; h n; h = 3*h+1); /* calcula o h inicial. */ while(h 0) { h = (h-1)/3; /* atualiza o valor de h. */ for(i = h; i n; i++) { aux = v[i]; j = i; j = i; /* efetua comparações entre elementos com distância h: */ while(v[j – h].chave aux.chave) { v[j] = v[j – h]; j -= h; if(j h) break; } v[j] = aux; } } }
  • 11. Shellsort – Análise A complexidade do algoritmo ainda não é conhecida Ninguém ainda foi capaz de encontrar uma fórmula fechada para sua função de complexidade A sua análise contém alguns problemas matemáticos muito difíceis Exemplo: escolher a sequência de incrementos O que se sabe é que cada incremento não deve ser múltiplo do anterior
  • 12. Shellsort – Análise Conjecturas referentes ao número de comparações para a seqüência de Knuth: Conjectura 1: C(n) = O(n1,25) Conjectura 2: C(n) = O(n (ln n)2 )
  • 13. Vantagens e Desvantagens Vantagens: Shellsort é uma ótima opção para arquivos de tamanho moderado Sua implementação é simples e requer uma quantidade de código pequena Desvantagens: Desvantagens: O tempo de execução do algoritmo é sensível à ordem inicial do arquivo O método não é estável
  • 14. Exercícios 1. Dê um exemplo de um vetor com N elementos que maximiza o número de vezes que o mínimo é atualizado no método de ordenação seleção. 2. Mostre um exemplo de entrada que demonstra que o método de ordenação seleção não é estável. 3. Mostre um exemplo que demonstra que o Shellsort é 14 Mostre um exemplo que demonstra que o Shellsort é instável para sequencia h=1,2 4. O método da bolha não é adaptável, altere o código para que ele se torne adaptável. 5. Qual dos métodos: bolha, inserção e seleção executa menos comparações para um vetor de entrada contendo valores idênticos.