Skip to content

jeanandersonhs/p-way-merge-sort

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Algorithm p-way merge sort

Este projeto apresenta uma implementação em Python do algoritmo de ordenação externa p-way merge sort. O algoritmo foi desenvolvido como parte dos requisitos da disciplina MATA54 - Algoritmos e Estrutura de Dados II, com foco em manipular arquivos que não cabem inteiramente na memória principal.

Funcionalidades

  • Ordenação Externa: Capaz de ordenar arquivos de tamanho arbitrário, superando as limitações da memória RAM.
  • Geração de Runs com Seleção por Substituição: As séries ordenadas iniciais (runs) são geradas eficientemente usando o método de seleção por substituição com um buffer em memória de tamanho p.
  • Intercalação Balanceada de p-vias: Múltiplas runs são intercaladas (merged) simultaneamente usando uma heap mínima, garantindo um processo de ordenação eficiente.
  • Uso de Arquivos Temporários: O processo utiliza arquivos temporários para armazenar as runs intermediárias, que são removidos ao final da execução.

Como Funciona

O algoritmo opera em duas fases principais:

  1. Geração de Runs Iniciais:

    • O arquivo de entrada é lido e p registros são carregados em uma heap mínima na memória.
    • O menor elemento da heap é removido e escrito em um arquivo de run temporário.
    • Um novo registro é lido do arquivo de entrada. Se for maior ou igual ao último elemento escrito, ele é inserido na heap. Caso contrário, é temporariamente "congelado" e será usado na próxima run.
    • Este processo continua, gerando múltiplas runs ordenadas em arquivos temporários.
  2. Intercalação das Runs (Merge):

    • As runs geradas na fase anterior são intercaladas em grupos de p.
    • Uma heap mínima é usada para selecionar o menor elemento entre as p runs abertas, escrevendo-o em um novo arquivo de saída temporário.
    • Este processo de intercalação é repetido em passagens, reduzindo o número de runs a cada passagem, até que reste apenas um único arquivo totalmente ordenado.

Como Executar

Executando no Replit (Recomendado)

Como Abrir o Shell no Replit

  1. Localizando o Shell:

    • Na interface do Replit, procure pela aba "Shell" na parte inferior da tela ou na barra lateral esquerda
    • Caso não esteja visível, clique no ícone de "Tools" (ferramentas) na barra lateral e selecione "Shell"
    • Alternativamente, você pode usar o atalho Ctrl + Shift + S (ou Cmd + Shift + S no Mac)
  2. Abrindo o Shell:

    • Clique na aba "Shell" para abrir o terminal
    • Você verá um prompt de comando similar a: ~/p-way-merge-sort$

Executando o Programa

  1. Navegue até o diretório do projeto:

    cd p-way-merge-sort
  2. Execute o programa com os parâmetros necessários:

    python3 pways_mergesort.py <p> <arquivo_de_entrada> <arquivo_de_saida>

Exemplo prático:

python3 pways_mergesort.py 3 input_file.txt output_file.txt

Executando Localmente

Pré-requisitos

  • Python 3.x

Instalação

  1. Clone o repositório:

    git clone https://github.com/jeanandersonhs/p-way-merge-sort
  2. Navegue até o diretório do projeto:

    cd p-way-merge-sort

Uso

Para executar o programa, utilize o seguinte comando no terminal:

python3 pways_mergesort.py <p> <arquivo_de_entrada> <arquivo_de_saida>

Parâmetros:

  • <p>: O número de caminhos (e o tamanho do buffer em memória) para o merge sort. Deve ser um inteiro maior ou igual a 2.
  • <arquivo_de_entrada>: O caminho para o arquivo de texto contendo os números a serem ordenados (um número por linha).
  • <arquivo_de_saida>: O caminho para o arquivo onde o resultado ordenado será salvo.

Exemplo:

python3 pways_mergesort.py 3 input_file.txt output_file.txt

Limpar saida e Executar novamente

Para executar novamente basta limpar o arquivo de saida(output_file.txt) por meio de

python clean.py

E assim pode ser refeito os passos de execução via shell

Formato da Saída

Ao final da execução, além de gerar o arquivo de saída ordenado, o programa exibirá estatísticas sobre o processo de ordenação no console:

#Regs  Ways    #Runs   #Parses
25      3       5       2
  • #Regs: Número total de registros processados.
  • Ways: O valor de p (caminhos) utilizado.
  • #Runs: O número de sequências ordenadas iniciais geradas.
  • #Parses: O número de passagens de intercalação necessárias para obter o arquivo final ordenado.

Desenvolvido por Jean Anderson Hugo Jesus Santos

About

External sort implementation with p-way-merge-sort

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy