quarta-feira, 16 de julho de 2014

Estruturas de dados (definição)

Olá, nesse post irei falar um pouco mais sobre estruturas de dados.

No maravilhoso mundo da computação, uma estrutura de dados é um modo particular de armazenar e organizar dados em um computador de modo que possam ser usados com eficiência.
Existem diferentes tipos de estruturas para diferentes tipos de aplicação, enquanto algumas são bem simples, existem outras que são altamente especializadas que se destinam a tarefas específicas. Um exemplo das estruturas especializadas são as B-trees, que são particularmente indicadas para a implementação de bases de dados.
Estruturas de dados e algoritmos são temas fundamentais na computação, sendo utilizados nas mais diversas áreas do conhecimento e com os mais diferentes propósitos de aplicação. Sabe-se que algoritmos manipulam dados. Quando estes dados estão organizados de forma coerente, caracterizam uma estrutura de dados. A organização e os métodos para manipular essa estrutura é que lhe conferem singularidade e diminuição do espaço ocupado pela memória RAM, além de tornar o código-fonte do programa mais enxuto e simplificado.
Existem estruturas de dados homogêneas, por exemplo, vetores e matrizes, que são formadas pelo mesmo tipo de dado primitivo, e existem estruturas heterogêneas (registros) que são conjuntos de dados formados por tipos de dados primitivos diferentes em uma mesma estrutura.
As estruturas de dados podem transformar um problema que antes era enorme em um probleminha de fácil resolução.
Essas estruturas estão em constante desenvolvimento, mas, apesar disso, existem estruturas que são clássicas e se comportam como padrões. São elas os vetores e os arrays.


Esse post foi apenas uma leve explanação sobre estruturas de dados, já existem alguns posts mais específicos sobre tipos de dados no Blog.

Aqui estão alguns links sobre estruturas:
 Estruturas de Dados e os ponteiros da vida
Array
Lista encadeada
Lista Ordenada
___________________________________________________________
Qualquer dúvida deixe nos comentários que procurarei responder em breve.
___________________________________________________________
Fonte:Estrutura de dados

Técnicas de Projetos de algoritmos

Olá, nesse post irei falar um pouco sobre técnicas de projetos de algoritmos.

O que são Técnicas de Projetos de Algoritmos ?

São técnicas que compreendem os métodos de codificação de algoritmos de forma a acentuar sua complexidade, levando em conta a forma que determinado algoritmo chega a solução desejada.

Técnicas comuns são: 'Força Bruta' e a 'Divisão e conquista'.

Força Bruta:
A força bruta (ou busca exaustiva) é um algoritmo de uso geral que consiste em enumerar todos os possíveis candidatos de uma solução e verificar se cada um satisfaz o problema.
Ex.: Um algoritmo para encontrar os divisores de um número natural n é enumerar todos os números naturais de 1 a n e verificar para cada um se ele dividido por n resulta em resto 0;
Esse algoritmo possui uma implementação muito simples, e sempre encontrará uma solução se ela existir. Entretanto, seu custo computacional é proporcional ao número de candidatos a solução, que, em problemas reais, tende a crescer exponencialmente. Portanto, a força bruta é tipicamente usada em problemas cujo tamanho é limitado, ou quando há uma heurística usada para reduzir o conjunto de candidatos para uma espaço aceitável. Também pode ser usado quando a simplicidade da implementação é mais importante que a velocidade de execução, como nos casos de aplicações críticas em que os erros de algoritmo possuem em sérias consequências.

Divisão e conquista:
Esta técnica consiste em dividir um problema maior recursivamente em problemas menores até que o problema possa ser resolvido diretamente. Então a solução do problema inicial é dada através da combinação dos resultados de todos os problemas menores computados.
A técnica soluciona o problema em 3 técnicas: Divisão, conquista e combinação.
Problemas que utilizam esta técnica podem tirar proveito de máquinas com múltiplos processadores pois a fase de divisão em problemas menores proporciona uma divisão natural do trabalho. Cada um dos problemas menores obtidos pode ser calculado separadamente em um processador sem depender dos demais.
A solução por esta técnica também é eficiente no uso da memória cache pois ao final da fase de divisão grande parte dos dados necessários para a fase de combinação já estão disponíveis na cache proporcionando um acesso mais veloz aos dados. Porém o caráter recursivo das soluções acaba gerando um trabalho de processamento maior devido ao uso de chamadas recursivas e o uso da pilha de chamadas.


Bom, espero que tenha entendido, em breve postarei mais sobre o assunto. Qualquer dúvida deixe nos comentário que procurarei responder em breve.

Fonte:Técnicas de Projetos de Algoritmos

Arvores

Falemos agora sobre Arvores, mas não as que você caro leitor encontra na rua e sim as que vão reprovas muitos calouros de EC, CC e SI. Arvores são estruturas puramente recursivas (pode ser usado o paradigma
intuitivo, porem se torna complexo) recursividade poderia ser um tema bacana , quem sabe mais a frente, uma arvore é uma estrutura de dados vastamente utilizada seu conceito é de utilizar dados não homogêneo e os organizar (lembra os conceitos de Big Data né?) de modo a facilitar o seu armazenamento e por consequência busca de dados, mais a frente veremos que os SGBDs usam muito esse tipo de ED.

Árvores

Definição: É uma estrutura onde a relação entre seus elementos é de um para vários, também denominada estrutura hierárquica.

Uma árvore consiste em um conjunto de nós, tal que:
  • Existe um nó denominado raiz.
  • Os demais nós formam m (m >= 0) conjuntos onde cada um deles também é uma árvore.
Notações gráficas para representar árvores:

Aplicações de Árvores


Árvores podem ser usadas em diversos tipos de aplicações:
  • Aplicações onde é necessário recuperar informações rapidamente (SGBD)
  • Programas onde as informações têm que ser estruturadas de forma hierárquica.
  • Aplicações onde é necessário armazenar expressões matemáticas.
Para representar as expressões matemáticas A + B * 3 e (A + B) * 3 poderíamos usar as árvores A e B abaixo:


Fonte : http://200.17.141.213/~alberto/2012-2/ed1/aulas/arvores.htm

terça-feira, 15 de julho de 2014

Chef Watson with Bon Appetit

Achei uma publicação muito bacana da IBM para variar, bom se trata do usos de Big data na gastronomia, então já pensou chegar em um restaurante e seu pedido já estar na mesa sem você pedir? é isso mesmo "Chef Watson with Bon Appetit" se trata de uma aplicação que utiliza um conjunto de informações para traçar um perfil gastronômico de um cozinheiro para criar novas receitas, ratatouille que se cuide, segue o link : http://info.abril.com.br/noticias/ti/2014/06/app-para-supercomputador-watson-leva-big-data-para-a-gastronomia.shtml
o

segunda-feira, 14 de julho de 2014

Fila

Quem nunca se revoltou em passar horas e horas em filas? bom nesse caso fila é algo muito bom, continuando os conceitos de Estrutura de dados, vamos abordar um pouco de uma estrutura muito
importante, no caso fila, se trata de uma estrutura restrita onde os dados são armazenados seguindo a restrição que o primeiro a entrar é o primeiro a sair, ou seja existe concentos FIFO(first in first out), uma fila possui inicio e fim por consequência, sem mais delongas segue um material bacana sobre fila:
Fila

Definição: É uma lista na qual as inserções são feitas em uma extremidade chamada "cauda" ou "fundo", e as remoções são feitas na outra extremidade, chamada "cabeça" ou "frente".
Numa fila, o primeiro a entrar é o primeiro a sair. Esta política de acesso é denominada FIFO ("First In, First Out"). Ilustrando teríamos:


A tabela abaixo descreve as principais operações:
OperaçãoDescrição
InicializarCria uma fila vazia.
InserirInsere um elemento no fundo (cauda) da fila.
RetirarRetira um elemento que está na frente (cabeça) da fila.
FrenteRetorna o elemento que está na frente (cabeça) da fila.
VaziaIndica se a fila está vazia.
Há basicamente 2 formas de implementar uma fila:
  1. Usando uma lista encadeada:
    1. O elemento inserido é colocado no fim da lista (cauda).
    2. A retirada é feita no início (cabeça).
  2. Usando um array:
    1. há duas variáveis (Início e Fim) que indicam as extremidades da fila (cabeça e cauda).
    2. Ao retirar um elemento, isto é feito na posição Início.
    3. Ao inserir, o novo elemento é colocado na posição Fim + 1.
Fonte : http://200.17.141.213/~alberto/2012-2/ed1/aulas/listas_restritas.htm

sexta-feira, 4 de julho de 2014

Aplicações que usam Big Data

Olá pessoal, estamos ai mais uma vez falando sobre Big Data, naturalmente é uma revolução devido ao grande volume dados cujo a internet ou aplicação cujo efetue uma coleta de grande volume de dados, ou
seja trabalhar com diversos tipos de dados não estruturados, mas falamos muito e mostramos pouco então resolvi buscar algumas aplicações que usam Big Data e acabei encontrando uma publicação bacana do Olhar Digital então segue ai o link aproveitem e botem a cabeça para pensar. link : http://olhardigital.uol.com.br/pro/video/39376/39376
Fonte : http://olhardigital.uol.com.br/

quarta-feira, 2 de julho de 2014

Lista Restrita.

Agora vamos falar um pouco listas restritas, nesse caso falaremos de pilhas, o que é uma pilha ? a noção básica de pilha é que os últimos serão os primeiros e os primeiros serão os últimos, pensando desse modo como se retira o primeiro prato colocado em uma pilha de pratos, sabendo que foram colocados 10 pratos acima deste?, intuitivamente vamos ter que retirar os 10 pratos para enfim chegar ao prato alvo ou o primeiro prato, outro exemplo é o seu navegador que é uma estrutura de dados que usa de uma pilha para os botões e voltar ou avançar, então porque restrita? exatamente devido a ordem na qual são adicionados
os meus elementos tudo somente pode ser feito por meio do topo, onde retiramos ou colocamos itens.

Pilha

Definição: Uma pilha é uma lista em que as operações de inserção e remoção são feitas na mesma extremidade da lista, conhecido como topo da pilha.
Esta restrição de acesso (ou disciplina) que caracteriza a pilha é denominada LIFO, abreviação de "Last In First Out", isto é, o último a entrar será o primeiro a sair.
Graficamente temos:


A tabela abaixo descreve as principais operações:
OperaçãoDescrição
InicializarExecuta as ações necessárias para aprontar a pilha.
EmpilharColoca um elemento no topo da pilha.
DesempilharRemove o elemento que está no topo da pilha.
TopoRetorna o elemento que está no topo da pilha.
VaziaIndica se a pilha está vazia.
Há basicamente 2 formas de implementar uma pilha:
  1. Usando uma lista encadeada: o elemento inserido é colocado na cabeça da lista.
  2. Usando um array: o elemento inserido é colocado na posição nº de elementos + 1.




fonte : http://albertocn.sytes.net/2010-2/ed1/aulas/listas_restritas.htm