Fala, pessoal! Beleza? Esse é o segundo artigo da nossa série que navega pelos fundamentos da programação. No primeiro artigo falei sobre algoritmos e lógica de programação, conceitos e aplicações. Então neste artigo iremos nos aprofundar um pouco em um dos assuntos mais importantes da programação: as famosas estruturas de dados.
Primeiro, vamos entender o conceito de dados. Para isso, vamos diferenciar alguns conceitos que muitas vezes nos confundem: Dado, informação e conhecimento.
Dados
Dados são representações de fatos. São como uma simples observação do mundo. Geralmente são representados por letras (a-z, A-Z), números (0-9) ou caracteres especiais (+,-,/,*,<,>,= etc.). Para entender melhor, observe a imagem abaixo:
Após rápida análise da imagem, quais são os dados que podemos extrair?
- São bolas;
- Quantidade de bolas;
- Utilizadas para jogos de bilhar;
- Cores;
- Números;
- Padrão de pintura (Cheia ou listrada);
- Tamanho.
Os dados podem ser categorizados em qualitativos e quantitativos. Dados qualitativos são os que atribuem qualidade. Por exemplo: as cores das bolas, a finalidade (jogos de bilhar), o número impresso, se são bolas novas ou usadas e etc. Já os dados quantitativos são aqueles que podem ser mensurados. Por exemplo: quantidade de bolas, tamanho, peso, densidade, preço e etc.
Porém, os dados por si só não dizem muita coisa. Precisamos interpretar, contextualizar e comparar para só então transformarmos os dados em informação.
Informação
A transformação de dados em informação se dá em etapas. Como citei acima, primeiro precisamos contextualizar e interpretar os dados. Em seguida, podemos transformar os dados em informações. Como fazemos isso? Observe:
Vamos comparar os dados observados na imagem com a definição de um conjunto oficial de bolas de bilhar.
Um conjunto oficial de bolas de bilhar é composto por 16 (dezesseis) bolas com 52 (cinquenta e dois) milímetros de diâmetro, sendo 1 (uma) toda branca e sem número e 15 (quinze) numeradas de 1 (um) a 15 (quinze) sendo as 8 (oito) primeiras com pintura cheia e as 7 (sete) últimas listradas.
Os dados acima estão apresentados de maneira estruturada, são informações. A diferença é sutil porém determinante:
- Diâmetro da bola: 52mm (Dado quantitativo).
- Diâmetro das bolas oficiais de bilhar: 52mm (Informação).
Conseguiram observar a diferença? Então podemos concluir que a informação é o dado contextualizado e/ou interpretado.
Ótimo! Agora já sabemos o que são dados e informações. Então, como chegamos ao conhecimento?
Conhecimento
Conhecimento nada mais é do que a junção dos dados com as informações. Como assim? Vou explicar melhor:
Eu sei que as bolas da imagem têm 52mm de diâmetro (dado), sei também que as bolas oficiais de bilhar têm 52mm de diâmetro (informação), então o conhecimento é afirmar que as bolas da imagem podem ser bolas oficiais de bilhar!
Unindo os dados apurados na imagem com a definição do conjunto oficial de bolas de bilhar, podemos chegar ao conhecimento: as bolas da imagem formam um conjunto oficial de bolas de bilhar. Então poderemos aplicar nosso conhecimento na prática jogando uma partida!
Análise de Dados
Vocês já devem ter se deparado com captchas de reconhecimento de imagens como este:
Esse tipo de ferramenta serve para detectar se a operação realizada está sendo feita por um humano ou por uma máquina. Quando vi pela primeira vez pensei:
“Ô besteira! Até parece que uma máquina não sabe que essa aqui é uma loja e essa uma casa…”
Daniel Lucas, o enganado.
Para nós, humanos, é uma tarefa simples identificar as fachadas de lojas nas imagens acima, mas para as máquinas nem tanto. Com as experiências vividas nós adquirimos a capacidade de reconhecer padrões. No caso acima nós sabemos que lojas geralmente têm banners em suas fachadas, portas largas, cores diferenciadas, estrutura peculiar…
No entanto, para os computadores essa definição não é tão clara e os padrões não são naturais como são para o ser humano. Por quê? A resposta é simples.
Essas imagens são estruturas de dados, ou seja, dados estruturados em forma de imagem. Têm padrões, cores, formas, representam objetos do mundo real… No entanto as máquinas têm mais facilidade para entender algumas estruturas de dados em detrimento de outras.
O que são estruturas de dados?
Com isso em mente, podemos concluir que estruturas de dados são as formas como organizamos os dados. Algumas formas são mais legíveis para as máquinas, outras são mais intuitivas para os humanos.
Existem diversas estruturas de dados utilizadas na programação, as quatro principais são: Listas e suas variações (filas, pilhas, deques, listas circulares…), Árvores e suas variações (binárias, binárias de busca, não binárias…), Grafos, Tabelas Hash, que são largamente utilizadas na implementação de aplicações. Exemplificando:
- Listas: Processos executados em um sistema operacional (fila); chamadas de funções num interpretador de código (pilha); cartas em um jogo de baralho (variação de deque).
- Árvores: Aplicativos de pesquisa com entrada constante de dados (Árvores binárias); algoritmos de compactação de dados.
- Grafos: Redes sociais; algoritmos de sugestão de conexões; algoritmos de cálculo de relacionamentos (professores, disciplinas); aplicações voltadas para distribuição de malha elétrica.
- Tabelas Hash: Algoritmos de movimentação de personagens em jogos; bancos de dados; implementação de compiladores.
É fundamental conhecer essas estruturas e entender como funcionam. Pensando nisso, os próximos artigos serão sobre as principais estruturas de dados. Explicarei detalhadamente e com mão na massa, implementando cada uma de maneira simples para que possamos entender como funcionam computacionalmente.
Bons estudos!