Classificação Externa
Inhaúma Neves Ferraz
Departamento de Ciência da Computação
Universidade Federal Fluminense
[email protected]
Sumário
Introdução e Conceito
Geração de Partições Classificadas
Intercalação das Partições
Classificadas
2
Introdução e Conceito
Aplicações usando Classificação
Os programas desenvolvidos para algumas áreas
de aplicação, como processamento de dados
comercial, podem gastar a maior parte do seu
tempo de computação em atividades de
classificação e/ou pesquisas para produzir
relatórios, tabelas formatadas, etc.
Calcula-se que cerca da quarta parte de todo o
tempo consumido em máquina seja gasto em
atividades de classificação
4
Tipos de Classificação
A classificação de registros de um arquivo
pode ser de dois tipos:
Classificação interna: com utilização
exclusiva de memória principal
Classificação externa: com utilização de
memória secundária
5
Conceito de Classificação Externa
Classificação interna: lista de registros pode ser mantida inteiramente
na memória principal durante a classificação
Classificação externa: há mais registros a serem classificados do que
é possível manter na memória principal em qualquer momento
Na classificação externa o parâmetro fundamental é o número de
operações de entrada e saída.
Pode-se classificar um arquivo sobre ele mesmo ou utilizar
armazenamento auxiliar

A classificação sobre ele mesmo poupa espaço porém corre o risco de
inconsistência em caso de término anormal de processamento
A Classificação Externa divide os arquivos em pequenas frações que
são ordenadas e intercaladas em dois estágios:


Classificação
Intercalação.
6
Modelo da Classificação Externa
7
Estágio de Classificação
Uma partição é uma seqüência classificada
de n registros.
Registros são lidos de arquivos de entrada
(não classificados) e de partições
(classificadas)
Estes registros são classificados e gravados
em arquivos de saída ou partições
classificadas.
8
Geração de Partições Classificadas
Métodos do Estágio de Classificação
Métodos
Classificação interna
 Seleção com substituição
 Seleção natural.

