So she went on, wondering more and more at every step, as everything turned into a tree the moment she came up to it.

Tamanho: px
Começar a partir da página:

Download "So she went on, wondering more and more at every step, as everything turned into a tree the moment she came up to it."

Transcrição

1 Capítulo 14 Árvores So she went on, wondering more and more at every step, as everything turned into a tree the moment she came up to it. Lewis Carroll, Through the Looking Glass A árvore é um tipo estruturado de informação que é muito utilizado em programação. No diaadia, utilizamos árvores para representar, por exemplo, a estrutura hierárquica de organizações e árvores genealógicas. Em informática, as árvores podem ser utilizadas para representar, entre muitas outras, estruturas de expressões (como foi feito nas figuras 1.4 a 1.7) e as funções invocadas durante a execução de um processo (como foi feito nas figuras 10.5 e 10.9). Uma árvore 1 é um tipo que apresenta uma relação hierárquica entre os seus constituintes. A terminologia utilizada para designar os constituintes de uma árvore mistura termos provenientes das árvores que aparecem na natureza e termos provenientes de árvores genealógicas. Uma árvore pode ser vazia ou ser constituída por um elemento, a raiz da árvore, a qual domina, hierarquicamente, outras árvores. Uma árvore que apenas domina árvores vazias chamase uma folha. As árvores dominadas chamamse filhas da árvore dominadora, e esta árvore chamase mãe das árvores dominadas. A ligação entre uma árvore e a árvore dominada é chamada um ramo da árvore. Em programação, as árvores são normalmente escritas com a raiz no topo e com 1 Em inglês tree. 397

2 398 CAPÍTULO 14. ÁRVORES A B C D E F G H I J Figura 14.1: Exemplo de uma árvore. as folhas na base. Na Figura 14.1, mostramos uma árvore cuja raiz é rotulada com A. Esta árvore domina três árvores: (1) uma árvore cuja raiz é rotulada com B e apenas domina árvores vazias; (2) uma árvore cuja raiz é rotulada com C; e (3) uma árvore cuja raiz é rotulada com D. A é a mãe de B, C e D; G é fi l h a de D; as folhas da árvore são rotuladas com B, E, F, H, I e J. Existe um caso particular de árvores, as árvores binárias, em que cada raiz domina exactamente duas árvores binárias. Uma árvore binária ou é vazia ou é constituída por uma raiz que domina duas árvores binárias, a árvore esquerda e a árvore direita. A árvore apresentada na Figura 14.1 não é binária, porque algumas das suas árvores (nomeadamente, as árvores cujas raízes são rotuladas com A e com G) dominam mais do que duas árvores. Na Figura 14.2, apresentamos uma árvore binária. É importante notar que a árvore cuja raiz é C domina à sua esquerda a árvore vazia e à sua direita a árvore cuja raiz é F. Nesta secção, apenas consideramos árvores binárias. Isto não representa uma limitação séria, porque qualquer árvore pode ser transformada numa árvore binária 2. Daqui em diante, utilizaremos a palavra árvore, como sinónimo de árvore binária. 2 Ver [Knuth, 1973a], Secção

3 14.1. OPERAÇÕES BÁSICAS PARA ÁRVORES 399 A B C D E F G H Figura 14.2: Exemplo de uma árvore binária Operações básicas para árvores Apenas iremos definir árvores como entidades imutáveis. O primeiro passo para a criação do tipo árvore consiste em definir as suas operações básicas: 1. Construtores: Os construtores para o tipo árvore incluem uma operação que gera árvores a partir do nada, à qual chamaremos nova arv. O outro construtor é uma operação que recebe como argumentos uma raiz e duas árvores, e que cria uma árvore com essa raiz cujas árvores esquerda e direita são as árvores recebidas. Esta operação será chamada cria arv. 2. Selectores: Deveremos ter um selector para escolher a raiz da árvore e selectores para a árvore esquerda e para a árvore direita. Estes selectores são chamados, respectivamente, raiz, arv esq e arv dir. 3. Reconhecedores: A operação árvore tem como argumento um elemento de qualquer tipo e decide se este corresponde ou não a uma árvore. A operação arv vazia tem como argumento uma árvore e decide se esta corresponde ou não à árvore vazia (a árvore gerada por nova arv).

4 400 CAPÍTULO 14. ÁRVORES 4. Testes: A operação arv iguais tem como argumentos duas árvores e decide se estas são iguais. Em resumo, o tipo árvore tem as seguintes operações básicas, as quais se referem ao tipo elemento que corresponde ao tipo dos elementos da raiz: 1. Construtores: nova arv : {} 7! árvore nova arv() tem como valor uma árvore vazia. cria arv : elemento árvore árvore 7! árvore cria arv(raiz, a esq,a dir ) tem como valor a árvore com raiz raiz, com árvore esquerda a esq e com árvore direita a dir. 2. Selectores: raiz :árvore 7! elemento raiz(árv) recebe uma árvore, árv, e tem como valor a sua raiz. Se a árvore for vazia, o valor desta operação é indefinido. arv esq :árvore 7! árvore arv esq(árv) recebe uma árvore, árv, e tem como valor a sua árvore esquerda. Se a árvore for vazia, o valor desta operação é indefinido. arv dir :árvore 7! árvore arv dir(árv) recebe uma árvore, árv, e tem como valor a sua árvore direita. Se a árvore for vazia, o valor desta operação é indefinido. 3. Reconhecedores: arv : universal 7! lógico arv(arg) tem o valor verdadeiro se arg é uma árvore e tem o valor falso, em caso contrário. arv vazia :árvore 7! lógico arv vazia(árv) tem o valor verdadeiro se árv é uma árvore vazia e tem o valor falso, em caso contrário.

5 14.2. AXIOMATIZAÇÃO Testes: arv iguais :árvore árvore 7! lógico arv iguais(árv 1, árv 2 ) tem o valor verdadeiro se árv 1 eárv 2 são árvores iguais e tem o valor falso, em caso contrário. De modo a utilizarmos o tipo árvore temos ainda de definir os transformadores de entrada e de saída, os quais transformam entre a representação que utilizamos para árvores, a representação externa, e a representação utilizada no nosso programa 3. Seria interessante utilizar como representação externa para árvores uma representação gráfica como a que apresentamos nas figuras 14.1 e Para isso, poderemos utilizar as funções gráficas apresentadas na Secção Por uma questão de simplicidade, optamos por uma representação externa para árvores, tal como a que apresentamos na Figura 14.3, a qual corresponde à árvore da Figura A nossa representação externa utiliza as seguintes convenções: (1) a árvore vazia é representada por ; (2) a árvore esquerda e a árvore direita de uma árvore são escritas em linhas diferentes (começando à mesma distância da margem esquerda), e dois espaços mais para a direita do que a sua raiz, que aparece na linha acima. A operação escreve arv recebe uma árvore e mostraa de acordo com esta convenção Axiomatização Entre as operações básicas devemos impor as seguintes condições (axiomatização), em que a, a 1 e a 2 são árvores e r é um elemento da raiz de uma árvore 4 : arv(nova arv()) = verdadeiro arv(cria arv(r, a 1,a 2 )) = verdadeiro arv vazia(nova arv()) = verdadeiro arv vazia(cria arv(r, a 1,a 2 )) = falso raiz(cria arv(r, a 1,a 2 )) = r 3 Novamente, não iremos definir o transformador de entrada. 4 Por uma questão de simplicidade, nas duas últimas equações omitimos a verificação de árvore não vazia.

6 402 CAPÍTULO 14. ÁRVORES A B D E G H C F Figura 14.3: Representação externa da árvore da Figura arv esq(cria arv(r, a 1,a 2 )) = a 1 arv dir(cria arv(r, a 1,a 2 )) = a 2 cria arv(raiz(a),arv esq(a),arv dir(a)) = a arv iguais(a, cria arv(raiz(a), arv esq(a), arv dir(a))) = verdadeiro 14.3 Representação de árvores A escolha de uma representação interna para árvores vai ser influenciada pelo tipo de programa que queremos utilizar para o tipo árvore. Podemos pensar em realizar o tipo árvore usando funções ou podemos realizar o tipo árvore como objectos Representação para o uso recorrendo a funções Criar o tipo árvore recorrendo a funções, precisamos que as árvores estejam contidas numa única estrutura de informação, a qual será passada às várias funções que manipulam árvores. Uma das possíveis representações internas para

7 14.3. REPRESENTAÇÃO DE ÁRVORES 403 <[Árvore vazia] = [] =[<[R], <[A e ], <[A d ]] A e A d Figura 14.4: Representação de árvores utilizando listas. árvores recorre a listas e poderá ser definida do seguinte modo (Figura 14.4): 1. Uma árvore vazia é representada lista vazia []. 2. Uma árvore não vazia é representada por uma lista cujo primeiro elemento contém a raiz da árvore, cujo segundo elemento contém a representação da árvore esquerda e cujo terceiro elemento contém a representação da árvore direita. Por exemplo, a árvore da Figura 14.2, será representada pela lista [A, [B, [D, [], []], [E, [G, [], []], [H, [], []]]], [C, [], [F, [], []]]], ou, de uma forma mais intuitiva, baseandonos no princípio que utilizámos para a representação externa: [A, [B, [D, [], []], [E, [G, [], []], [H, [], []]]], [C, [], [F, [], []]]]

8 404 CAPÍTULO 14. ÁRVORES <[Árvore vazia] = self.e :? self.r : None self.d :? = A e A d self.r : <[R] self.e : <[A e ] self.d : <[A d ] Figura 14.5: Representação de árvores recorrendo a objectos Representação para o uso recorrendo a objectos Sabemos que um objecto é uma entidade com estado interno. Representado as árvores como objectos, o estado interno desses objectos deverá conter os diferentes constituintes de uma árvore. Neste caso, podemos utilizar três componentes distintos para representar os três constituintes de uma árvore, a raiz, a árvore esquerda e a árvore direita. Embora estas três entidades sejam distintas, elas existem dentro das instâncias da classe árvore. Assim, uma árvore será representada por três variáveis, self.r, self.e e self.d, contendo, respectivamente, a raiz, a árvore esquerda e a árvore direita. Para representar uma árvore vazia, vamos recorrer a um tipo de informação elementar existente em Python, o tipo None. OtipoNone tem apenas uma constante, None, a qual representa nada. Já tínhamos apresentado este tipo, embora não explicitamente, quando na página 58 dissemos que a função print não devolve qualquer valor. A representação externa desta constante não é mostrada pelo Python quando uma expressão tem o valor None como o mostra a seguinte interacção: >>> None >>> Assim, a representação que escolhemos para árvores é apresentada na Figura 14.5 (recordese que? representa indefinido).

9 14.4. REALIZAÇÃO DAS OPERAÇÕES BÁSICAS Realização das operações básicas Apresentamos a realização das operações básicas para as duas alternativas apresentadas na Secção Árvores recorrendo a funções def nova_arv(): return [] def cria_arv(r, a_e, a_d): if arvore(a_e) and arvore(a_d): return [r, a_e, a_d] raise ValueError ( cria_arv: o segundo e terceiro \ argumentos devem ser árvores ) def raiz(a): if a == []: raise ValueError ( raiz: a árvore é vazia ) return a[0] def arv_esq(a): if a == []: raise ValueError ( arv_esq: a árvore é vazia ) return a[1] def arv_dir(a): if a == []: raise ValueError ( arv_dir: a árvore é vazia ) return a[2]

10 406 CAPÍTULO 14. ÁRVORES def arvore(x): if isinstance(x, list): if x == []: return True elif len(x) == 3 and \ arvore(x[1]) and \ arvore(x[2]): return True return False return False def arv_vazia(a): return a == [] def arv_iguais (a1, a2): if arv_vazia(a1): return arv_vazia(a2) elif arv_vazia(a2): return False elif raiz(a1) == raiz(a2): return arv_iguais(arv_esq(a1), arv_esq(a2)) and \ arv_iguais(arv_dir(a1), arv_esq(a2)) return False def escreve_arv(a): def escreve_aux(a, indent): if arv_vazia(a): print( * indent, ) print( * indent, raiz(a)) escreve_aux(arv_esq(a), indent + 2)

