Вы находитесь на странице: 1из 22

Ps-Graduao em Cincias da Computao

Anlise de Algoritmos e Estrutura de Dados

UFABC
Universidade Federal do ABC

Aula de apresentao

Prof. Andr G. R. Balan


andre.balan@ufabc.edu.br
Aulas
Tera 16:00 - 18:00 L704A
Quinta 16:00 - 18:00 L704A

Total
24 aulas (48 horas)
Introduo
Um algoritmo procedimento computacional bem
definido que toma um conjunto de valores como
entrada e produz algum valor ou conjunto de
valores como sada. (Cormen et al. Algoritmos Teoria
e Prtica)

Entrada Algoritmo Sada


Introduo
O algoritmo uma ferramenta para resolver um
problema computacional

Exemplo: Vamos definir formalmente o problema da ordenao

Entrada: Uma sequncia de nmeros <a1,a2, ..., an>


Sada: Uma permutao <a1, a2, ..., an> tal que ai ai+1
para i = (1, 2, ..., n-1)
Introduo
Existem diversos algoritmos que resolvem o
problema da ordenao, por exemplo.
BubleSort, SelectSort, HeapSort, QuickSort, MergeSort,
ShellSort

Um algoritmo dito correto se:


Para qualquer entrada vlida, em algum momento ele para e retorna
a sada desejada (correta)
Um algoritmo incorreto pode: 1) no parar para alguma entrada ou
2) retornar uma sada indesejada para alguma entrada.
Introduo
Por que so propostos vrios algoritmos para
resolver o mesmo problema?
Introduo
Resposta:
Quem prope um novo algoritmo para resolver um problema
que j resolvido por outro algoritmo, procura oferecer um
algoritmo melhor (?)
Introduo
Mas o que significa um algoritmo ser melhor que
outro?
Introduo
Resposta:

um algoritmo pode ser melhor que outro quando:


Ele resolve o problema mais rapidamente

Ele resolve o problema consumindo menos recursos:


memria,

transferncia de dados (entre o disco, entre outro computador, etc)

Ele resolve o problema de maneira mais elegante (geralmente o


mais rpido o mais elegante )
Introduo
O que costumamos dizer que este algoritmo mais
eficiente que aquele em relao ao ...

Neste curso estaremos mais interessados em algoritmos


eficientes com relao ao tempo, ou seja, mais rpidos

Estudaremos vrios algoritmos clssicos e tambm


veremos como quantificar a eficincia desses algoritmos
(Analisar)
Introduo
Importante:
Um algoritmo define uma sequncia de etapas/aes, que
podem ser simples (atmicas) ou compostas (de vrias sub
aes)

A maneira como estas aes so executadas no diz respeito ao


algoritmo, mas sim, implementao do algoritmo.

Implementar um algoritmo significa descrev-lo em uma


determinada linguagem computacional que modo que ele possa
ser executado pela mquina.
Introduo
Exemplos de problemas resolvidos por algoritmos:
Web:
Armazenamento eficiente de grandes volumes de dados
Busca de informaes
Roteamento de pacotes de dados (Caminhos mais curtos)

Jogos
Gerao de imagens 3D
Gerenciamento de mapas
Aprendizagem dos personagens

Outros
Compactao/descompactao de dados (vdeos, imagens)
Processamento/Segmentao de imagens
Reconhecimento de voz
Introduo
Estruturas de dados
Para explicar esse conceito, partimos do princpio que todo
algoritmo manipula dados (entrada e sada)

Uma estrutura de dados consiste em um meio de se armazenar


dados com o objetivo de facilitar ao algoritmo:
Receber e armazenar novos dados

Se desfazer de dados no mais relevantes

Encontrar dados que ele precise em um determinado momento


Introduo
Estruturas de dados
Uma estrutura de dados deve especificar:
Operaes que podem ser realizada sobre o conjunto de dados
As bsicas so: Insero, Remoo, Busca (recuperao)

Uma tcnica/soluo para armazenar os dados (sequencial,


hierrquico, enfileirado, empilhado, indexado, etc...)

Estas mesmas operaes bsicas so aplicadas grande maioria


das estruturas, porm elas funcionam de maneira diferente.
Exemplo: enfileirar e empilhar so operaes de insero que
funcionam de maneira diferente.
Introduo
Estruturas de dados
Uma estrutura de dados pode ser projetada para armazenar
dados em diversas meios de armazenamento:
Disco rgido, Fita magntica (memria externa)

Memria principal (voltil) (interna)

Nesta disciplina estudaremos em primeiro plano


as estruturas de dados para memria principal
Viso Geral do Curso
Reviso da linguagem C/C++, memria interna, ponteiros, processo,
alocao dinmica/esttica, POO
Algoritmos recursivos
Estruturas de dados lineares
Filas, Pilhas, Listas (Implementao sequencial e encadeada)

Anlise de complexidade Notao Assinttica


Ordenao Interna baseada em comparaes
Ordenao Interna em tempo linear
Mtodos de busca
rvores de Busca Binria
rvores binrias com auto-balanceamento
Grafos e principais algoritmos
Requisitos
E interessante que o aluno tenha conhecimentos em:

Programao Procedural
Programao Orientada a Objetos

importante gostar de computao


Dicas
Procurar assistir todas as aulas

Chegar sempre no horrio certo


Avaliao
2 provas de pesos iguais (70%)
22/03 Tera
24/04 Tera

Trabalho/Projeto: 1 (individual) (25%)

Entrega de exerccios (5%)


Conceitos

Critrios de converso das notas finais


(mdia final = N) para conceitos

A : N 8.5
B : 7.0 N < 8.5
C : 5.0 N < 7.0
R : N < 5.0
Bibliografia
Bsica
Cormen, Leiserson e Rivest Algoritmos: Teoria e Prtica,
Editora Campus, 2ed, 2002.

Ziviani - Projeto de algoritmos: com implementaes em Java e


C++. Thomson Learning, 2007.

Deitel - C++ como programar. Pearson Prentice Hall, 5ed,


2006.
Notas de aula

tidia.ufabc.edu.br
Ir em Membership e Sites que aceitam inscrio
Procurar por AAED-PosComp-2012-1
Inscrever no curso

Вам также может понравиться