Você está na página 1de 4

Uma estrutura de dados é uma maneira sistemática de organizar e acessar

dados.

Um algoritmo é um procedimento passo a passo para realizar alguma tarefa


em um tempo finito.

Os algoritmos e as estruturas de dados são elementos fundamentais para a


construção de software.

Algoritmo: Sequência finita e ordenada de


instruções necessárias para a resolução
de um problema bem formulado, possível
de ser implementado em computador,
que sempre termina num determinado
período de tempo, produzindo o resultado
ou indicando a impossibilidade de
obtenção do mesmo.
Estruturas de Dados: forma ou processo
de guardar informação

Algoritmos são métodos para resolver problemas


problemas têm dados
 dados são tratados (neste contexto)
computacionalmente
 O Processo de organização dos dados pode
determinar a eficiência do algoritmo
 algoritmos simples podem requerer estruturas de
dados complexas
 algoritmos complexos podem requerer estruturas de
dados simples
 Para maximizar a eficiência de um algoritmo as
estruturas de dados utilizadas têm de ser projetadas
em simultâneo com o desenvolvimento do algoritmo
Tempo de execução: É o tempo levado por um algoritmo para processar uma série de operações
sobre uma estrutura de dados. Se o mesmo for implementado pode-se fazer isto utilizando uma
cronometragem simples sobre a execução real do programa. Porém, esta medida apesar de
simplesmente obtida não é de muita representabilidade quais os elementos envolvidos na
execução, que podem variar muito (processador, memória, sistema operacional, linguagem de
programação, etc.). Desta forma, utilizaremos uma medida teórica aplicada sobre o algoritmo
chamada de:
Complexidade: Visa definir a expressão matemática que expressa a quantidade de passos
gastos por um algoritmo para resolver um certo problema em relação ao tamanho da entrada.
A complexidade mede o tempo relativo de execução e/ou uso da memória. Uma análise da
complexidade de um algoritmo pode-se focar em uma série de especificações quanto sua
execução e/ou uso da memória, como o melhor caso possível, o que, em até mesmo o caso
médio. Da mesma maneira pode-se desejar a complexidade total (ou real) apenas a
complexidade assintótica.
■ Outras observações:
A análise de algoritmos é uma atividade que contribui para o entendimento fundamental da
Ciência da Computação. A construção de um algoritmo deve visar não apenas à solução de um
determinado problema, mas à construção de um algoritmo bom, ou seja, que solucione o
problema e seja eficiente. Conhecer a complexidade de um algoritmo é importante para poder
decidir se a implementação do algoritmo é viável.
A complexidade de algoritmos consiste na quantidade de trabalho necessária para a sua
execução, expressa em função das operações fundamentais, as quais variam de acordo com o
algoritmo, e em função do volume de dados. As operações fundamentais são aquelas que, dentre
as demais operações que compõe o algoritmo, expressam a quantidade de trabalho.
Uma das mais importantes medidas de complexidade de algoritmos é a medida de tempo. Isto se
justifica em razão de boa parte da pesquisa em Ciência da Computação consistir do projeto e
análise de algoritmos em relação à eficiência, ou seja, projetar algoritmos que forneçam a
solução do problema em tempo aceitável.
Existem duas principais medidas de complexidade tempo de algoritmo: complexidade no pior
caso e complexidade média. A análise da complexidade de um algoritmo é realizada, usualmente,
de maneira muito particular, já que a complexidade é uma medida que tem parâmetros bem
particulares ao algoritmo. Apesar disto alguns conceitos são gerais, no sentido que só dependem
da estrutura do algoritmo.
Quando existe mais de um algoritmo para a resolução de um mesmo problema é necessário que
o analista possa identificar qual dos algoritmos é o mais indicado, seja em termos de precisão ou
tempo de execução Neste momento uma metodologia que auxilie no processo de análise seria o
mais indicado para que o analista pudesse fazer, com boa margem de segurança, a melhor
escolha. É importante salientar que a comparação de algoritmos para resolver um mesmo
problema deve-se passar no âmbito de algoritmos que tenham mesmas operações fundamentais
e mesma função de tamanhos do problema.

