Sunteți pe pagina 1din 13

Análise de Algoritmos e Estrutura de Dados

Lista de Exercícios – Ordenação linear e externa


1. Fazer um resumo dos métodos de ordenação lineares e dos métodos de ordenação
externos. Incluir o método seleção por substituição.
2. Ordene o seguinte vetor por intercalação balanceada de vários caminhos:
[15 2 5 1 11 8 3 13 12 6 7 10 11 9 1 4 ]
3. Ordene o seguinte vetor por quicksort externo:
[15 2 5 1 11 8 3 ]

1) Resumo

I - Ordenação Linear
a) Ordenação por Contagem
A ordenação por contagem realiza outras operações para determinar a sequencia
ordenada sem fazer o método de comparação como visto anteriormente. Ela pressupõe
que cada um dos n elementos de entrada é um inteiro no intevalo de 1 a k, para algum
inteiro k.
A idéia básica é determinar, para cada elemento de entrada x, o número de elementos
menores que x. Essa informação pode ser usada para inserir o elemento x diretamente
em sua posição no arranjo de saída. Por exemplo, se há 17 elementos menores que x,
então x é colocado na posição 18. Esse esquema deve ser ligeiramente modificado para
manipular a situação na qual vários elementos têm o mesmo valor, pois não queremos
inserir todos eles na mesma posição.
No código para ordenação por contagem, partimos da suposição de que a entrada é um
arranjo A[1...n] e, portanto, comprimento[A]=n. Exigimos dois outros arranjos: o arranjo
B[1...n] contém a saída ordenada, e o arranjo C[0...k] fornece um espaço de
armazenamento de trabalho temporário.

COUNTING-SORT(A,B,k)
for i←0 to k
do C[i] ←0
for j←1 to comprimento[A]
do C[A[j]] ←C[A[j]] +1
*Agora C[i] contém o número de elementos iguais a i.
for i←2 to k
do C[i] ← C[i] + C[i-1]
*Agora C[i] contém o número de elementos menores que ou iguais a i
for j←comprimento[A] downto 1
do B[C[A[j]]] ← A[j]
C[A[j]] ← C[A[j]] -1
Características:
- Não realiza comparações entre os elementos
- Utiliza os valores dos elementos para indexar em outro vetor
- Utiliza memória adicional
- É estável, pois mantém a ordem de chegada dos elementos.

b) Radix sort
O radix sort ( ou ordenação da raiz) é o algoritmo usado pelas máquinas de ordenação de
cartões perfurados. Estes cartões eram organizados em 80 colunas, e em cada coluna
pode ser feita uma perfuração em uma de 12 posições.
O radix sort ordena primeiro sobre o dígito menos significativo. O processo continua até
os cartões terem sido ordenados sobre todos os dígitos.
A ordenação precisa ser estável, para não alterar a ordem dos cartões, para isto, pode
ser usado registros com vários campos, como data.

Análise
Lema 1: dados n números de d dígitos em que cada dígito pode assumir até k valores
possíveis, radix sort ordena corretamente esses números no tempo O(d(n+k)).
Quando d é constante e k=O(n) radix sort é executado em tempo linear.
Lema 2: Dados n números de b bits e qualquer inteiro positivo r<=b, radix sort ordena
corretamente esses números no tempo O((b/r)(n+2r)).
Exemplo: dada uma palavra de 32 bits tendo 4 dígitos de 8 bits, temos b=32, r=8 , k=2r-1
= 255 e d=b/r=4.
c) Bucket sort
O bucket sort pressupõe que a entrada é gerada sobre um processo aleatório que
distribui elementos uniformemente sobre o intervalo [0,1]. Divide o intervalo [0,1] em n
subintervalos (ou baldes) e distribui os n números entre estes baldes. Como as entradas
são uniformemente distribuídas, não espera-se que muitos números caiam em cada
balde. A entrada é um vetor de n elementosA[0...N-1] e cada elemento satisfaz
0<=A[i]<=1. Utiliza-se um vetor auxiliar B[0...N-1] de listas ligadas.

BUCKET-SORT(A)
n ← comprimento[A]
for i←1 to n
do inserir A[i] na lista B[nA[i]]
for i←0 to n-1
do ordenar lista B[i] (Utilizar métodos de ordenação não quadráticos)
concatenar as listas B[0], B[1],...,B[n-1] juntas em ordem.

II - Ordenação Externa
A ordenação externa consiste em ordenar arquivos de tamanho maior que a memória
interna disponível. Na ordenação externa os algoritmos devem diminuir o número de
acesso as unidades de memória externa, pois o armazenamento externo são mais lentos
devido aos sistemas de físicos de comunicação e dispositivos mecânicos envolvidos no
processo de leitura e gravação.
a) Intercalação Balanceada de Vários Caminhos
Intercalar significa combinar dois ou mais blocos ordenados em um único bloco ordenado.
A intercalação é utilizada como uma operação auxiliar na ordenação.
A estratégia consiste em:
- Quebrar o arquivo em bloco do tamanho da memória interna disponível.
- Ordenar cada bloco na memória interna.
- Intercale os bloco ordenados, fazendo várias passadas sobre o arquivo.
- A cada passada são criados blocos ordenados cada vez maiores, até que todo o arquivo
esteja ordenado.
Algoritmo de Intercalação
- O primeiro registro de cada fita é lido.
- Retire o registro contendo a menor chave.
- Armazene-o em uma fita de saída.
- Leia um novo registro da fita de onde o registro retirado é proveniente.
- Ao ler o terceiro registro de um dos blocos, sua fita fica inativa.
- A fita é reativada quando o terceiro registro das outras fitas forem lidos.
- Neste instante um bloco de nove registros ordenados foi formado na fita de saída.
- Repita o processo para os blocos restantes.

