Escolar Documentos
Profissional Documentos
Cultura Documentos
DEFINIO E EXEMPLOS
Bruno Maffeo
Departamento de Informtica
PUC-Rio
TERMINOLOGIA BSICA
ALGORITMO
Um algoritmo pode ser visto como uma seqncia de aes expressas em termos de uma linguagem de
programao, constituindo parte da soluo de um tipo determinado de problema. Ou seja, um algoritmo
corresponde descrio do padro de comportamento associado aos elementos funcionais ativos de um
processamento e deve ser expresso em termos de um conjunto finito de aes especificadas por meio de uma
linguagem de programao.
ESTRUTURAS DE DADOS
Na linguagem de programao adotada, estruturas de dados do suporte descrio dos elementos
funcionais passivos do padro de comportamento acima referido, complementando o algoritmo que
constitui parte da soluo do problema considerado. Ambos, algoritmo e estruturas de dados, compem o
programa a ser executado pelo computador.
No til estudar estruturas de dados sem considerar os algoritmos bsicos a elas associados. Da mesma
forma, a escolha de um algoritmo depende, em geral, da estrutura de dados associada.
PROGRAMA
Programar , basicamente, estruturar dados e construir algoritmos.
Um programa uma formulao concreta, em termos de uma linguagem de programao, de um
procedimento abstrato que atua sobre um modelo de dados tambm abstrato. Ambos, procedimento e
modelo de dados, so representaes abstratas de algoritmo e estruturas de dados, respectivamente, e no
devem ser expressos em termos de uma linguagem de programao.
B. Maffeo
pgina 2 de 22
REPRESENTAES DE DADOS
TIPOS DE DADOS
Em uma linguagem de programao, importante classificar constantes, variveis e valores gerados por
expresses/funes de acordo com o seu tipo de dados. Um tipo de dados deve caracterizar o conjunto de
valores a que uma constante pertence ou o conjunto de valores que pode ser assumido por uma varivel ou
gerado por uma expresso/funo.
Um tipo de dados elementar (ou simples) caracterizado por um conjunto domnio de valores
indivisveis, tais como os definidos pelos tipos numeral, texto e smbolo da linguagem de programao
Scheme.
Um tipo de dados estruturado (ou complexo) define, em geral, uma coleo homognea (de mesmo tipo) de
valores elementares/estruturados ou um agregado de valores de tipos diferentes. Um exemplo o tipo lista de
Scheme.
B. Maffeo
pgina 3 de 22
NVEIS DE ABSTRAO
Uma coleo de atividades, tais como inserir, suprimir e consultar, encapsulada junto com uma estrutura
passiva, como um dicionrio (conjunto de verbetes), pode ser considerada um tipo abstrato de dados
(TAD).
Definido dessa forma, o TAD DICIONRIO fica representado no nvel de abstrao mais alto possvel: o
nvel conceitual.
Em um nvel de abstrao mais baixo, denominado nvel de design, a estrutura passiva deve ser representada
por um modelo de dados (por exemplo: seqncia ou rvore binria de busca) e as operaes devem ser
especificadas atravs de procedimentos cuja representao no dependa de uma linguagem de programao.
Em um nvel de abstrao ainda mais baixo, denominado nvel de implementao, deve-se tomar como
base o design do TAD e estabelecer representaes concretas para os elementos de sua estrutura em termos
de uma linguagem de programao especfica.
No exemplo do TAD DICIONRIO, se o design escolhido para a estrutura passiva for a rvore binria de
busca, ser possvel implementar esse modelo de dados em Scheme, por exemplo, em termos de uma
estrutura de dados do tipo lista correspondendo representao prefixada (raiz sub-rvore-esquerda subrvore-direita). Os procedimentos sero implementados por meio dos algoritmos apropriados s operaes
raiz, esquerda, direita etc. utilizando-se os recursos disponveis em Scheme para codificar estruturas ativas
(operaes e controle). As duas estruturas, a ativa e a passiva, do TAD podero eventualmente constituir um
encapsulamento (mdulo) especfico e identificvel no programa construdo.
B. Maffeo
pgina 4 de 22
MOTIVAO
Uma razo importante para programar em termos de TAD o fato de que os elementos da estrutura passiva
do TAD so acessveis somente atravs dos elementos da estrutura ativa.
No caso do TAD DICIONRIO, por exemplo, o acesso a qualquer elemento da estrutura de dados pode
ocorrer apenas via os algoritmos correspondentes s operaes inserir, eliminar e consultar.
Essa restrio conduz a uma forma eficiente de programao defensiva, protegendo os dados encapsulados
no TAD contra manipulaes inesperadas por parte de outros algoritmos.
Uma segunda razo, tambm importante, para programar em termos de TAD o fato de que seu uso permite
introduzir alteraes nas estruturas definidas no nvel de implementao visando, por exemplo, aumento de
eficincia livre da preocupao de gerar erros no restante do programa. Tais erros no ocorrem porque a
nica conexo entre o TAD e o restante do programa aquela constituda pela interface imutvel dos
algoritmos que implementam a estrutura ativa do TAD.
Por fim, pode-se dizer que um TAD bem construdo pode tornar-se uma poro de cdigo confivel e
genrica, permitindo e aconselhando seu reso em outros programas. Dessa forma, aumenta-se a
produtividade na construo de programas e, sobretudo, garante-se a qualidade dos produtos gerados.
B. Maffeo
pgina 5 de 22
B. Maffeo
pgina 6 de 22
RECAPITULANDO
No nvel de abstrao correspondente implementao em termos de uma linguagem de programao
especfica, um tipo abstrato de dados, TAD, uma estrutura de programa contendo:
uma representao de dados de um conjunto de valores (domnio do tipo), expressa em termos da
linguagem de programao adotada
o conjunto de algoritmos que atuam com exclusividade sobre essa representao de dados e
implementam, na linguagem de programao adotada, as operaes bsicas que processam os valores
do domnio considerado.
Assim sendo, quaisquer outras reas de um programa que contenha um TAD no possuiro, e portanto no
utilizaro, o conhecimento relativo aos detalhes da representao de dados especfica associada quele
domnio de valores, bem como aos detalhes da implementao das operaes bsicas tornadas disponveis
externamente.
Nessas condies, as reas do programa usurias do TAD s podero processar os valores do domnio
associado ao tipo por intermdio das operaes bsicas contidas no TAD. Portanto, essas reas
permanecero invariantes em relao a qualquer alterao efetuada seja na representao de dados seja nos
algoritmos que implementam as operaes bsicas do TAD.
B. Maffeo
pgina 7 de 22
TAD CONJUNTO
REPRESENTAO DO DOMNIO
um conjunto vazio representado pela lista vazia: { } ( )
(define conj-vazio ( ))
um conjunto no vazio representado por uma lista, sem itens repetidos, contendo os
elementos do conjunto
OPERAES BSICAS
teste de conjunto vazio
(define conj-vazio? null?)
teste de conjunto
(define conjunto? list?)
cardinalidade de conjunto
(define card (lambda (conj) (comprimento-lista conj)))
teste de pertinncia de item a conjunto
(define pertence-conj? (lambda (item conj)
; processo iterativo
(cond ( (conj-vazio? conj) #f)
( (equal? (car conj) item) #t)
(else (pertence-conj? item (cdr conj))) ) ))
teste de subconjunto
TAD Conjunto
B. Maffeo
pgina 8 de 22
TAD Conjunto
B. Maffeo
pgina 9 de 22
interseo de conjuntos
TAD Conjunto
B. Maffeo
pgina 10 de 22
diferena de conjuntos
TAD Conjunto
B. Maffeo
pgina 11 de 22
(8 10)
TAD Conjunto
B. Maffeo
pgina 12 de 22
REPRESENTAO DO DOMNIO
O conceito matemtico de conjunto est na base da definio de rvore binria.
Em Scheme, a representao de dados empregada para conjuntos a lista, tipo de dados predefinido nessa
linguagem.
Assim sendo, e tendo em vista a estrutura de uma rvore binria constituda por um nodo raiz, uma subrvore esquerda e uma sub-rvore direita , h trs alternativas para a representao de dados do
domnio do tipo rvore binria:
representao prefixada, por meio da lista (raiz sub-rvore-esquerda sub-rvore-direita)
representao infixada, por meio da lista (sub-rvore-esquerda raiz sub-rvore-direita)
representao ps-fixada, por meio da lista (sub-rvore-esquerda sub-rvore-direita raiz).
Admite-se a existncia de uma rvore vazia e, visando proporcionar maior legibilidade aos programas, definese a constante arv-bin-vazia: (define arv-bin-vazia ( )).
Visando simplificar a representao de rvores binrias, adota-se a conveno de representar uma rvore
cujas sub-rvores esquerda e direita so ambas vazias apenas pelo elemento associado a sua raiz. Ou
seja, uma folha representada pelo elemento associado ao nodo correspondente:
a rvore binria
n1
a rvore binria
n2
n3
B. Maffeo
pgina 13 de 22
(r (e e-fe e-fd) d)
funo raiz
B. Maffeo
pgina 14 de 22
testar folha
acessar raiz
acessar sub-rvore direita.
B. Maffeo
pgina 15 de 22
OPERAES BSICAS
testar rvore binria vazia
(define arv-bin-vazia? null?)
testar folha
(define folha? (lambda (ab)
(not (list? ab)) ))
criar rvore binria
(define cria-arvore-in (lambda (e r d)
(if (and (arv-bin-vazia? e) (arv-bin-vazia? d))
r
(cons e (cons r (cons d ( )))) ) ))
exemplos
(cria-arvore-in ( ) r ( )) r
(cria-arvore-in e r d)
(e r d)
(cria-arvore-in (e-fe e e-fd) r d)
((e-fe e e-fd) r d)
B. Maffeo
pgina 16 de 22
acessar raiz
(define raiz-in (lambda (ab)
(if (folha? ab)
ab
(cadr ab) ) ))
acessar sub-rvore esquerda
(define esquerda-in (lambda (ab)
(if (folha? ab)
arv-bin-vazia
(car ab) ) ))
acessar sub-rvore direita
(define direita (lambda (ab)
(if (folha? ab)
arv-bin-vazia
(caddr ab) ) ))
B. Maffeo
pgina 17 de 22
B. Maffeo
pgina 18 de 22
TAD MATRIZ
REPRESENTAO DE DADO
arranjo bidimensional cujos elementos so arranjos unidimensionais,
representando uma linha da matriz
cada um
#( #( a00 a01
... a0(n-1) )
#( a10 a11
... a1(n-1) )
.................................
#( a(m-1)0 a(m-1)1 ... a(m-1)(n-1) ) )
OPERAES BSICAS
testar matriz vazia
(define vetor-vazio? (lambda (vet) (zero? (vector-length vet)) ))
(define matriz-vazia? (lambda (mat) (vetor-vazio? mat) ))
retornar o nmero de linhas de uma matriz
(define num-linhas-mat (lambda (mat) (vector-length mat) ))
retornar o nmero de colunas de uma matriz
(define num-colunas-mat (lambda (mat) (vector-length (vector-ref mat 0)) ))
B. Maffeo
pgina 19 de 22
B. Maffeo
pgina 20 de 22
Funo para criar e retornar uma matriz de dimenso m x n onde cada elemento
seja igual a uma funo de seus ndices.
(define cria-matriz-aux (lambda (mat f m n i j)
(cond ( (= i m) mat)
( (< j n)
(begin (matrix-set! mat i j (f i j))
(cria-matriz-aux mat f m n i (+ j 1)) ) )
(else (cria-matriz-aux mat f m n (+ i 1) 0)) ) ))
(define cria-matriz (lambda (m n f)
(cria-matriz-aux (make-matrix m n) f m n 0 0) ))
B. Maffeo
pgina 21 de 22
Funo cria-exibe-mat+diag para criar uma matriz M(nxn) onde cada elemento
seja igual a uma funo especfica de seus ndices, para exibi-la de modo que
cada linha ocupe uma linha da tela e para exibir uma seqncia contendo os
elementos da diagonal de M.
Exemplificar usando o formato de apresentao indicado a seguir,
(cria-exibe-mat+diag 3 + soma).
MATRIZ M (3 3 soma)
0 1 2
1 2 3
2 3 4
ELEMENTOS DA DIAGONAL
0 2 4
B. Maffeo
pgina 22 de 22