Back-End

23 out, 2013

Visualizando algoritmos

Publicidade

CapaiMastersVisualizandoAlgoritmos

Olá, pessoal! Neste artigo vou abordar um tópico relacionado à programação que pouca gente aborda: a visualização de algoritmos. Este assunto é importante, pois ele pode ajudar a compreensão e o entendimento de novos algoritmos por quem está começando a aprendê-los e sente dificuldade de compreender como certos algoritmos funcionam. Além disso, a visualização de algoritmos pode agir como um ótimo motivador para o aprendizado.

Antes de começar a falar sobre o assunto do artigo, gostaria de aproveitar esta oportunidade e divulgar um curso online que lancei recentemente pelo iMastersPro. É o curso básico de lógica de programação voltado para o ensino das habilidades necessárias para quem quer se tornar um desenvolvedor. Acredito que muitos leitores do iMasters já possuem estas habilidades (definições de algoritmos, estruturas de controle, pseudocódigo, etc), contudo, a cada dia novas pessoas estão entrando na área, querendo aprender a programar. Este conteúdo é para elas, pois a linguagem utilizada no curso é simples e o conteúdo não se prende a detalhes de nenhuma linguagem de programação específica. Destaco também que este é um curso introdutório e que geralmente é recomendado como pré-requisito para outros cursos.

Voltando a falar sobre o tema do artigo, quando estamos aprendendo novos algoritmos geralmente passamos por algumas fases importantes. É comum começar com o correto entendimento do problema que o algoritmo se propõe a resolver. Neste ponto já começamos a compreender melhor o contexto e nos acostumar com certas terminologias, conceitos, métricas e algumas informações que vão nos ajudar a criar as variáveis, a lógica do algoritmo e como tratar as entradas e saídas.

A apresentação do algoritmo em si pode ser realizada de diversas maneiras. Alguns professores optam por apresentar diretamente uma fórmula matemática. Por exemplo, o algoritmo de mineração de dados utilizado para classificar dados em clusters k means pode ser apresentado como a fórmula abaixo.

Representação matemática do algoritmo K-means
Representação matemática do algoritmo K-means

Outra representação comum é apresentar o algoritmo em pseudo código, como o exemplo abaixo que descreve o mesmo algoritmo k-means.

Pseudo código do algoritmo de clusterização K-means
Pseudo código do algoritmo de clusterização K-means

Estas duas representações são relativamente abstratas e alguns alunos, especialmente aqueles que preferem informações visuais, podem ter dificuldade para compreensão. Nestes casos é comum apresentar alguns passos de execução de um algoritmo como imagem, como a figura abaixo que mostra o algoritmo Apriori para geração de regras de associação.

Representação gráfica de alguns passos do algoritmo Apriori
Representação gráfica de alguns passos do algoritmo Apriori

Outro recursos que vem se tornando muito interessante é o uso de animações no formato GIF animado para apresentar certos passos de execução do algoritmo. Sim, elas podem ser utilizadas para fins didáticos além de representar sentimentos de situações, comentários sarcárticos ou poses de gatos.

Apesar de serem muito interessantes, elas se baseiam em uma representação visual de um exemplo e de como apenas certos passos do algoritmo vão agir sobre o que está armazenado nas estruturas de dados empregadas. Abaixo apresento alguns bons exemplos de gifs animados que podem auxiliam muito quem está aprendendo um novo algoritmo.

 

Animação do algoritmo A*
Animação do algoritmo A*
epresentação do funcionamento do algoritmo MergeSort do SQL Server
Representação do funcionamento do algoritmo MergeSort do SQL Server

 

Algoritmo Fortune para gerar mapas de Voronoi
Algoritmo Fortune para gerar mapas de Voronoi
Representação dos dados no algoritmo QuickSort
Representação dos dados no algoritmo QuickSort
Outra representação dos dados do algoritmo QuickSort
Outra representação dos dados do algoritmo QuickSort
Problema TSP com algoritmo BranchAndBoud
Problema TSP com algoritmo BranchAndBoud
Funcionamento do algoritmo InsertionSort
Funcionamento do algoritmo InsertionSort

 

Animação que mostra como gerar números primos com o algoritmo Crivo de Erastóstenes
Animação que mostra como gerar números primos com o algoritmo Crivo de Erastóstenes

 

Percorrendo um grafo como algoritmo Breadth-First Search
Percorrendo um grafo como algoritmo Breadth-First Search

 

Percorrendo um grafo com o algoritmos Depth-First Search
Percorrendo um grafo com o algoritmos Depth-First Search

Outra abordagem é tentar alguma representação física do algoritmo, tal como uma dança ou mesmo algum tipo de jogo onde pessoas representam certas partes da lógica envolvida no algoritmo. Os vídeos abaixo mostram exemplos desta técnica que geralmente é aplicada para ensinar algoritmos básicos para crianças ou pessoas com pouco conhecimento e experiência em programação.

Seguindo pela linha artística, o conceito de Algorithmic Art  aborda a geração de arte através de algoritmos. Esta ideia não é muito útil para o ensino/aprendizado do funcionamento de algoritmos, porém pode ser utilizada como inspiração. Sem contar que o resultado é visualmente interessante. Abaixo são mostrandos alguns exemplos de Algorithmic Art.

Arte gerada com o 2D Polygon Subdivision Algorithm

InfineteKnot5

Blue recursive

Há também exemplos de uso de algoritmos na arquitetura e na música.

Exemplo de arquitetura de acordo com o algoritmo para mapas deVoronoi

Um algoritmo gerou esta visualização da música Singin’ in the Rain do Gene Kelly
Um algoritmo gerou esta visualização da música Singin’ in the Rain do Gene Kelly

A exploração de algoritmos para visualização de dados também é algo que vem ganhando muito destaque altualmente na área artística. Um exemplo é a exposião de arte que contém apenas obras geradas a partir da utilização do algoritmo que gera treemaps.

Blooming Businesses

De qualquer maneira, quem está começando a aprender o algoritmo e não possui algum contato com o contexto incluindo detalhes do problema, lógica, passos da solução, variáveis, entradas e saídas vai encontrar alguma dificuldade quando se deparar com qualquer uma destas formas didáticas de se apresentar um novo algoritmo e também algum programa, isto é, a implementação do algoritmo em alguma linguagem de programação. Desde modo, procurar outras maneiras de visualizar um algoritmo pode servalgo motivador,  interessante e útil, especialmente entre pessoas que estão começando a programar.