Skip to content

littlebru/Estrutura-de-Dados

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Estrutura de Dados - Vale a Pena Ordenar?

Algoritmo desenvolvido

Os algoritmos desenvolvidos (EP1.py) e (EP1_timeit.py) tem por objetivo calcular o tempo que as funções de ordenação levam para ordenar listas de 5000, 10000 e 15000 elementos ou mais (dentro do tempo de 60 segundos de execução), e também calcular quantas buscas são realizadas durante a ordenação dos dados.

Obs: A versão do Python utilizada neste programa é 3.6


Bibliotecas utilizadas

import time

Biblioteca que auxilia no manuseio do tempo do sistema, neste programa foi utilizado o método time.time(), ele retorna o tempo em segundos e o método process_time() que retorna a soma do tempo de execução com o tempo de processamento,e os dois foram utilizados para marcar o tempo de execução de cada função de ordenação e de busca.

import math

Biblioteca que permite fazer calculos matematicos e funções de calculo de média por exemplo, neste programa ela foi utilizada para identificar o valor minimo dentro da lista, na função Seleção m = min(v)

import random

Biblioteca que permite a criação de numeros e listas compostas por numeros aleatórios, neste programa ele foi utilizado para gerar numeros aleatórios com o metodo randint e embaralhar a lista com o método shuffle.

Funções de Ordenação Utilizadas

Seleção

Realiza a ordenação de uma lista olhando apenas para a Direita, fazendo comparações de elemento por elemento.

Simulação da ordenação da função Seleção

Inserção

Realiza a ordenação de uma lista da Esquerda para a Direita, ou seja, pego o elemento da posição atual B e comparo com o elemento seguinte A, caso:

B < A (B for menor que A) -> B continua na mesma posição e eu comparo o próximo da lista com o elemento A
A < B (A for menor que B) -> A troca de posição com B e eu pego o próximo da lista e comparo com o B



Simulação da ordenação da função Inserção

MergeSort (dividir, misturar e Intercalar)

Realiza a ordenação de uma lista A utilizando um vetor auxiliar B, divide a lista em dois e ordena cada pedaço de forma individual, no final reune os dados, formando uma lista novamente tudo isso dentro do vetor B auxiliar, depois é enviado para o vetor original A.

Simulação da ordenação da função MergeSort

QuickSort

Realiza a ordenação de uma lista com a ajuda de um pivô ou numero de referência para auxiliar na ordenação.

Simulação da ordenação da função QuickSort

Sort Nativo

Função embutida da linguagem Python, realiza a ordenação de uma lista comparando os elementos de maior valor com os elementos seguintes.

Simulação da ordenação do método Sort

Funções de Busca

No programa também foram utilizados dois algoritmos de busca, para calcular quantas buscas são realizadas durante a ordenação das listas.

Busca Binária

Realiza a busca de um elemento dividindo a lista ao meio tendo o ponto maximo, o ponto minimo e o ponto médio (ou ponto central) que é o responsável por buscar o elemento procurado.


Simulação de buscas da função Busca Binária - Buscando pelo numero 714 na demonstração

Busca Sequencial

Realiza a busca de elemento em elemento dentro da lista, até encontrar o valor procurado.


Simulação de buscas da função Busca Sequencial - Buscando pelo numero 714 na demonstração

Observações

A função Seleção na teoria é a pior de todas, pois ela demanda muito processamento e tem um tempo de ordenação muito lento, porém no algoritmo, podemos visualizar que a Seleção esta tendo um tempo de execução e quantidade de buscas menores do que a Inserção.

Isto aconteceu porque no código a função Seleção utiliza uma estrutura auxiliar para procura do menor numero, no método min m = min(v), e a estrutura auxiliar utilizada é chamada de HEAP.

Min Heap ou Binary Heap

Simulação do heap máximo

O Heap Binário é um tipo de estrutura de dados utilizado para ordenar os elementos a medida que são inseridos na estrutura. Assim, ao final das inserções, os elementos podem ser sucessivamente removidos da raiz da heap, na ordem desejada.

  • Um heap binário é uma árvore binária mantida na forma de um vetor.

  • O heap é gerado e mantido no próprio vetor a ser ordenado.

Para uma ordenação crescente, deve ser construído um heap máximo (o maior elemento fica na raiz). Para uma ordenação decrescente, deve ser construído um heap mínimo (o menor elemento fica na raiz).

Bibliografia

  • Auxilio do Professor Fernando Masanori

Simulações

Pesquisas


Autora

Bruna Larissa Clemente Gomes
3º Semestre - Análise e Desenvolvimento de Sistemas-FATEC São José dos Campos 2020

Orientador

Fernando Masanori Ashikaga

About

🎲 Vale a Pena Ordenar ?

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages