Class BalancedMergeSort
java.lang.Object
AEDs3.DataBase.BalancedMergeSort
Classe responsável por realizar a ordenação externa por intercalação
balanceada. Este algoritmo divide os dados em segmentos menores e utiliza
uma estrutura de heap (fila de prioridade) para realizar a intercalação
eficiente de grandes quantidades de dados que não cabem na memória RAM de uma
vez. A ordenação é realizada usando 2N arquivos temporários e o algoritmo de
intercalação balanceada.
A classe utiliza a classe TrackDB para ler e gravar os registros de
faixas de música, realizando a ordenação dos dados através de múltiplos
arquivos temporários.
A ordenação ocorre em duas fases: 1. Distribuição inicial dos registros em 2N arquivos temporários. 2. Intercalação dos arquivos temporários, ordenando os dados e escrevendo-os de volta no banco de dados.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final recordClasse auxiliar que agrupa uma Track com o índice do arquivo em que está, para uso com o PriorityQueue.private static classClasse auxiliar que agrupa uma Track com um peso, para uso com o PriorityQueue. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) TrackDBBanco de dados de faixas de música (TrackDB) a ser ordenado.(package private) intNúmero de caminhos (número de arquivos será o dobro).(package private) TrackDB[]Arquivos temporários onde os dados são armazenados durante a ordenação.(package private) intNúmero máximo de registros a armazenar no heap durante a intercalação.(package private) booleanIndica se estamos intercalando segmentos do grupo A (primeiro conjunto de N arquivos) para o grupo B (segundo grupo) ou vice-versa.(package private) booleanIndica se deve exibir em `System.err` os passos da execução durante a ordenação. -
Constructor Summary
ConstructorsConstructorDescriptionConstrutor que inicializa a ordenação com os parâmetros padrão.BalancedMergeSort(TrackDB db, int fanout, int maxHeapNodes) Construtor que inicializa a ordenação com parâmetros personalizados. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidDistribui os registros do banco de dados em 2N arquivos temporários.getDb()Retorna o banco de dados de faixas de música.intRetorna o número de caminhos (fanout) utilizado na ordenação.TrackDB[]getFiles()Retorna os arquivos temporários utilizados durante a ordenação.intRetorna o número máximo de registros a serem armazenados no heap durante a intercalação.booleanIndica se a intercalação está ocorrendo do primeiro grupo de arquivos.booleanIndica se a execução deve exibir passos detalhados no console.private TrackDBmerge()Intercala os registros de um grupo de N arquivos temporários no outro grupo.voidDefine o banco de dados de faixas de música.voidsetFanout(int fanout) Define o número de caminhos (fanout) utilizado na ordenação.voidDefine os arquivos temporários utilizados durante a ordenação.voidsetMaxHeapNodes(int maxHeapNodes) Define o número máximo de registros a serem armazenados no heap durante a intercalação.voidsetMergingFromFirstGroup(boolean grupo) Define se a intercalação deve ocorrer do primeiro grupo de arquivos.voidsetVerbose(boolean verbose) Define se a execução deve exibir passos detalhados no console.voidsort()Inicia o processo de ordenação do banco de dados utilizando o algoritmo de intercalação balanceada.
-
Field Details
-
db
TrackDB dbBanco de dados de faixas de música (TrackDB) a ser ordenado. -
files
TrackDB[] filesArquivos temporários onde os dados são armazenados durante a ordenação. -
fanout
int fanoutNúmero de caminhos (número de arquivos será o dobro). -
maxHeapNodes
int maxHeapNodesNúmero máximo de registros a armazenar no heap durante a intercalação. -
mergingFromFirstGroup
boolean mergingFromFirstGroupIndica se estamos intercalando segmentos do grupo A (primeiro conjunto de N arquivos) para o grupo B (segundo grupo) ou vice-versa. -
verbose
boolean verboseIndica se deve exibir em `System.err` os passos da execução durante a ordenação.
-
-
Constructor Details
-
BalancedMergeSort
Construtor que inicializa a ordenação com os parâmetros padrão.- Parameters:
db- O banco de dados a ser ordenado.
-
BalancedMergeSort
Construtor que inicializa a ordenação com parâmetros personalizados.- Parameters:
db- O banco de dados a ser ordenado.fanout- O número de caminhos N, onde o número de arquivos temporários será 2N.maxHeapNodes- O número máximo de registros a armazenar no heap.
-
-
Method Details
-
sort
Inicia o processo de ordenação do banco de dados utilizando o algoritmo de intercalação balanceada. O processo é feito em duas fases: distribuição dos registros e intercalação dos segmentos.Após a ordenação, o banco de dados original é substituído pelos dados ordenados, e quaisquer índices serão reconstruídos.
- Throws:
IOException- Se ocorrer algum erro de entrada/saída durante a execução.
-
distribute
Distribui os registros do banco de dados em 2N arquivos temporários. Utiliza um heap (PriorityQueue) para armazenar os elementos e realizar a distribuição de forma balanceada.- Throws:
IOException- Se ocorrer um erro de entrada/saída durante a distribuição.
-
merge
Intercala os registros de um grupo de N arquivos temporários no outro grupo. Este método realiza a intercalação balanceada, utilizando um heap para encontrar o menor registro entre os arquivos e escrevê-lo no arquivo de destino.- Returns:
- O banco de dados com os dados ordenados, ou
nullse a ordenação ainda não estiver completa. - Throws:
IOException- Se ocorrer um erro de entrada/saída durante a intercalação.
-
getDb
Retorna o banco de dados de faixas de música.- Returns:
- O banco de dados de faixas de música.
-
setDb
Define o banco de dados de faixas de música.- Parameters:
db- O banco de dados de faixas de música a ser definido.
-
getFiles
Retorna os arquivos temporários utilizados durante a ordenação.- Returns:
- Um array de arquivos temporários.
-
setFiles
Define os arquivos temporários utilizados durante a ordenação.- Parameters:
files- Um array de arquivos temporários a ser definido.
-
getFanout
public int getFanout()Retorna o número de caminhos (fanout) utilizado na ordenação.- Returns:
- O número de caminhos (fanout).
-
setFanout
public void setFanout(int fanout) Define o número de caminhos (fanout) utilizado na ordenação.- Parameters:
fanout- O número de caminhos (fanout) a ser definido.
-
getMaxHeapNodes
public int getMaxHeapNodes()Retorna o número máximo de registros a serem armazenados no heap durante a intercalação.- Returns:
- O número máximo de registros no heap.
-
setMaxHeapNodes
public void setMaxHeapNodes(int maxHeapNodes) Define o número máximo de registros a serem armazenados no heap durante a intercalação.- Parameters:
maxHeapNodes- O número máximo de registros no heap a ser definido.
-
isMergingFromFirstGroup
public boolean isMergingFromFirstGroup()Indica se a intercalação está ocorrendo do primeiro grupo de arquivos.- Returns:
truese a intercalação está ocorrendo do primeiro grupo, caso contráriofalse.
-
setMergingFromFirstGroup
public void setMergingFromFirstGroup(boolean grupo) Define se a intercalação deve ocorrer do primeiro grupo de arquivos.- Parameters:
grupo-truepara intercalar do primeiro grupo, caso contráriofalse.
-
isVerbose
public boolean isVerbose()Indica se a execução deve exibir passos detalhados no console.- Returns:
truese a execução deve ser detalhada, caso contráriofalse.
-
setVerbose
public void setVerbose(boolean verbose) Define se a execução deve exibir passos detalhados no console.- Parameters:
verbose-truepara exibir passos detalhados, caso contráriofalse.
-