Você está na página 1de 6

Fitas

Resumo. Este trabalho tem como objetivo elaborar um programa capaz de


ordenar URLs através de sua popularidade, armazenando dados em memória
secundária.

1. Introdução
Para muitas finalidades web e externas, é necessário que sites sejam ordenados através
da sua popularidade, ou seja, o número de visitas que aquele link recebe. O tratamento
de dados para esta ordenação pode ser feito de várias formas, neste caso, através da
leitura de um arquivo com vários sítios e a popularidade de cada um.
Uma vez que pode-se trabalhar com muitos sites, fica inviável armazenar todos
os dados na memória principal do dispositivo, dessa forma, surge a necessidade de
utilizar a memória secundária, com mais disponibilidade de armazenamento para estas
informações. Nesta solução, é gerado um arquivo de texto com os sites recebidos
ordenados, seguidos da sua respectiva quantidade de acessos.
2. Método
O programa foi feito com a implementação de 3 classes, sendo elas e seus respectivos
métodos:

Sabará
2023
● Fitas
É a principal classe do programa, contém o método main e recebe os argumentos
para os métodos do programa. Além disso, essa classe é responsável por chamar
o método de ordenação e realizar a intercalação das fitas no arquivo de saída.
- Método main: Recebe como parâmetros o arquivo de entrada, a fita de
saída e a capacidade de memória, chamando os métodos de ordenação e
intercalação.
- gerarFitasOrdenadas: Este método percorre as linhas do arquivo de
entrada, chamando os métodos da classe ManipularArquivo para
escrever os arquivos de fita.
- ordenarArquivo: Chama o QuickSort para realizar a ordenação das
entidades conforme sua popularidade.
- intercalarFitas: É o método que intercala as fitas dos arquivos de fita
gerados, inserindo as entidades no heap, após isso, insere a maior
entidade na fita de saída, de forma que fique ordenada de forma
decrescente.
- maiorHeap: Verifica o maior valor do heap para o método Intercalar.
● Entidades
A classe Entidades foi criada com intuito de representar as urls e suas
respectivas visitas em um objeto. Essa classe implementa a interface
Comparable, para auxiliar na ordenação das entidades.
- Método construtor: Recebe um string contendo o link do site e um valor
inteiro com o número de visitas.
- Método compareTo: Função utilizada para auxiliar na ordenação das
entidades sobrescrita da interface Comparable. A ordenação é feita pelo
número decrescente de visitas, caso o número de visitas seja igual entre
duas entidades é ordenado pela ordem alfabética do link.

● ManipularArquivo
A classe ManipularArquivo é responsável por todo o manejo e as modificações
nos arquivos, realizando a leitura e escrita dos arquivos que o programa
trabalha, além de criar os arquivos de fita.
- escreverFita: Cria o arquivo de fita, após isso, escreve as entidades nele.
- lerArquivo: Método que lê o arquivo gerado linha por linha, chamado o
método escreverFita para escrever essas linhas no arquivo fitas-n.
- quantidadeLinhas: Retorna a quantidade de linhas contidas no arquivo
lido.
- arquivoVazio: Este método verifica se o arquivo fita que está sendo lido
é vazio.
Diagrama de Classes:
3. Análise de complexidade
● gerarFitasOrdenadas:
- Complexidade de tempo: este método percorre todas as linhas do
arquivo de entrada O(n). Ao atingir o limite da capacidade da
memória, faz uma chamada para o método escreverFita(), que por
sua vez tem a complexidade O(1). Portanto a complexidade é O(n)
sendo n a quantidade de linhas do arquivo de entrada.
- Complexidade de espaço: esse método acessa o disco para ler o
arquivo de entrada e gravar as fitas no disco, sendo assim podemos
concluir que ele tem complexidade de espaço O(n) sendo n a
quantidade de fitas geradas.

● lerArquivo:
- Complexidade de tempo: este método percorre as n linhas escritas
na fita, que são respectivamente o tamanho da memória no pior
caso. Quando lidas, chama o método escreverFita() com
complexidade O(1). logo podemos definir que é a complexidade é
O(n) sendo n o tamanho da memória.
- Complexidade de espaço: esse método faz dois acessos ao disco, o
primeiro para acessar a fita e o segundo para regravar a fita. Sendo
assim tem complexidade de espaço O(1).

● intercalarFitas:
- Complexidade de tempo: esse método percorre todos as entidades
presentes nas fitas, para cada entidade faz uma chamada para
maxHeapInserir que tem complexidade O(1), além disso faz
chamada para outros dois métodos: lerArquivo e escreverFita,
ambos com complexidade O(1), portanto a complexidade de tempo
do método é O(n) sendo n a quantidade total de entidades.
- Complexidade de espaço: o método faz uma chamada no método
lerArquivo toda vez que houver uma entida na fita para ser lida O(n),
além disso, necessita fazer uma verificação se o arquivo está vazio
O(n), por fim, chama o método escreverFita que tem a complexidade
O(1). Portanto, a complexidade de espaço é O(n2) sendo n a
quantidade de entidades.
● ordenarArquivo:
- A complexidade de tempo do Collections.sort() é O(n*log(n)).
- A complexidade de espaço do Collections.sort() é O(1).

4. Conclusão
Na realização deste trabalho, foi entendido o funcionamento básico da extração de
dados, que poderia ser utilizado, por exemplo, em uma plataforma de Web Analytics,
com volume pequeno de informações, mas com a gravação em memória secundária. Foi
necessário entender também a geração de URLs do gerador de carga e desenvolver uma
forma de leitura e tratamento dos dados do arquivo gerado.
Após entender os métodos contidos na documentação do professor, foi preciso
implementá-los, abstraindo as informações para o funcionamento do código. Entender a
etapa da ordenação e geração das fitas foi importante para entender melhor o
funcionamento da estrutura de ordenação, já estudado em sala.
No processo final, de intercalar as fitas, foi necessário um trabalho mais extenso
para implementação, visto que é um método mais complexo. Nesse sentido, também foi
interessante o fato deste TP nos remeter a história da computação, referenciando os
vanguardistas da programação e uma época na qual espaço em memória era um recurso
muito escasso.

5. Apêndice
O Programa funciona passando como argumentos um arquivo txt com as URLs e
suas popularidades, o arquivo de saída e a capacidade de memória. Segue
exemplo da configuração Run na IDE IntelliJ com capacidade de memória 2:

Exemplo no Visual Studio Code, com os mesmos parâmetros:

Você também pode gostar