11 14.4. REALIZAÇÃO DAS OPERAÇÕES BÁSICAS 407 escreve_aux(arv_dir(a), indent + 2) escreve_aux(a, 0) Notese que poderíamos term pensado em escrever a função arv iguais como: def arv_iguais (a1, a2): return a1 == a2 Embora esta função produza resultados correctos em Python para a representação escolhida, esta abordagem simplista poderá não funcionar correctamente para outras representações A classe árvore Recordemos que definimos dois construtores para árvores, a operação nova arv o que gera árvores a partir do nada e a operação cria arv que recebe como argumentos uma raiz e duas árvores, e que cria uma árvore com essa raiz cujas árvores esquerda e direita são as árvores recebidas. Existem pois dois modos distintos de construir árvores, modos esses que devem ser contemplados pelo método init : se não lhe forem fornecidos argumentos, então init deve construir uma árvore vazia; se lhe forem fornecidos uma raiz e duas árvores, então init constrói uma árvore não vazia. Precisamos pois de definir uma função, init, que recebe um número variável de argumentos. Ométodo init para a classe arvore deve permitir a utilização de zero ou três argumentos. class arvore: def init (self, *args): if args == (): self.r = None if len(args) == 3: if isinstance(args[1], arvore) and \ isinstance(args[2], arvore):

12 408 CAPÍTULO 14. ÁRVORES self.r = args[0] self.e = args[1] self.d = args[2] raise ValueError ( arvore: o segundo e \ terceiro argumentos devem ser arvores ) raise ValueError ( arvore: aceita zero ou \ tr^es argumentos ) def raiz(self): if self.r == None: raise ValueError ( raiz: a arvore é vazia ) return self.r def arv_esq(self): if self.r == None: raise ValueError ( arv_esq: a arvore é vazia ) return self.e def arv_dir(self): if self.r == None: raise ValueError ( arv_dir: a arvore é vazia ) return self.d def arv_vazia(self): return self.r == None

13 14.5. ORDENAÇÃO POR ÁRVORE 409 def repr (self): def repr aux(a, indent): if a.r == None: return * indent + + \n return * indent + \ [ + str(a.r) + \n +\ repr aux(a.e, indent + 2) + \ repr aux(a.d, indent + 2) + \ * (indent + 2) + ] + \n return repr aux(self, 0) 14.5 Ordenação por árvore Nesta secção, apresentamos uma aplicação que utiliza árvores, a ordenação por árvore. A ordenação por árvore é um algoritmo de ordenação muito eficiente, executado em dois passos sequenciais: primeiro coloca os elementos a serem ordenados numa árvore binária (chamada árvore binária de procura), depois percorre esta árvore seguindo um método determinado, visitando as raízes das árvores que a constituem. Isto é feito de modo a que a primeira raiz visitada contenha o menor elemento, a segunda raiz visitada, o elemento que é imediatamente maior, e assim sucessivamente. A árvore binária é construída do seguinte modo. Começando com uma árvore vazia, inserimos nesta árvore os elementos a serem ordenados, um de cada vez. 1. Um elemento é inserido numa árvore vazia através da criação de uma árvore cuja raiz contém o elemento a inserir e em que as árvores esquerda e direita são vazias. 2. Um elemento é inserido numa árvore não vazia comparando o elemento com a raiz da árvore. Se o elemento a ser inserido for maior do que o elemento que se encontra na raiz da árvore, o elemento é inserido, utilizando o mesmo método, na árvore direita da árvore inicial, caso contrário, é inserido, pelo mesmo método, na árvore esquerda.

14 410 CAPÍTULO 14. ÁRVORES 5 14 Figura 14.6: Árvore depois da inserção de 5 e de Figura 14.7: Árvore depois da inserção de 8. Como exemplo desta função, suponhamos que desejávamos criar uma árvore binária de procura com os elementos 5, 14, 8, 2 e 20. Em primeiro lugar, criamos uma árvore vazia, onde inserimos o elemento 5, criando uma árvore cuja raiz contém 5 e em que as árvores esquerda e direita são vazias. Seguidamente, inserimos o elemento 14 nesta árvore. Uma vez que 14 > 5 (5 é a raiz da árvore), 14 é inserido na árvore da direita, originando a árvore apresentada na Figura O elemento seguinte a ser inserido é 8. Uma vez que 8 > 5, este elemento será introduzido na árvore da direita. Para inserir este elemento na árvore da direita, este é comparado com a raiz, e, uma vez que 8 < 14, este é inserido na árvore da esquerda, dando origem à árvore apresentada na Figura Em seguida, inserese o número 2. Uma vez que 2 < 5, este elemento será inserido na árvore da esquerda, dando origem à árvore apresentada na Figura Finalmente, inserimos o elemento 20, dando origem à árvore apresentada na Figura Uma vez construída a árvore, teremos de a percorrer, visitando as raízes das suas árvores. As raízes devem ser visitadas por ordem crescente dos elementos existentes na árvore.

15 14.5. ORDENAÇÃO POR ÁRVORE Figura 14.8: Árvore depois da inserção de Figura 14.9: Árvore depois da inserção de 20. O algoritmo para percorrer a árvore é o seguinte: 1. Percorrer uma árvore vazia não causa nenhuma acção. 2. Para percorrer uma árvore não vazia, primeiro percorremos a sua árvore da esquerda, depois visitamos a raiz, depois percorremos a sua árvore da direita. Por exemplo, considerando a árvore da Figura 14.9, uma vez que esta árvore não é vazia, teremos primeiro de percorrer a sua árvore da esquerda, depois visitar a raiz e depois percorrer a árvore da direita. Para percorrer a árvore da esquerda (cuja raiz contém 2), teremos de percorrer a árvore da esquerda (que é vazia), visitar a raiz, que contém o valor 2, e depois percorrer a árvore da direita, que também é vazia. Acabamos assim de percorrer a árvore cuja raiz contém 2, visitamos agora a raiz da árvore original, que contém 5, e percorremos a árvore da direita. O processo repetese para a árvore da direita. Deixamos como