Em ciência da computação, a análise de algoritmos tem como função determinar os


recursos necessários para executar um dado algoritmo. A maior parte dos algoritmos são
pensados para trabalhar com entradas (inputs) de tamanho arbitrário. Em geral, a
eficiência ou complexidade de um algoritmo é função do tamanho do problema, do
número de passos necessário (complexidade temporal) e da complexidade espacial ou
de memória do sistema usado para executar o algoritmo. Esta disciplina faz parte da
mais vasta teoria da complexidade computacional, que permite fazer estimativas quanto
aos recursos necessários para que um algoritmo resolva um determinado problema
computacional.

Assim, o objetivo final não é apenas fazer códigos que funcionem, mas que sejam
também eficientes. Para isso, deve-se estudar alguns tipos de problemas que podem ser
resolvidos computacionalmente. Em seguida, deve ser visto como a abordagem adotada
para resolver pode influenciar, levando a um algoritmo mais ou menos eficiente.

"Ao verificar que um dado programa está muito lento, uma pessoa prática pede uma
máquina mais rápida ao seu chefe. Mas o ganho potencial que uma máquina mais
rápida pode proporcionar é tipicamente limitado por um fator de 10, por razões
técnicas ou econômicas. Para obter um ganho maior, é preciso buscar melhores
algoritmos. Um bom algoritmo, mesmo rodando em uma máquina lenta, sempre acaba
derrotando (para instâncias grandes do problema) um algoritmo ruim rodando em uma
máquina rápida. Sempre."
Comportamento Assintótico - Na análise do comportamento assintótico de um algoritmo ou
função, foca-se na análise dos elementos representativos do tratamento do problema,
descartando-se assim valores que seriam constantes no problema, independentes da entrada.
Nota do professor: Tipicamente nossas análises de complexidades envolverão o estudo
assintótico do pior caso para a execução do programa.

GOODRICH, Michael T. e TAMASSIA, Roberto. Projeto de Algoritmos:


fundamentos, análise e exemplos da internet. São Paulo: Bookman, 2002.

LOPES, Arthur Vargas. Estrutura de dados para a construção de software.


Canoas: Ulbra, 1999.

http://www.cassao.eti.br/portal/complexidadeNaMedidaDoTempo

http://inf.unisul.br/~ines/analise/AnaliseAlgoritmos_INES.pdf

http://kdbio.inesc-id.pt/~atf/GFB/PDFs/Analise.pdf

http://ltodi.est.ips.pt/atai/index_files/Analise%20de%20Algoritmos.ppt

www.sergio.oliveira.nom.br/apostila-complexidade.pdf

http://www.gbdi.icmc.usp.br/system/files/slides-nocoes-analise-algoritmos.pdf

http://wiki.di.uminho.pt/twiki/pub/Education/Archive/AlgoritmosComplexidade/AC-
cap2.pdf

http://www.claudino.unifei.edu.br/CCO410/CCO41001.pdf

http://pt.wikipedia.org/wiki/An%C3%A1lise_de_algoritmos

http://www.deinf.ufma.br/~acmo/grad/ED_complexidade_2005.pdf

http://dinobrasilis.pro.br/notac1.pdf

http://www.cassao.eti.br/portal/comportamento-assintotico

http://www.munif.com.br/munif/arquivos/OrdemOmega.pdf?id=73

http://br.monografias.com/trabalhos/algoritmos-primero/algoritmos-
primero2.shtml#_Toc146540893

http://algoritmos.tiagomadeira.net/categoria/basico-sobre-algoritmos-e-logica/page/2

http://www.infotem.hpg.ig.com.br/tem_progr_ancomplex.htm