Análise da Intercalação Balanceada


- Seja n o número de registros do arquivo.
- Suponha que cada registro ocupa m palavras na memória interna.
- A primeira etapa produz n/m blocos ordenados.
- Seja P(n) o número de passadas para a fase de intercalação.
P(n) = logf(n/m)
Desvantagens do Método
- Necessita de grande número de fitas.
- faz várias leituras e escritas entre as fitas envolvidas.
- Para uma intercalação balanceada de f caminhos são necessárias 2f fitas.
Alternativamente, pode-se copiar o arquivo quase todo de uma única fita de saída para f
fitas de entrada. Isto reduz o número de fitas para f+1. Porém, há um custo de uma cópia
adicional do arquivo.

b) Intercalação polifásica
Os blocos ordenados são distribuídos de forma desigual entre as fitas disponíveis.
Uma fita é deixada livre.
Em seguida, a intercalação de blocos ordenados é executada até que uma das fitas
esvazie.
Neste ponto, uma das fitas de saída troca de papel com a fita de entrada.
Considerações
A intercalação é realizada em muitas fases. As fases não envolvem todos os blocos.
Nenhuma cópia direta entre fitas é realizada.
A análise da intercalação polifásica é complicada.
O que se sabe é que ela é ligeiramente melhor do que a intercalação balanceada para
valores pequenos de f<8.
Seleção por Substituição
A implementação do método de intercalação pode ser realizada utilizando filas de
prioridades. As duas fases do método podem ser implementadas de forma eficiente e
elegante.
- Operações básicas para formar blocos ordenados: obter o menor dentre os registros
presentes na memória interna; substituí-lo pelo próximo registro da fita de entrada.
A estrutura ideal para implementar as operações é a heap.
A operação de substituição consiste em retirar o menor item da fila de prioridades; colocar
um novo item no seu lugar; reconstituir a propriedade do heap.
O algoritmo insere m elementos do arquivo na fila de prioridades.
Substitui o menor item da fila de prioridades pelo próximo item do arquivo.
Se o próximo item é menor do que o que saiu, então:
- Considere-o membro do próximo bloco;
- Trate-o como sendo maior do que todos os itens do bloco corrente.
Se um item marcado vai para o topo da fila de prioridades então:
- O bloco corrente é encerrado;
- Um novo bloco ordenado é iniciado.
O tamanho dos blocos produzidos para as chaves randômicas são cerca de duas vezes o
tamanho dos blocos criados pela ordenação interna.
Isto pode salvar uma passada na fase de intercalação.
Se houver alguma ordem nas chaves, os blocos ordenados podem ser ainda maiores.
Se nenhuma chave possui mais do que m chaves maiores do que ela, o arquivo é
ordenado em um passo.
Fase de intercalação dos blocos ordenados obtidos na primeira fase:
- Operação básica: obter o menor item dentre os ainda não retirados dos f blocos a serem
intercalados.
Algoritmo:
- Montar uma fila de prioridades de tamanho f.
- A partir de cada uma das f entradas:
- Substitua o item no topo da fila de prioridades pelo próximo item do mesmo bloco do
item que está sendo substituído.
- Imprima em outra fita o elemento substituído.
Observações:
Para f pequeno não é vantajoso utilizar seleção por substituição para intercalar blocos:
- Obtém-se o menor item fazendo f-1 comparações.
Quando f é 8 ou mais, o método é adequado:
- Obtém-se o menor item fazendo log2f comparações.
Considerações:
As operações de entrada e saída de dados devem ser implementadas eficientemente.
Deve-se procurar realizar a leitura, a escrita e o processamento interno dos dados de
forma simultânea.
Os computadores de maior porte possuem uma ou mais unidades independentes para
processamento de entrada e saída.
Assim, pode-se realizar processamento e operações de E/S simultaneamente.
A técnica para obter superposição de E/S e processamento interno consiste em:
- Utilizar 2f áreas de entrada e 2f de saída;
- Para cada unidade de entrada ou saída, utiliza-se duas áreas de armazenamento;
- uma para uso do processador central;
- outra para uso do processador de entrada e ou saída.
- Para entrada, o processador central usa uma das duas áreas enquanto a unidade de
entrada está preenchendo a outra área.
- Depois a utilização das áreas é invertida entre o processador de entrada e o
processador central.
- Para saída, a mesma técnica é utilizada.
Contudo esta técnica apresenta alguns problemas:
- Apenas metade da memória disponível é utilizada.
- Isso pode levar a uma ineficiência se o número de áreas for grande.
- Todas as f áreas de entrada em uma intercalação de f-caminhos se esvaziando
aproximadamente ao mesmo tempo.
Uma possível solução para isto pode ser utilizar a técnica de previsão:
- Requer a utilização de uma única área extra de armazenamento durante a
intercalação;
- Superpõe a entrada da próxima área que precisa ser preenchida com a parte de
processamento interno do algoritmo.
- É fácil saber qual área ficará vazia primeira.
- Basta olhar para o último registro de cada área.
- A área cujo último registro é o menor, será a primeira a se esvaziar.

