Ir para o conteúdo
PyPro PyPro
Artigos Cursos Projetos Missão Sobre nós Contato

Dicas Pythônicas

Explorando Estruturas de Dados e Algoritmos com Python

Como utilizar a biblioteca algorithms para implementar e entender algoritmos comuns.

Por Dilermando Piva Jr. · 27/01/2025

Como implementar algoritmos manualmente e simplificar com a biblioteca algorithms

Olá, caro leitor! Seja muito bem-vindo a mais uma edição da Dicas Pythonicas.

No pyPRO, nosso compromisso é equipá-lo com ferramentas e conhecimentos para que você domine Python em profundidade. Hoje, vamos explorar um clássico da computação: o algoritmo Merge Sort. Veremos como implementá-lo manualmente (para entender sua complexidade) e, em seguida, como simplificar o processo usando a biblioteca algorithms.

 

Instalando a Biblioteca

A biblioteca algorithms oferece implementações prontas de algoritmos e estruturas de dados. Para instalá-la:

pip install algorithms

 

Implementando o Merge Sort Manualmente

O Merge Sort é um algoritmo de ordenação eficiente baseado na técnica "dividir e conquistar". Ele divide a lista em sublistas, ordena cada parte e depois as combina. Vamos implementá-lo passo a passo:

 

Passo 1: Função de Combinação (Merge)

A função merge recebe duas listas ordenadas e as combina em uma única lista ordenada:

def merge(esquerda, direita):

resultado = []

i = j = 0

# Compara elementos das sublistas e adiciona o menor ao resultado

while i < len(esquerda) and j < len(direita):

if esquerda[i] < direita[j]:

resultado.append(esquerda[i])

i += 1

else:

resultado.append(direita[j])

j += 1

# Adiciona os elementos restantes (se houver)

resultado.extend(esquerda[i:])

resultado.extend(direita[j:])

return resultado

 

Passo 2: Função Recursiva do Merge Sort

A função principal divide a lista em metades até que cada sublista tenha um elemento e depois as combina:

 

def merge_sort(lista):

if len(lista) <= 1:

return lista

meio = len(lista) // 2

esquerda = merge_sort(lista[:meio]) # Divide a lista

direita = merge_sort(lista[meio:])

return merge(esquerda, direita) # Combina as partes ordenadas

 

Usando a Implementação Manual

 

if __name__ == "__main__":

minha_lista = [1, 5, 9, 2, 6, 3]

lista_ordenada = merge_sort(minha_lista)

print(lista_ordenada) # Saída: [1, 2, 3, 5, 6, 9]

 

Simplificando com a Biblioteca algorithms

Agora que entendemos a complexidade por trás do Merge Sort, veja como é simples usar a implementação pronta da biblioteca:

 

from algorithms.sort import merge_sort

 

if __name__ == "__main__":

minha_lista = [1, 5, 9, 2, 6, 3]

lista_ordenada = merge_sort(minha_lista)

print(lista_ordenada) # Saída: [1, 2, 3, 5, 6, 9]

 

Por Que Isso Importa?

  • Aprendizado vs. Produtividade:
  • Implementar algoritmos manualmente é essencial para entender seu funcionamento.
  • No entanto, em projetos reais, usar bibliotecas otimizadas economiza tempo e reduz erros.
  • Vantagens da Biblioteca algorithms:
  • Oferece implementações testadas e eficientes de algoritmos como Quick Sort, Dijkstra e estruturas como grafos e árvores.
  • Ideal para estudos, pois você pode analisar o código-fonte das funções (repositório no GitHub).

 

Explore Mais

Que tal testar outros algoritmos? Experimente substituir merge_sort por quick_sort na biblioteca e compare os resultados!

 

from algorithms.sort import quick_sort

lista_ordenada = quick_sort([1, 5, 9, 2, 6, 3])

 

Espero que esta dica tenha esclarecido tanto a teoria quanto a prática por trás dos algoritmos. Na próxima edição, exploraremos estruturas de dados avançadas.

Até lá, continue codando e lembre-se: no pyPRO, cada linha de código é um passo para o próximo nível! 🚀

Um forte abraço,

 

Prof. Dr. Dilermando Piva Jr.
Idealizador do pyPRO
Visite: https://pypro.com.br para mais conteúdos sobre Python, Ciência de Dados e Git/GitHub.

← Voltar para artigos

pyPRO - Python para todos.

Instagram YouTube LinkedIn X (Twitter)