Considera-se que a memória principal tenha
capacidade para armazenar M registros do
arquivo a classificar
10
Classificação Interna
Classificação Interna
Critério fundamental de eficiência da classificação
interna: número de comparações entre chaves de
registros
Consiste na leitura de MAX_MEMO registros
para a memória, classificação desses registros por
qualquer processo de classificação interna e
gravação desses registros classificados em uma
partição.
Todas as partições classificadas contém
MAX_MEMO registros, exceto, talvez, a última
12
Processos de classificação
interna
Troca: bubble sort, bubble com
“flag”, shaker sort, quick sort
Seleção: direta, heap sort,
Inserção: simples, shell sort
Outros: merge sort, etc.
13
Visão geral da Geração de partições
Classificadas
14
Seleção com Substituição
Seleção com Substituição
1.
2.
3.
4.
Aproveita a possível classificação parcial do arquivo de entrada
Algoritmo:
Ler MAX_MEMO registros do arquivo para a memória
Selecionar, no “array” em memória, o registro com menor chave
Gravar na partição de saída o registro com menor chave
Substituir, no “array” em memória, o registro gravado na saída pelo
próximo registro do arquivo de entrada
1.
Caso a chave deste último seja menor do que a chave recém-gravada,
considerá-lo "congelado" e ignorá-lo no restante do processamento
5. Caso existam em memória registros não "congelados" voltar ao passo
dois
6. Caso contrário, fechar a partição de saída, "descongelar" os registros
"congelados", abrir nova partição de saída e voltar ao passo dois
Em média, o tamanho das partições obtidas pelo processo de seleção
com substituição é de 2 * MAX_MEMO
16
Seleção Natural
Seleção Natural
Desvantagem da seleção com substituição - no final da
partição grande parte do espaço em memória principal está
ocupado com registros “congelados”
Na seleção natural, reserva-se um espaço de memória
secundária ("o reservatório") para abrigar os registros
"congelados" num processo de substituição
A formação de uma partição se encerra quando o
reservatório estiver cheio ou quando terminarem os
registros de entrada
Para a memória comportando MAX_MEMO registros
supõe-se um reservatório comportando max_reserv
registros
Para MAX_MEMO= max_reserv o comprimento médio
das partições é de MAX_MEMO * e, onde e = 2,718... .
18
Comparação dos Processos
A classificação interna gera as menores partições
mas simplifica o estágio de intercalação por usar
partições de mesmo comprimento
Os processos de seleção exigem intercalação mais
elaborada, porém, gerando partições maiores,
reduzem o tempo total de processamento
A seleção natural sofre o ônus adicional de utilizar
mais operações de entrada e saída
19
Exemplo
Considere-se ser necessário classificar um
arquivo cujas chaves de registros estejam
representadas a seguir
Suponha-se a possibilidade de manter na
memória, simultaneamente, 6 registros
Pede-se exibir as partições que seriam
obtidas utilizando cada um dos métodos de
geração de partições
20
Chaves dos registros a classificar
29
56
5
54
3
14
20
19
78
60
76
26
50
43
36
75
4
55
38
47
59
21
25
51
31
6
65
66
32
80
7
22
57
58
74
49
77
13
48
11
12
73
46 10 18
16 8 15
30 17 9
79 27 1
21
Partições obtidas por
classificação interna
Memória
29
Área de trabalho
14 76 75 59
Memória
7
74
48
46
10
18
7
10
18
46
48
74
Memória
56
20
26
4
21
65
4
20
21
26
56
65
Memória
22
49
11
16
8
15
8
11
15
16
22
49
Memória
5
19
50
55
25
66
5
19
25
50
55
66
Memória
57
77
12
30
17
9
9
12
17
30
57
77
Memória
54
78
43
38
51
32
32
38
43
51
54
78
Memória
58
13
73
79
27
1
1
13
27
58
73
79
Memória
3
60
36
47
31
80
3
31
36
47
60
80
6
6
Partições obtidas
14 29 59 75
76
22
Partições obtidas por seleção com substituição
Registros
3 substituição
a
2 substituição
a
1 substituição
Memória
a
a
2 substituição
a
1 substituição
Memória
a
3 substituição
a
2 substituição
a
1 substituição
Memória
a
3 substituição
a
2 substituição
a
1 substituição
Memória
a
1 substituição
Memória
1
Área de trabalho
2
3 4
5
6
20
10 18
74
46 48 4 26 56 7
29 14 76 75 59 6
4
5
Partições obtidas
6
7 8
9 10 11 12 13 14 15
1
2
3
6
7
14 29 46 48 59 74 75 76
a
A 1 partição ficou com 10 registros
19 16 11
15
65 22 21 8
5 49
10 18 4 26 56 20
4
10 18 20 21 22 26 49 56 65
a
A 2 partição ficou com 10 registros
43
78 9 12 17 30 54
77 57 25 55 50 66
19 16 11 8
5 15
5
8
60
36 73 27 13 3
79 38 51 32 58 1
43 9 12 17 30 54
9
12 17 30 32 38 43 51 54 58 73 79
a
A 4 partição ficou com 12 registros
80 31 47
36 60 27 13 3 1
1
3
11 15 16 19 25 50 55 57 66 77 78
a
A 3 partição ficou com 13 registros
13 27 31 36 47 60 80
a
A 5 partição ficou com 9 registros
Legenda
Registros congelados
Divisão de regiões na tabela
23
Partições obtidas por classificação seleção natural
Registros
2 substituição
a
1 substituição
Memória
Reservatório
a
Área de trabalho
2 3 4 5
1
6
56
74
46 48
7
29 14 76 75 59 6
10 18 20 26 4 21
4
Partições obtidas
6 7 8 9 10 11 12 13 14 15
1
2
3
5
6
7
14 29 46 48 56 59 74 75 76
a
A 1 partição ficou com 11 registros
a
1 substituição
Memória
Reservatório
a
3 substituição
a
2 substituição
a
1 substituição
Memória
Reservatório
a
2 substituição
a
1 substituição
Memória
Reservatório
a
1 substituição
Memória
Reservatório
22 49
65
10 18 20 26 4 21
11 16 8 15 5 19
4
10 18 20 21 22 26 49 65
a
A 2 partição ficou com 9 registros
54
30
78
25 57 55 66 50 77
11 16 8 15 5 19
12 17 9 43 38 51
5
8
11 15 16 19 25 30 50 54 55 57 66 77 78
a
A 3 partição ficou com 15 registros
79
58 73 32 47 60
12 17 9 43 38 51
13 27 1 3 36 31
9
12 17 32 38 43 47 51 58 60 73 79
a
A 4 partição ficou com 12 registros
80
13 27 1
3
36 31
1
3
13 27 31 36 80
a
A 5 partição ficou com 7 registros
24
Intercalação das Partições
Classificadas
Generalidades
Consiste na transformação de um conjunto de seqüências
de registros, classificadas por determinado critério, em
uma única seqüência contendo todos os registros de todas
as seqüências originais do conjunto, sendo esta seqüência
única classificada pelo mesmo critério de classificação das
seqüências iniciais
Considere-se a existência de R partições geradas pelo
processo de geração de partições
Seria ideal poder intercalar todas as partições de uma só
vez e obter o arquivo classificado

Contudo, os Sistemas Operacionais estabelecem número máximo
de arquivos abertos simultaneamente, número esse que pode ser
bem menor do que o número de partições existentes
A intercalação vai exigir uma série de fases durante cada
qual registros são lidos de um conjunto de arquivos e
gravados em outro (partições)
26
Estágio de Intercalação
Estratégias de distribuição e intercalação:
1. Intercalação balanceada de N caminhos.
2. Intercalação ótima.
3. Intercalação polifásica.
27
Medida de Eficiência
Uma medida de eficiência de estágio de
intercalação é dada pelo número de passos sobre
os dados, assim definido:
Numero total de registros lidos
Numero de passos 
Numero total de registros no arquivo classficado
O número de passos é o número médio de vezes
que um registro é lido (ou gravado) durante o
estágio de intercalação.
28
Intercalação balanceada de N
caminhos
Intercalação Balanceada de n caminhos (1)
Arquivos disponíveis são distribuídos, tão
equilibradamente quanto possível, em dois
conjuntos
Partições inicias são distribuídas, tão
equilibradamente quanto possível nos arquivos de
um dos conjuntos
Durante cada fase da intercalação são lidos
registros dos arquivos no conjunto que recebeu as
partições iniciais (conjunto de entrada) e o
resultado das intercalações é gravado nos arquivos
do conjunto de saída, ciclicamente
30
Intercalação Balanceada de n caminhos (2)
No final de cada fase, o conjunto de entrada tornase o conjunto de saída e vice-versa
O balanceamento do processo baseia-se em
colocar nos arquivos de entrada aproximadamente
o mesmo número de registros
Considerando-se F possíveis arquivos abertos, um
dos conjuntos conterá os arquivos numerados de 1
a N e o outro conterá os arquivos numerados de
N+1 até F
Define -se uma variável
conjunto_inicial_de_entrada para identificar qual
é o conjunto de entrada em cada fase
31
Intercalação Balanceada de n caminhos (3)
A intercalação termina quando, em uma
fase, grava-se apenas uma partição. O
número de passos é igual ao número de
fases
A intercalação utiliza no máximo F/2
caminhos, quando o ideal seria F-1
caminhos
Pode ocorrer que partições sejam copiadas
de um arquivo para outro sem qualquer
processamento
32
Exemplo – Intercalação Balanceada (1)
Considere-se a existência de 20 partições
classificadas cada qual com 100 registros a
intercalar
Supõe-se ser possível manter abertos
simultaneamente 4 arquivos
A notação i x j significa i partições de j
registros cada
33
Exemplo – Intercalação Balanceada (2)
Instante
INICIALMENTE
Após a fase 1
Após a fase 2
Após a fase 3
Após a fase 4
Após a fase 5
Arquivo 1 Arquivo 2 Arquivo 3
Arquivo 4
10 x 100
10 x 100
5 x 200
5 x 200
3 x 400
2 x 400
1x800,1x400 1 x 800
1 x 1600
1 x 400
1 x 2000
34
Intercalação Ótima
Intercalação Ótima
Partições iniciais gravadas em arquivos, cada qual com
uma única partição
Durante cada fase do algoritmo, as F-1 menores partições
são intercaladas e gravadas em uma partição ou arquivo de
saída
Do conjunto inicial de partições removem-se as partições
intercaladas e a ele agrega-se a partição gerada na
intercalação
Termina quando este conjunto tiver apenas uma partição.
Cada partição de conter seu número de registros, ou o
Sistema Operacional deve determinar o tamanho dos
arquivos para verificar quais deles devem ser intercalados
em cada momento (os F-1 menores)
36
Exemplo – Intercalação Ótima (1)
Considere-se a existência de 20 partições
classificadas cada qual com 100 registros a
intercalar
Supõe-se ser possível manter abertos
simultaneamente 4 arquivos
Será utilizada a notação x:y significando a
partição de número x contendo y registros
37
Exemplo – Intercalação Ótima (2)
Fase Arquivo1 Arquivo2 Arquivo3 Arquivo4 N. de leituras
1
1:100
2:100
3:100
21:300
300
2
4:100
5:100
6:100
22:300
300
3
7:100
8:100
9:100
23:300
300
4
10:100
11:100
12:100
24:300
300
5
13:100
14:100
15:100
25:300
300
6
16:100
17:100
18:100
26:300
300
7
19:100
20:100
21:300
27:500
500
8
22:300
23:300
24:300
28:900
900
9
25:300
26:300
27:500
29:1100
1100
10
28:900
29:1100
---------- 30:2000
2000
TOTAL
6300
Número de passos 
6300
 3,15
2000
38
Intercalação Polifásica
Intercalação Polifásica (1)
Para eliminar as cópias de partições sem
que elas sejam intercaladas pode-se fazer
sempre intercalações de ordem F-1
A Intercalação polifásica opera desta
maneira, exigindo entretanto que a fase de
classificação interna distribua as partições,
entre os F-1 arquivos disponíveis para
entrada, de maneira especialmente
determinada para otimização do algoritmo
40
Intercalação Polifásica (2)
Considere-se a notação i x j representando i
partições e j registros
Em cada fase do algoritmo intercalam-se F1 arquivos até chegar ao final de qualquer
uma delas
Nesse ponto, interrompe-se a fase deixando
o restante dos arquivos para a fase seguinte
41
Exemplo inicial de Intercalação Polifásica
Considere-se , por exemplo, a intercalação de
31 partições com F = 4
Instante
Inicialmente
Após fase 1
Após fase 2
Após fase 3
Após fase 4
Após fase 5
Arq1
13 X 100
6 X 100
2 X 100
--------1 X 1700
---------
Arq2
11 X 100
4 X 100
-------2 X 900
1 X 900
---------
Nú mero de passos 
Arq3
7 X 100
--------4 X 500
2 X 500
1 X 500
---------
Arq4
N. de leituras
---------------7 X 300
2100
3 X 300
2000
1 X 300
1800
-------1700
1 X 3100
3100
TOTAL
10700
10700
 3,45
3100
42
Intercalação Polifásica (3)
A intercalação polifásica para ser otimizada necessita
de uma distribuição consistente de partições iniciais
Considere-se, por exemplo, F = 4

Na penúltima fase os 3 primeiros arquivos conterão 1, 1 , 1
partições
Em geral, se em uma fase existem (a, b, c) partições,
na fase anterior existiam (a+b,a+c,a) partições
Após a intercalação são produzidos a partições,
sendo a = min (a+b ; a+c ; a)
43
Intercalação Polifásica (4)
O comportamento ótimo do processo ocorre
quando o número total de partições iniciais
pertence a uma série de Fibonacci
generalizada.
Ti  1 ........ i  F
;
Ti 
i 1

k i  F 1
Tk
........i  F
Para F = 4, os primeiros termos da série
são: 1 , 1 , 1 , 3 , 5 , 9 , 17 , 31 , 57 , ... .
44
Caso particular e caso geral
A intercalação polifásica pode ocorrer em
duas situações:
Caso particular mais favorável quando o
número de partições classificadas a intercalar
usando F arquivos pertence à Série de
Fibonacci de ordem F
 Caso geral quando o número de partições não
pertence àquela série

45
Algoritmo do caso particular
A partir do valor de F, busca-se a configuração final (1, 1, 1, ..., 1, 0) e
recupera-se as anteriores pelo esquema anteriormente exibido
a = min (a+b ; a+c ; a)
Para F = 4 o que se obtém é
46
Tabelas alvo e de vazios (1)
O algoritmo da distribuição das partições pelos F - 1
arquivos utiliza duas tabelas auxiliares, cada qual
com F colunas e sempre com última coluna contendo
o valor zero:


Tabela de alvos indicando quantas partições serão
necessárias para completar uma fase de distribuição de
partições entre os arquivos
Tabela de vazios indicando quantas partições poderão ser
gravadas em cada arquivo para completar a fase de
distribuição de partições corrente
47
Tabelas alvo e de vazios (2)
Tabela de alvos



A primeira linha, ou primeiro nível, da tabela de alvos de ordem 4 contém
1, 1, 1, 0 significando que, para ordem 4, se houver uma partição no
arquivo 1, uma partição no arquivo 2 e uma partição no arquivo 3 a
situação é ótima para a eficiência do método de intercalação polifásica
A soma dos elementos de cada linha pertence a uma série de Fibonacci de
ordem F, sendo para o primeiro nível o termo de ordem F, para o segundo
nível o termo de ordem F + 1 e assim sucessivamente
As tabelas alvo não são atualizadas nem consultadas diretamente durante o
distribuição de partições
Tabela de vazios