16 412 CAPÍTULO 14. ÁRVORES exercício a verificação de que os elementos são visitados por ordem crescente do seu valor. A função ordena arvore recebe uma lista contendo valores a ordenar e devolve a lista correspondente à ordenação dos elementos recebidos. Esta função utiliza a definição de árvores como objectos. def ordena_arvore(lst): return percorre(lista_para_arvore(lst)) def lista_para_arvore(lst): def insere_arv(lst, arv): def insere_elemento(el, arv): if arv.arv_vazia(): return arvore(el, arvore(), arvore()) elif el > arv.raiz(): return arvore(arv.raiz(), \ arv.arv_esq(), \ insere_elemento(el, arv.arv_dir())) return arvore(arv.raiz(), \ insere_elemento(el, arv.arv_esq()), \ arv.arv_dir()) if lst == []: return arv return insere_arv(lst[1:], \ insere_elemento(lst[0], arv)) return insere_arv(lst, arvore())

17 14.6. NOTAS FINAIS 413 def percorre(arv): if arv.arv_vazia(): return [] return percorre(arv.arv_esq()) + \ [arv.raiz()] + \ percorre(arv.arv_dir()) Com a qual podemos gerar a interacção: >>> ordena_arvore([5, 14, 8, 2, 20]) [2, 5, 8, 14, 20] 14.6 Notas finais Apresentámos o tipo árvore que é muito utilizado em programação. Informação adicional sobre árvores e algoritmos que as manipulam podem ser consultados em [Knuth, 1973b] e em [Cormen et al., 2009] Exercícios 1. Escreva uma função chamada arv soma elementos que recebe como argumento uma árvore cujos nós são números e devolve a soma dos números representados na árvore. 2. Escreva uma função chamada arv espelha que recebe uma árvore e devolve uma nova árvore idêntica à recebida, mas em que em cada nível da árvore se trocou a árvore esquerda com a direita, mantendose a raiz. 3. Escreva uma função chamada arv transforma que recebe como argumentos uma árvore e uma função de um argumento aplicável aos elementos da árvore e devolve uma nova árvore cujos elementos correspondem à aplicação da função aos elementos da árvore na posição correspondente. 4. Defina a representação externa para árvores utilizando uma interface gráfica.

arv_esq(árv) recebe uma árvore, árv, e tem como valor a sua árvore esquerda. Se a árvore for vazia, o valor desta operação é indefinido.

arv_esq(árv) recebe uma árvore, árv, e tem como valor a sua árvore esquerda. Se a árvore for vazia, o valor desta operação é indefinido. Capítulo 13 Árvores Binárias 13.1 Tipo Árvore Considere o TAI Árvore, inido e implementado como se apresenta em seguida: Construtores: nova_arv : {} 7! árvore arvore() tem como valor uma árvore vazia.

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Segundo Teste 18 de Junho de 2014 15:00 16:30 1. (1.0) Diga quais as fases por que passa o desenvolvimento de um programa no modelo estudado e o que se faz em cada uma delas.

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Exame 13 de Janeiro de 2017 09:00 11:00 1. Indique se cada uma das seguintes afirmações é verdadeira ou falsa. No caso de ser falsa, justifique de forma sucinta. (a)

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Segundo Teste 10 de Janeiro de 2014 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 8 páginas com 12 perguntas. A cotação de cada pergunta está assinalada

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Exame 1 de Fevereiro de 2019 09:00 11:00 1. Usando palavras suas e, no máximo, em cinco linhas responda às seguintes questões. Respostas dadas através de exemplos

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Segundo Teste 18 de Janeiro de 2013 09:00 10:30 1. (2.0) Escolha a única resposta incorrecta para as seguintes questões. Cada resposta certa vale 1 valor e cada resposta

Leia mais

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados. Capítulo 5 Abstracção de dados 5. Exercícios de revisão. Diga o que é um tipo abstracto de informação.. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do exame 12 de Janeiro de 2018 09:00 11:00 1. Indique se cada uma das seguintes afirmações é verdadeira ou falsa. No caso de ser falsa, justifique de forma sucinta. (a)

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca

SUMÁRIO. Fundamentos Árvores Binárias Árvores Binárias de Busca ÁRVORES SUMÁRIO Fundamentos Árvores Binárias Árvores Binárias de Busca 2 ÁRVORES Utilizadas em muitas aplicações Modelam uma hierarquia entre elementos árvore genealógica Diagrama hierárquico de uma organização

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Primeiro Teste 16 de Abril de 2011 09:00 10:30 Nome: Número: Esta prova, individual e sem consulta, tem 7 páginas com 9 perguntas. A cotação de cada pergunta está assinalada

Leia mais

Abstração de dados. Capítulo 10

