Estrutura de Dados Grafos e Árvores Prof. Pedro Luís Antonelli Anhanguera Educacional Conceitos Básicos Grafo: conjunto de vértices ( nós) e arestas ( arcos). Vértice: objeto simples que pode ter nome e outros atributos. Aresta: conexão entre dois vértices. Notação: G = (V,A), onde: G: grafo V: conjunto de vértices A: conjunto de arestas Um grafo é dito ponderado se possui pesos associados as suas arestas. Grafos Direcionados ( Dígrafos ) Um grafo direcionado G é um par (V,A), onde V é um conjunto finito de vértices e A é uma relação binária em V . Uma aresta (u, v) sai do vértice u e entra no vértice v. O vértice v é adjacente ao vértice u. Podem existir arestas de um vértice para ele mesmo, chamadas de self-loops. Grafos Não Direcionados Um grafo não direcionado G é um par (V,A), onde o conjunto de arestas A é constituído de pares de vértices não ordenados. As arestas (u, v) e (v, u) são consideradas como uma única aresta. A relação de adjacência é simétrica. Self-loops não são permitidos. Grau de um vértice Em grafos não direcionados o grau de um vértice é o número de arestas que incidem nele. Um vértice de grau zero é dito isolado ou não conectado. Exemplo: Os vértices 0, 1e 2 tem grau 2; Os vértices 4 e 5 tem grau 1; O vértice 3 é isolado. Grau de um vértice Em grafos direcionados o grau de um vértice é o número de arestas que saem dele mais o número de arestas que chegam nele. Exemplo: Os vértices 0 e 1 tem grau 3; Os vértice 2 e 3 tem grau 4; Os vértices 4 e 5 tem grau 1. Representação de um grafo: Matriz de Adjacência A matriz de adjacência de um grafo não ponderado G = (V,A) contendo n vértices é uma matriz n × n de bits, onde A[ i, j ] é 1 se existir um arco do vértice i para o vértice j. Representação de um grafo: Matriz de Adjacência Para grafos ponderados a matriz de adjacência de um G = (V,A) contendo n vértices é uma matriz n × n de valores, onde A[ i, j ] contém o rótulo ou peso associado com a aresta se existir um arco do vértice i para o vértice j. Se não existir uma aresta de i para j então é necessário utilizar um valor que não possa ser usado como rótulo ou peso. Representação de um grafo: Lista de Adjacência Um grafo pode ser representado por uma lista onde cada elemento representa um vértice e aponta para outra lista contendo os vértices adjacentes a ele. Exemplo de grafo Exemplo de grafo – representação em “C” Exemplo de Lista de Adjacência Grafos- Aplicações Representação de sistemas de transporte e movimentação Grafos- Aplicações Representação de trajetos em sistemas de direcionamento Grafos- Aplicações Pesquisas de informações na Internet Grafos- Aplicações Construção de circuitos eletrônicos Grafos- Aplicações Representação das ligações entre átomos e moléculas Grafos- Aplicações Análise da compatibilidade entre impressões digitais Grafos - Árvores Um tipo de grafo acíclico, particularmente importante para a área de pesquisa de dados á a Árvore. Podemos definir um grafo do tipo Árvore, como sendo: Conjunto de nós e conjunto de arestas ( ramos )que ligam pares de nós. Um nó em particular é a raiz; Com exceção da raiz, todo o nó está ligado por uma aresta a 1 e somente 1 só nó (o pai ); Há um caminho único da raiz a cada nó; O tamanho do caminho para um nó ( profundidade ) é o número de arestas a percorrer. Árvores – Representação Gráfica RAIZ ARESTA NÓ FOLHAS Árvores - Características Árvores Binárias Uma árvore é dita binária quando em que cada nó tem zero, um ou dois filhos. Quando uma árvore binária não possui filhos é dita vazia. Uma árvore binária não vazia ou possui um nó chamado raiz e até mais duas árvores binárias disjuntas chamadas sub-árvore esquerda e sub-árvore direita. RAIZ SUB-ÁRVORE ESQUERDA SUB-ÁRVORE ESQUERDA SUB-ÁRVORE DIREITA Árvores Binárias - Propriedades Uma árvore binária não vazia com profundidade h tem no mínimo h+1, e no máximo 2 (h+1 ) - 1 nós; A profundidade de uma árvore com n elementos ( n>0 ) é no mínimo log2n, e no máximo n-1. Árvores Estritamente Binárias Uma Árvore Estritamente Binária é aquela que tem nós que possuem 0 ou dois filhos. Nós interiores (nós que não são folhas) possuem sempre 2 filhos. Árvore Binária Completa Uma Árvore Binária Completa é aquela que é estritamente binária de nível x e com todos os nós-folhas no mesmo nível x. Percorrer Árvores Binárias Os elementos de uma árvore (binária) podem ser enumerados por quatro ordens diferentes. As três primeiras definem-se recursivamente: Pré-ordem: Primeiro a raiz, depois a sub-árvore esquerda, e finalmente a subárvore direita Em-ordem: Primeiro a sub-árvore esquerda, depois a raiz, e finalmente a subárvore direita Pós-ordem: Primeiro a sub-árvore esquerda, depois a sub-árvore direita, e finalmente a raiz Por nível: Os nós são processados por nível (profundidade) crescente, e dentro de cada nível, da esquerda para a direita Percorrer Árvores Binárias Exemplos de passeios em árvores: Árvore Binária – Representação Estática Uma árvore binária pode ser representada por uma Lista Estática ( vetor ). Essa representação é extremamente compacta., e permite caminhar pelos nós da árvore facilmente. Os filhos de um nó i estão nas posições 2i e 2i + 1 ( atenção ao primeiro emento!) O pai de um nó i está na posição i div 2 ( divisão inteira por 2). Árvore Binária – Representação Dinâmica Uma árvore binária pode ser representada por uma Lista Dinâmica ( ponteiros). Para implementar um árvore binária em “C”, devemos criar um estrutura que contenhas as seguintes partes: - Um ponteiro para o nó raiz, a informação propriamente dita; - Um ponteiro para a sub-árvore à esquerda e um ponteiro para a sub-árvore à direita. BIBLIOGRAFIA W. Celes, W. R. Cerqueira, J.L. Rangel. Introdução a Estruturas de Dados com técnicas de programação em C Ed. Campus TENENBAUM, Aaron M. Estrutura de Dados Usando C. 1ª ed. São Paulo: PEARSON EDUCATION, 2005. VELOSO, Paulo A. S.. Estrutura de Dados. 1ª ed. Rio de Janeiro: Campus, 1996. PEREIRA, Silvio do Lago. Estrutura De Dados Fundamentais : Conceitos E Aplicações. 12ª ed. São Paulo: Érica, 2008 MANZANO, José Augusto N. Garcia. Algoritmos : Lógica para desenvolvimento de programação de computadores. 21ª ed.São Paulo: Érica, 2008. FORBELLONE, A. L.. Lógica De Programação. 1ª ed. São Paulo: Pearson, 2008. CORMEN, Thomas H.. Algoritmos : Teoria e Prática. 2ª ed. Rio de Janeiro: Campus, 2002. https://programacaodescomplicada.wordpress.com/ http://www.jacintomendes.eti.br/mackenzie/peii/aulas/ sandra/PEII_Aula12.pdf. Acesso em 02/02/2012 http://www.dainf.ct.utfpr.edu.br/~karla/ Acesso em 02/02/2012 http://www.rcosta62br.unifei.edu.br Acesso em 03/02/2012 http://gaveta-virtual.blogspot.com.br/2011/06/filas.html Acesso em 10/04/2012 http://www.cin.ufpe.br/~rv2/mprof/seminario-mprof-20150303.html#7 https://sites.google.com/site/andrenunosouto/coisas-de-matematica/teoria-de http://www.scielo.br/scielo.php?script=sci_arttext&pid=S010174382002000100002#fig06 http://www.ebah.com.br/content/ABAAAe8rYAE/aula-grafos1 https://valdecircosta.wordpress.com/grafos/ Gulilherme, Ivan. R - Notas de aula do curso de IA – Unesp – RC