b) Quick-Sort Externo
Os primeiros m-1 registros são lidos, alternativamente, dos extremos de A e armazenados
na memória interna.
Ao ler o m-ésimo registro:
- m é comparado com Lsup, se for maior, j recebe Ej e o registro é escrito em A2.
- senão, m é comparado com Linf e, se for menor, i recebe Ei e o registro é escrito em A1.
- caso contrário, Linf < m < Lsup, o registro é inserido na área de pivô.
- Obs.: a ordem de leitura é interrompida se Li = Ei ou Lj = Ej.
- Quando a área do pivô enche, remove-se um registro da mesma, considerando os
tamanhos de A1 e A2. Sendo Esq e Dir a primeira e a última posição de A, os tamanhos de
A1 e A2 são T1 = Ei – esq e T2 = Dir – Ej.
Se T1 < T2 o registro de menor chave é removido da memória sendo escrito em Ei (A1) e
Linf é atualizado com tal chave.
Se T1 >= T2 o registro de maior chave é removido da memória sendo escrito em Ej (A2), e
Lsup é atualizado com tal chave.
O processo de partição continua até que Li e Lj se cruzem (Li < Lj).
Os registros armazenados na área de pivô devem ser copiados já ordenados para A. O
menor deles deve ser removido e escrito na área apontada por Ei.

Análise do algoritmo
- Seja n o número de registros a serem ordenados e b o tamanho do bloco de leitura, m
área do pivô.
- Melhor caso: n/b operações
- Pior caso: n²/m quando as partições geradas possuem tamanhos inadequados (maior
tamanho e vazio)
- Caso médio: (n/b) log(n/m)
2) Intercalação Balanceada de vários caminhos
Passo 1
Matriz 15 2 5 1 11 8 3 13 12 6 7 10 11 9 1 4
RAM 15 2 5 1
Fita 1 1 2 5 15
Fita 2
Fita 3
Fita 4

Passo 2
Matriz 15 2 5 1 11 8 3 13 12 6 7 10 11 9 1 4
RAM 11 8 3 13
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3
Fita 4

Passo 3
Matriz 15 2 5 1 11 8 3 13 12 6 7 10 11 9 1 4
RAM 12 6 7 10
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4

Passo 4
Matriz 15 2 5 1 11 8 3 13 12 6 7 10 11 9 1 4
RAM 11 9 1 4
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11

Passo 5
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 1 3 6 1

Fita 5 1
Passo 6
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 2 3 6 1

Fita 5 1 1

Passo 7
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 2 3 6 4

Fita 5 1 1 2

Passo 8
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 5 3 6 4

Fita 5 1 1 2 3

Passo 9
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 5 8 6 4

Fita 5 1 1 2 3 4

Passo 10
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 5 8 6 9

Fita 5 1 1 2 3 4 5
Passo 11
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 8 6 9

Fita 5 1 1 2 3 4 5 6

Passo 12
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 8 7 9

Fita 5 1 1 2 3 4 5 6 7

Passo 13
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 8 10 9

Fita 5 1 1 2 3 4 5 6 7 8

Passo 14
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 11 10 9

Fita 5 1 1 2 3 4 5 6 7 8 9

Passo 15
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 11 10 11
Fita 5 1 1 2 3 4 5 6 7 8 9 10

Passo 16
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 11 12 11

Fita 5 1 1 2 3 4 5 6 7 8 9 10 11

Passo 17
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 13 12 11

Fita 5 1 1 2 3 4 5 6 7 8 9 10 11 11

Passo 18
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 13 12

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

Passo 19
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15 13

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

Passo 20
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM 15

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

Passo 21
Fita 1 1 2 5 15
Fita 2 3 8 11 13
Fita 3 6 7 10 12
Fita 4 1 4 9 11
RAM

FINAL 1 1 2 3 4 5 6 7 8 9 10 11 11 12 13 15
3) Quick Sort Externo
Li Lj PIVO Linf Lsup
Matriz 15 2 5 1 11 8 3  
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 15 2 5 1 11 8 3 3  
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 15 2 5 1 11 8 3 3 15  
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 15 2 5 1 11 8 3 3 8 15  
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 15 2 5 1 11 8 15 3 8  15
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 15 2 5 1 11 8 15 2 3 8  15
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 2 2 5 1 11 8 15 3 8 11 2 15
Ei Ej

Li Lj PIVO Linf Lsup


Matriz 2 2 5 1 11 8 15 3 11 2 15
Ei Ej

S-ar putea să vă placă și