Abstração de dados. Capítulo 10 Capítulo 10 Abstração de dados 1. Suponha que desejava criar o tipo tempo em Python, caracterizado por um certo número de horas (um inteiro não negativo), minutos (um inteiro entre 0 e 59) e segundos (um

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Exame 1 de Fevereiro de 2017 09:00 11:00 1. Usando palavras suas e, no máximo, em três linhas explique os seguintes conceitos. Explicações dadas através de exemplos

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 26 de Outubro de 2013 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Exame 9 de Janeiro de 2015 09:00 11:00 1. De um modo sucinto, explique o que é: (a) (0.5) Um processo computacional. Um ente imaterial que existe dentro de um computador durante

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do segundo exame 29 de Janeiro de 2016 18:30 20:30 1. Indique se cada uma das seguintes afirmações é verdadeira ou falsa. No caso de ser falsa, justifique de forma sucinta.

Leia mais

if not(isinstance(a, int)) or a < 0: raise ValueError ("misterio: arg nao e inteiro nao negativo") else: return misterio_aux(a, a + 1)

if not(isinstance(a, int)) or a < 0: raise ValueError (misterio: arg nao e inteiro nao negativo) else: return misterio_aux(a, a + 1) Capítulo 7 Recursão e iteração 1. (1) Considere a seguinte função: def misterio(a): def misterio_aux(b, c): if b == 0: return True elif c == 0: return False return misterio_aux(b -, c - ) if not(isinstance(a,

Leia mais

Estruturas lineares. Capítulo 13. Para os exercícios deste capítulo, considere definidos os tipos:

Estruturas lineares. Capítulo 13. Para os exercícios deste capítulo, considere definidos os tipos: Capítulo 13 Estruturas lineares Para os exercícios deste capítulo, considere definidos os tipos: pilha implementado como a classe pilha com os métodos pilha, empurra, topo, tira, pilha_vazia e repr fila

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 29 de Março de 2014 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Soluções do primeiro teste 13 de Novembro de 2004 9:00-10:30 Nota Número: 20 Nome: Turma: Escreva o seu número em todas as folhas do teste. O espaço das respostas deve ser limitado

Leia mais

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros: Fontes Bibliográficas Estruturas de Dados Aula 15: Árvores Livros: Introdução a Estruturas de Dados (Celes, Cerqueira e Rangel): Capítulo 13; Projeto de Algoritmos (Nivio Ziviani): Capítulo 5; Estruturas

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução da Repescagem do Primeiro Teste 31 de Janeiro de 2013 09:00 10:30 1. De um modo sucinto, (a) (0.5) Diga o que é um processo computacional. Um processo computacional é

Leia mais

Prova Substitutiva PMR3201 1o. semestre 2018 Prof. Thiago Martins

Prova Substitutiva PMR3201 1o. semestre 2018 Prof. Thiago Martins Prova Substitutiva PMR301 1o. semestre 018 Prof. Thiago Martins Instruções Escreva o nome e o número USP na folha de papel almaço. Numere cada página. Indique o total de páginas na primeira página. Os

Leia mais

FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m

FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m FUNDAMENTOS DA PROGRAMAÇÃO 2º Teste, 1 de junho de 2013, 1h30m 1. (3.25) Escreva um programa que pede o nome (mais de 2 caracteres) e o sobrenome (mais de 4 caracteres) a um utilizador e gera um username

Leia mais

Aula 08. Estruturas de dados Árvore e Grafo

Aula 08. Estruturas de dados Árvore e Grafo Logo Aula 08 Estruturas de dados Árvore e Grafo 2 Árvore Estruturas estudadas até agora não são \ adequadas para representar dados que devem ser dispostos de maneira hierárquica Ex., hierarquia de pastas

Leia mais

DAINF - Departamento de Informática

DAINF - Departamento de Informática DAINF - Departamento de Informática Algoritmos 2 - Árvore binária de busca Prof. Alex Kutzke ( http://alex.kutzke.com.br/courses ) 30 de Novembro de 2015 Slides adaptados do material produzido pelo Prof.

Leia mais

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich Árvores Binárias SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista. Figuras editadas por Isadora Maria Mendes http://www.icmc.usp.br/~paulovic

Leia mais

Algoritmos e estrutura de dados

Algoritmos e estrutura de dados Algoritmos e estrutura de dados Listas Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. Conteúdo Listas Listas encadeadas

Leia mais

ESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres

ESTRUTURA DE DADOS. Árvores, árvores binárias e percursos. Cristina Boeres ESTRUTURA DE DADOS Árvores, árvores binárias e percursos Cristina Boeres 2 Árvores! utilizada em muitas aplicações! modela uma hierarquia entre elementos árvore genealógica diagrama hierárquico de uma

Leia mais

Estrutura de Dados. Diego Silveira Costa Nascimento

Estrutura de Dados. Diego Silveira Costa Nascimento Estrutura de Dados Diego Silveira Costa Nascimento Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Norte diego.nascimento@ifrn.edu.br 31 de agosto de 2017 Ementa do Curso 1 Introdução

Leia mais

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Heaps Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Introdução Definição de Heap Heap Binária Implementação com vetor Fila de Prioridades

Leia mais

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva DCC-FCUP. Estruturas de Dados. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38

8. Árvores. Fernando Silva. Estruturas de Dados DCC-FCUP. Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 8. Árvores Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 8. Árvores Estruturas de Dados 1 / 38 Árvores - estruturas não lineares (1) Uma lista é um exemplo de uma estrutura de dados

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas

Pedro Vasconcelos DCC/FCUP. Programação Funcional 16 a Aula Árvores equilibradas Programação Funcional 16 a Aula Árvores equilibradas Pedro Vasconcelos DCC/FCUP 2014 Aula anterior Operações sobre árvores binárias ordenadas: 1 pesquisa; 2 inserção; 3 remoção. Estas operações são mais

Leia mais

if not(isinstance(a, int)) or a < 0: raise ValueError ( misterio: arg devia ser inteiro nao negativo ) else: return misterio_aux(a, a + 1)

if not(isinstance(a, int)) or a < 0: raise ValueError ( misterio: arg devia ser inteiro nao negativo ) else: return misterio_aux(a, a + 1) Capítulo 7 Recursão e iteração 1. (1) Considere a seguinte função: def misterio(a): def misterio_aux(b, c): if b == 0: return True elif c == 0: return False return misterio_aux(b - 2, c - 2) if not(isinstance(a,

Leia mais

Árvores. Prof. César Melo DCC/ICE/UFAM

Árvores. Prof. César Melo DCC/ICE/UFAM Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não podem ser usadas como hierarquias. Exemplo: árvore

Leia mais

Fundamentos de Algoritmos

Fundamentos de Algoritmos Fundamentos de Algoritmos CIC/UFRGS 2006/1 Mais em definições auto-referenciáveis: roteiro Estruturas em estruturas: exemplo das árvores de hereditariedade Árvores binárias de pesquisa Listas de listas

Leia mais

Teste de Funções por Partição do Espaço de Entrada

Teste de Funções por Partição do Espaço de Entrada Teste de Funções por Partição do Espaço de Entrada Programação II Universidade de Lisboa Faculdade de Ciências Departamento de Informática Licenciatura em Tecnologias da Informação Vasco Thudichum Vasconcelos

Leia mais

Fundamentos da Programação

Fundamentos da Programação Fundamentos da Programação Solução do Primeiro Teste 27 de Outubro de 2012 09:00 10:30 1. (1.0) O que é um processo computacional? Qual a relação entre um programa e um processo computacional? Um processo

Leia mais

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m

FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m FUNDAMENTOS DA PROGRAMAÇÃO 1º Teste, 19 de abril de 2013, 1h30m 1. (1.5) Considere a seguinte gramática em notação BNF: ::= , ::= ::=

Leia mais

Listas, conjuntos e dicionários

Listas, conjuntos e dicionários Listas, conjuntos e dicionários Marco A L Barbosa malbarbo.pro.br Departamento de Informática Universidade Estadual de Maringá cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual

Leia mais

Programação com objectos

Programação com objectos Capítulo 12 Programação com objectos And I haven t seen the two Messengers, either. They re both gone to the town. Just look along the road, and tell me if you can see either of them. Lewis Carroll, Through

Leia mais

Árvores Binárias de Busca (ABB) 18/11

Árvores Binárias de Busca (ABB) 18/11 Árvores Binárias de Busca (ABB) 18/11 Definição Uma Árvore Binária de Busca possui as mesmas propriedades de uma AB, acrescida da seguintes propriedade: Para todo nó da árvore, se seu valor é X, então:

Leia mais

Árvores. Prof. César Melo DCC/ICE/UFAM

Árvores. Prof. César Melo DCC/ICE/UFAM Árvores Prof. César Melo DCC/ICE/UFAM Introdução As estruturas anteriores são chamadas de unidimensionais (ou lineares) Exemplo são vetores e listas Não adequadas para representar hierarquias. Exemplo:

Leia mais

Introdução à Programação / Programação I

Introdução à Programação / Programação I Introdução à Programação / Programação I Aula 19: Mais exemplos de recursão Rita P. Ribeiro 2018/2019 Departamento de Ciência de Computadores Nesta aula 1. Desenhar árvores 2. Torre de Hanoi 3. Ordenação

Leia mais

Árvores & Árvores Binárias

Árvores & Árvores Binárias Árvores & Árvores Binárias Problema Implementações do TAD Lista Linear Lista encadeada eficiente para inserção e remoção dinâmica de elementos, mas ineficiente para busca Lista seqüencial (ordenada) Eficiente

Leia mais

Prova de Recuperação PMR3201 1o. semestre 2017 Prof. Thiago Martins

Prova de Recuperação PMR3201 1o. semestre 2017 Prof. Thiago Martins Prova de Recuperação PMR3201 1o. semestre 2017 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. Numere cada página. Indique o total de páginas na primeira página.

Leia mais

Estruturas de Dados Pilhas, Filas, Listas

Estruturas de Dados Pilhas, Filas, Listas Estruturas de Dados Pilhas, Filas, Listas Fabio Gagliardi Cozman Thiago Martins PMR3201 Escola Politécnica da Universidade de São Paulo Estruturas de Dados Pilhas, Filas, Listas Introdução Estruturas de

Leia mais

Ficheiros de Valores Separados por Vírgulas (CSV)

Ficheiros de Valores Separados por Vírgulas (CSV) Ficheiros de Valores Separados por Vírgulas (CSV) Programação II Universidade de Lisboa Faculdade de Ciências Departamento de Informática Licenciatura em Tecnologias da Informação Vasco Thudichum Vasconcelos

Leia mais

MAC2166 Introdução à Computação

MAC2166 Introdução à Computação MAC2166 Introdução à Computação Escola Politécnica Primeiro Semestre de 2015 Prova 3 Departamento de Ciência da Computação IME USP QUESTÃO 1 Nesta questão considere expressões na forma posfixa como no

Leia mais

4 C odigos de Huffman 4.1 Arvores de c odigo folhas os internos n ıvel altura Arvore bin aria arvore bin aria ordenada

4 C odigos de Huffman 4.1 Arvores de c odigo folhas os internos n ıvel altura Arvore bin aria arvore bin aria ordenada 4 Códigos de Huffman 4.1 Árvores de código Numa árvore qualquer, os nós que não têm filhos são chamados de folhas e os demais nós são chamados de nós internos. Se um nó de uma árvore é filho de outro,

Leia mais

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação

Árvores Binárias. 9/11 e 11/11 Conceitos Representação e Implementação Árvores Binárias 9/11 e 11/11 Conceitos Representação e Implementação Árvore Binárias (AB) Uma Árvore Binária (AB) T é um conjunto finito de elementos, denominados nós ou vértices, tal que: (i) Se T =,

Leia mais

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira.

Algoritmos e Estrutura de Dados II. Árvore. Prof a Karina Oliveira. Algoritmos e Estrutura de Dados II Árvore Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estruturas de dados lineares (pilha, fila) são estruturas que guardam coleções de elementos que são acessados

Leia mais

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos Programação Funcional 13 a Aula Definição de tipos Pedro Vasconcelos DCC/FCUP 2014 Declarações de sinónimos Podemos dar um nome novo a um tipo existente usando uma declaração de sinónimo. Exemplo (do prelúdio-padrão):

Leia mais

DURAÇÃO DA PROVA: 2 horas

DURAÇÃO DA PROVA: 2 horas MAC2166 Introdução à Computação Grande Áreas Civil, Mecânica, Petróleo e Química Escola Politécnica Terceira Prova 21 de junho de 2016 Nome: Assinatura: N o USP: Turma: Professor: Instruções: 1. Não destaque

Leia mais

MCG114 Programação de Computadores I. Comandos de condição 3/26/18. Comando if. Comando if. Até agora... Comandos de Condição! Comandos de Condição

MCG114 Programação de Computadores I. Comandos de condição 3/26/18. Comando if. Comando if. Até agora... Comandos de Condição! Comandos de Condição 3/26/18 MCG114 Programação de Computadores I Profa. Comandos de condição 20:32:09 1 2 Até agora... Todos os programas têm fluxo de execução único As instruções que serão executadas são sempre as mesmas,

Leia mais

Fundamentos de Programação

Fundamentos de Programação Licenciatura em Engenharia Informática e de Computadores Fundamentos de Programação Trabalho para casa 22 de Setembro de 2008 Este trabalho corresponde à instalação, no seu computador, do interpretador

Leia mais

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação.

Árvores de Pesquisa. A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação. Árvores de Pesquisa A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar informação. Particularmente adequada quando existe necessidade de considerar todos ou alguma combinação

Leia mais

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD

Árvores Binárias. 16/11 Representação e Implementação: Encadeada Dinâmica O TAD Árvores Binárias 16/11 Representação e Implementação: Encadeada Dinâmica O TAD ED AB, encadeada dinâmica Para qualquer árvore, cada nó é do tipo info esq dir typedef int elem; typedef struct arv *Arv;

Leia mais

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores

MC102 - Algoritmos e programação de computadores. Aula 16: Busca e Ordenação em vetores MC102 - Algoritmos e programação de computadores Aula 16: Busca e Ordenação em vetores Busca Dada uma coleção de n elementos, pretende-se saber se um determinado elemento valor está presente nessa coleção.

Leia mais

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA ÁRVORES E ÁRVORE BINÁRIA DE BUSCA Prof. André Backes Definição 2 Diversas aplicações necessitam que se represente um conjunto de objetos e as suas relações hierárquicas Uma árvore é uma abstração matemática

Leia mais

Introdução à Programação Aula 16 Mais exemplos de recursão

Introdução à Programação Aula 16 Mais exemplos de recursão Introdução à Programação Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP 2014 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 16 Mais exemplos de recursão 2014 1 / 22 Nesta aula

Leia mais

Técnicas Inteligência Artificial

Técnicas Inteligência Artificial Universidade do Sul de Santa Catarina Ciência da Computação Técnicas Inteligência Artificial Aula 03 Métodos de Busca Parte 1 Prof. Max Pereira Solução de Problemas como Busca Um problema pode ser considerado

Leia mais

Programação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP

Programação I Aula 19 Aritmética com racionais Pedro Vasconcelos DCC/FCUP Programação I Aula 19 Aritmética com racionais DCC/FCUP DCC/FCUP 2019 1/ 30 Nesta aula 1 Aritmética com racionais 2 Simplificação 3 Operações 4 Comparações DCC/FCUP 2019 2/ 30 Aritmética com racionais

Leia mais

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Programação II Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio Árvores Dados organizados de maneira hierárquica Exemplos: arquivos em diretórios, subdivisão de espaço 2D em um

Leia mais

Árvores & Árvores Binárias

Árvores & Árvores Binárias SCE 182 SCC122 Algoritmos Estruturas e Estruturas de Dados de Dados I Árvores & Árvores Binárias Prof. Material Original: Walter Aoiama Nagai; Maria das Graças Volpe Nunes; Definições Árvore T é um conjunto

Leia mais

Árvores & Árvores Binárias

Árvores & Árvores Binárias SCE 182 SCC122 Algoritmos Estruturas e Estruturas de Dados de Dados I Árvores & Árvores Binárias Prof. Material Original: Walter Aoiama Nagai; Maria das Graças Volpe Nunes; Definições Árvore T é um conjunto

Leia mais

Programação com objectos

Programação com objectos Capítulo 11 Programação com objectos Nos exercícios deste capítulo, deve validar os argumentos dos construtores, mas não deve validar os argumentos dos outros métodos, a não ser que isso seja pedido explicitamente.

Leia mais

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 Árvores Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 2 Árvore Binária de Busca Definição: uma árvore binária de busca (ABB) é uma árvore binária na qual

Leia mais

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Pesquisa em Memória Primária Árvores de Busca. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Pesquisa em Memória Primária Árvores de Busca David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Árvores de Pesquisa A árvore de pesquisa é uma estrutura de dados muito eficiente para armazenar

Leia mais

ÍNDICE. Árvores (Definição e terminologias) 2. Árvores Binárias 4. Armazenamento de Árvores Binárias 5. Aplicação 6. Como percorrê-la 6.

ÍNDICE. Árvores (Definição e terminologias) 2. Árvores Binárias 4. Armazenamento de Árvores Binárias 5. Aplicação 6. Como percorrê-la 6. Árvores Seminário de Matemática Discreta Componentes: Rogério Caetano Cardoso, Nino Prates Arcanjo, Leonardo Duarte Vencioneck, Vinicius Maia. Professor: Leandro Colombi Resendo Curso: Bacharelado em Sistema

Leia mais

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26

MATRIZES - PARTE Mais exemplos Multiplicação de duas matrizes AULA 26 AULA 26 MATRIZES - PARTE 2 26. Mais exemplos Nesta aula, veremos mais dois algoritmos envolvendo matrizes. O primeiro deles calcula a matriz resultante da multiplicação de duas matrizes e utiliza três

Leia mais

ADT - Árvores. ADT Árvores Definição

ADT - Árvores. ADT Árvores Definição ADT - Árvores Outro tipo abstrato de dados (ADT) é a árvore. Como acontece com as listas, a utilização das árvores será basicamente como estruturas de dados ao invés de tipos de dados. Ou seja, o foco

Leia mais

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações:

Filas de Prioridade. Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: Filas de Prioridade e Heaps 9.1 Filas de Prioridade Uma fila de prioridade pode ser vista como uma generalização das filas com as seguintes duas operações: inserir um elemento na fila; remover o elemento

Leia mais

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática Estrutura de Dados Algoritmos de Ordenação Prof. Othon M. N. Batista Mestre em Informática Roteiro Introdução Ordenação por Inserção Insertion Sort Ordenação por Seleção Selection Sort Ordenação por Bolha

Leia mais

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas) Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 Lista Obrigatória 02 - Prof. Rafael Oliveira (Deve ser entregue em PDF via Moodle: Escolha apenas 5 exercícios para entrega) Exercício 01

Leia mais

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias

Aula de hoje. Tipos de Dados e Variáveis. Constantes literais. Dados. Variáveis. Tipagem dinâmica. SCC Introdução à Programação para Engenharias SCC 12 - Introdução à Programação para Engenharias Tipos de Dados e Variáveis Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes

Leia mais

Computação II (MAB 225)

Computação II (MAB 225) Computação II (MAB 225) Fabio Mascarenhas - 2015.1 http://www.dcc.ufrj.br/~fabiom/pythonoo Introdução No curso de Computação I vocês viram os conceitos básicos de programação em Python: expressões e comandos,

Leia mais

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira Árvores SCC-202 Algoritmos e Estruturas de Dados I Lucas Antiqueira Listas e árvores Listas lineares Um nó após o outro, adjacentes Nó sucessor e antecessor Diversas aplicações necessitam de estruturas

Leia mais

Estruturas de dados e algoritmos fundamentais

Estruturas de dados e algoritmos fundamentais Ministério da Ciência, Tecnologia e Ensino Superior U.C. 21046 Estruturas de dados e algoritmos fundamentais 21 de Junho de 2013 INSTRUÇÕES PARA A RESOLUÇÃO DO EXAME, ACONSELHA-SE QUE LEIA ATENTAMENTE

Leia mais

The time has come, the walrus said, to talk of many things: Of shoes and ships - and sealing wax - of cabbages and kings

The time has come, the walrus said, to talk of many things: Of shoes and ships - and sealing wax - of cabbages and kings Capítulo 13 Estruturas lineares The time has come, the walrus said, to talk of many things: Of shoes and ships - and sealing wax - of cabbages and kings Lewis Carroll, Alice s Adventures in Wonderland

Leia mais

Fundamentos de Programação

Fundamentos de Programação Fundamentos de Programação Solução do Segundo Teste 23 de Janeiro de 2012 09:00 10:30 Nome: Número: 1. (1.0) Explique em que consiste a abstracção de dados, usando os termos barreiras de abstracção, encapsulação

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio;

UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio; UNIVERSIDADE DE SÃO PAULO ICMC SCC 202 Algoritmos e Estrutura de Dados I - 2º Semestre 2010 Profa. Sandra Maria Aluísio; e-mail: sandra@icmc.usp.br Lista de Exercícios Árvores, Árvores Binárias, Árvores

Leia mais

Métodos de Ordenação Parte 3

Métodos de Ordenação Parte 3 Estrutura de Dados II Métodos de Ordenação Parte 3 Prof a Márcio Bueno ed2tarde@marciobueno.com / ed2noite@marciobueno.com Material baseado nos materiais do Prof. Robson Lins Classificação em Memória Primária

Leia mais

INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2

INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2 INTRODUÇÃO À COMPUTAÇÃO - RESUMO E EXERCÍCIOS* P2 *Exercícios de provas anteriores escolhidos para você estar preparado para qualquer questão na prova. Resoluções em simplificaaulas.com. Listas(= tipo

Leia mais

2.3.4 Algoritmos de SAT

2.3.4 Algoritmos de SAT 114 CAÍTULO 2. LÓGICA ROOSICIONAL 2.3.4 Algoritmos de SAT Os algoritmos de SAT (do inglês satisfiability ) têm o objectivo de determinar se uma dada fbf α é satisfazível ou não; em caso afirmativo, devolvem

Leia mais

Faculdade de Computação

Faculdade de Computação UNIVERSIDADE FEDERAL DE UBERLÂNDIA Faculdade de Computação Disciplina : Teoria da Computação - 1 0 Semestre 007 Professora : Sandra Aparecida de Amo Solução da Lista de Exercícios n o 1 Exercícios de Revisão

Leia mais

Python. Resumo e Exercícios P3

Python. Resumo e Exercícios P3 Python Resumo e Exercícios P3 Resuminho Teórico Classes e Objetos Tudo em python é um objeto, objetos são instâncias de classes, como int, float, list, etc. a = 5 # a é um objeto da classe int b = 2.0

Leia mais

ÁRVORE BINÁRIA DE BUSCA

ÁRVORE BINÁRIA DE BUSCA ÁRVORE BINÁRIA DE BUSCA Introdução O algoritmo de busca binária em vetores tem bom desempenho e deve ser usado quando temos os dados já ordenados. No entanto, se precisarmos inserir e remover elementos

Leia mais

4 Conceito de Herança

4 Conceito de Herança 4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança

Leia mais

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

Lista Ordenada. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Lista Ordenada Estrutura de Dados Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35 Conteúdo Definição Operações Representações Contígua Encadeada Aplicação Exercícios 2

Leia mais

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1. Cotação de cada pergunta: 1. 32 / 2. 38 / 3. 30 (Total: 100 pontos) 2. Responda às questões de forma clara e concisa nas folhas de exame distribuídas. 1. (Valorização: 32%) Responda às seguintes questões:

Leia mais

Programação orientada a objetos

Programação orientada a objetos Programação orientada a objetos Python fornece suporte para programação orientada a objetos: foco na criação de objetos, contendo simultaneamente dados e funcionalidade definição de objetos corresponde

Leia mais

Árvores Binárias de Busca (ABB) 18/11

Árvores Binárias de Busca (ABB) 18/11 Árvores Binárias de Busca (ABB) 18/11 Definição Uma Árvore Binária de Busca possui as mesmas propriedades de uma AB, acrescida da seguintes propriedade: Para todo nó da árvore, se seu valor é X, então:

Leia mais

O Pronome CREATOR 4.1. O objeto criador do objeto corrente

O Pronome CREATOR 4.1. O objeto criador do objeto corrente 4 O Pronome CREATOR Neste capítulo, é explorado o pronome CREATOR. Na Seção 4.1, a relação entre o objeto corrente e seu criador é explicada. Na Seção 4.2, são mostradas as transformações de código necessárias

Leia mais

Departamento de Matemática da Universidade de Coimbra 2011/2012 Programação Orientada para os Objectos Projecto 2

Departamento de Matemática da Universidade de Coimbra 2011/2012 Programação Orientada para os Objectos Projecto 2 Departamento de Matemática da Universidade de Coimbra 2011/2012 Programação Orientada para os Objectos Projecto 2 Simulador de um Sistema de Filas de Espera Descrição Sumária: Uma empresa proprietária

Leia mais

Introdução a AVL: teoria e prática. 22/11, 25/11 e 30/11

Introdução a AVL: teoria e prática. 22/11, 25/11 e 30/11 Introdução a AVL: teoria e prática 22/11, 25/11 e 30/11 Árvores binárias de busca (ABB) Árvores de grau 2, isto é, cada nó tem dois filhos, no máximo Raiz B A C Terminologia: filho esquerdo filho direito

Leia mais

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias SCC 124 - Introdução à Programação para Engenharias Comandos Professor: André C. P. L. F. de Carvalho, ICMC-USP Pos-doutorando: Isvani Frias-Blanco Monitor: Henrique Bonini de Britto Menezes 1 Aula de

Leia mais