Para passar da tabela alvo de nível i para o nível i + 1 existe uma tabela de
diferenças ou tabela de vazios de nível i
As tabelas de vazios são consultadas e atualizadas controlando a
distribuição de partições
48
Ordem de Intercalação Polifásica (1)
De uma maneira geral, supondo F = 4 o quarto arquivo seria reservado
para obter o resultado das intercalações e a distribuição de partições
nos primeiro, segundo e terceiro arquivos seria a seguinte
Nível Tabelas
1
A 1,1,1,0
V 1,1,1,0
2
A 2,2,1,0
V 1,1,0,0
3
A 4,3,2,0
V 2,1,1,0
4
A 7,6,4,0
V 3,3,2,0
5
A 13,11,7,0
V 6,5,3,0
Ordem de gravação
1,2,3
1,2
1,1,2,3
1,2,1,2,3,1,2,3
1, 1, 2, 1, 2, 1, 2,3,1,2,3,1,1,1
49
Ordem de Intercalação Polifásica (2)
Nível Tabelas
1
A 1,1,1,0
V 1,1,1,0
2
A 2,2,1,0
V 1,1,0,0
3
A 4,3,2,0
V 2,1,1,0
4
A 7,6,4,0
V 3,3,2,0
5
A 13,11,7,0
V 6,5,3,0
Ordem de gravação
1,2,3
1,2
1,1,2,3
1,2,1,2,3,1,2,3
1, 1, 2, 1, 2, 1, 2,3,1,2,3,1,1,1
50
Caso Geral (1)
A melhor intercalação polifásica ocorre quando o número
de partições pertence a uma série de Fibonacci.
O algoritmo da distribuição das partições pelos F - 1
arquivos funciona em diversos níveis.


No primeiro nível, distribuem-se partições buscando uma tabela
alvo cuja soma de linhas pertence a uma série de Fibonacci (termo
de ordem F - 1)
No segundo nível a tabela alvo tem como soma da linha o termo da
ordem F da mesma série e assim sucessivamente
Para passar da tabela alvo de nível i para o nível i + 1
existe uma tabela de diferenças ou tabela de vazios de
nível i
51
Caso Geral (2)
A tabela de vazios é decrementada cada vez
que se grava uma partição nos arquivos de
entrada correspondentes.
Quando uma linha ou nível da tabela de
vazios só contém zeros é porque foi atingida
a linha correspondente da tabela alvo e
incrementa-se o nível da distribuição para o
prosseguimento do processo.
52
Exemplo – Intercalação Polifásica (1)
Considere-se a notação i x j representando i
partições e j registros
Em cada fase do algoritmo intercalam-se F1 arquivos até chegar ao final de qualquer
uma delas
Nesse ponto, interrompe-se a fase deixando
o restante dos arquivos
53
Exemplo – Intercalação Polifásica (2)
Instante
Inicialmente
Após fase 1
Após fase 2
Após fase 3
Após fase 4
Após fase 5
Arq1
13 X 100
6 X 100
2 X 100
--------1 X 1700
---------
Arq2
11 X 100
4 X 100
-------2 X 900
1 X 900
---------
Arq3
7 X 100
--------4 X 500
2 X 500
1 X 500
---------
Arq4
N. de leituras
---------------7 X 300
2100
3 X 300
2000
1 X 300
1800
-------1700
1 X 3100
3100
TOTAL
10700
10700
Nú merode passos 
 3,45
3100
54
Outro Exemplo – Intercalação
Polifásica (1)
Considere-se 20 partições
Como 20 não pertence à série de Fibonacci
generalizada (1, 1, 1, 3, 5, 9, 17, 31, ...),
acrescentam-se 11 partições vazias
Supõe-se ser possível manter abertos
simultaneamente 4 arquivos
55
Outro Exemplo – Intercalação
Polifásica (3)
Situação
Após a fase 4
(11 leituras)
Após a fase 5
(20 leituras)
Arquivo 1
PARTrgkabilpfhg
Partições nos arquivos
Arquivo 2 Arquivo 3
PARTsjmden
Arquivo 4
PARTotc
PARTabcdefghijklmnopqrst
Número de leituras = (10 + 9 + 12 + 11 + 20 ) / 20 = 62 / 20 = 3,1
56
Outro
Exemplo –
Intercalação
Polifásica (2)
Situação
Inicialmente
Arquivo 1
Arquivo 2
Arquivo 3
VAZIA
VAZIA
VAZIA
VAZIA
PARTa
PARTd
PARTf
PARTg
PARTj
PARTl
PARTo
PARTr
PARTs
VAZIA
VAZIA
VAZIA
VAZIA
PARTb
PARTe
PARTh
PARTk
PARTm
PARTp
PARTt
VAZIA
VAZIA
VAZIA
PARTc
PARTi
PARTn
PARTq
Após a fase 1
(10 leituras)
PARTg
PARTj
PARTl
PARTo
PARTr
PARTs
PARTk
PARTm
PARTp
PARTt
Após a fase 2
(9 leituras)
PARTr
PARTs
Após a fase 3
(12 leituras)
PARTrgkabi
PARTsjmden
Arquivo 4
VAZIA
VAZIA
VAZIA
PARTc
PARTabi
PARTden
PARTfhq
PARTgk
PARTjm
PARTlp
PARTotc
PARTabi
PARTden
PARTfhq
PARTlp
PARTotc
PARTfhq
57
Intercalação Polifásica
(Parte do algoritmo - distribuição)
vazios[ponteiro]  vazios[ponteiro] - 1
/* Geração e distribuição das demais partições pelos arquivos de trabalho */
i  i + 1
Abrir (arquivo = nome_do_array[i]) para leitura
Enquanto ((i≠ número_de_partições) e (não EOF(ent)))
/* Escolha do arquivo de gravação da partição corrente */
Se (vazios[ponteiro] < vazios[ponteiro +1])
então
/* Esta condição significa que o número de vazios referente ao arquivo
corrente está menor do que o número de vazios de seu sucessor e que, portante
as novas gravações de partições devam ocorrer em seu sucessor */
ponteiro  ponteiro+1
senão
Se (vazios[ponteiro] = 0)
então
/* Nesta situação não há mais vazios e deve-se mudar de
alvo */
nível  nível+1
temp  alvos[1]
Para
k variando de 1 até número_de_arquivos - 1
vazios[k]  temp+ alvos[k+1] - alvos[k]
alvos[k]  temp + alvos[k+1]
Fim do Para
Fim do Se
/* (vazios[ponteiro] = 0)
*/
ponteiro  1
/* as gravações iniciam-se no primeiro arquivo
*/
Fim do Se
/*
(vazios[ponteiro] < vazios[ponteiro +1])
*/
58
Intercalação Polifásica
(Parte do algoritmo - gravação)
/*
Geração de uma partição e gravação em arq[ponteiro]
*/
chave(auxiliar)  chave_válida
Repetir
Ler de (arquivo = nome_do_array[i])) auxiliar
Se (EOF(nome_do_array[i]))
então
chave(auxiliar)  HIGH_VALUE
Fim do Se
Gravar em (arquivo = arq[j]) auxiliar
até (chave(auxiliar) = HIGH_VALUE)
Fechar (arquivo = nome_do_array[i])
vazios[ponteiro]

vazios[ponteiro] - 1
i  i + 1
Abrir (arquivo = nome_do_array[i]) para leitura
Fim do Enquanto /* (i número_de_partições) e (não EOF(ent)) */
/* Fechamento dos arquivos que receberam as partições */
59
Intercalação Polifásica
(Parte do algoritmo - intercalação)
/*intercalação*/
Enquanto (nível > 0)
Repetir
* até EOF(arq[número_de_arquivos-1])) */
sem_vazios  0
Para
i variando de 1 até número_de_arquivos - 1
Se (vazios[i]) = 0
então
sem_vazios  sem_vazios +1
Fim do Se
Fim do Para
Se (sem_vazios = 0)
então
/* Todos os arquivos tem partições vazias
Para
i variando de 1 até número_de_arquivos-1
vazios[i]  vazios[i] - 1
Fim do Para
vazios[número_de_arquivos]  vazios[número_de_arquivos] + 1
/* A saída ganha partição vazia */
senão /* Existem arquivos com partições prontas para intercalar
Para
i variando de 1 até número_de_arquivos-1
Se (vazios[i])  0
então
vazios[i]  vazios[i] - 1
Fim do Se
Fim do Para
Fim do Se
*/
*/
60
Download

Classificação Externa