<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Brenner Cruvinel - grafos</title>
    <subtitle>AI researcher and product designer building at the edge of computer science and mental health.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://brennercruvinel.blog/tags/grafos/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://brennercruvinel.blog"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2016-05-14T00:00:00+00:00</updated>
    <id>https://brennercruvinel.blog/tags/grafos/atom.xml</id>
    <entry xml:lang="en">
        <title>Teoria dos Grafos: Fundamentos, História e Representação</title>
        <published>2016-05-14T00:00:00+00:00</published>
        <updated>2016-05-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/blog/teoria-dos-grafos/"/>
        <id>https://brennercruvinel.blog/blog/teoria-dos-grafos/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/blog/teoria-dos-grafos/">&lt;h2 id=&quot;definicao&quot;&gt;definição&lt;&#x2F;h2&gt;
&lt;p&gt;a teoria dos grafos é o ramo da matemática que estuda as relações entre objetos de um conjunto. usa estruturas chamadas grafos, $G(V, E)$, onde $V$ é um conjunto não vazio de objetos chamados vértices (ou nós) e $E$ (do inglês &lt;em&gt;edges&lt;&#x2F;em&gt;, arestas) é um subconjunto de pares não ordenados de $V$.&lt;&#x2F;p&gt;
&lt;p&gt;dependendo da aplicação, a aresta pode ou não ter direção, pode ser permitido ou não uma aresta ligar um vértice a ele próprio, e vértice e aresta podem ter um peso numérico associado. se a aresta tem sentido (indicado por uma seta), temos um dígrafo (grafo orientado). um grafo com um único vértice e sem aresta é o grafo trivial.&lt;&#x2F;p&gt;
&lt;p&gt;estrutura representável por grafo está em toda parte. a estrutura de ligações da wikipedia, por exemplo, é um dígrafo: os vértices são os artigos, e existe uma aresta de A para B se e somente se A contém um link para B. dígrafo também representa máquina de estado finito.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;historia&quot;&gt;história&lt;&#x2F;h2&gt;
&lt;p&gt;o artigo de leonhard euler, publicado em 1736, sobre o problema das sete pontes de Königsberg, é considerado o primeiro resultado da teoria dos grafos. é também um dos primeiros resultados topológicos em geometria, não depende de medida, o que ilustra a conexão profunda entre teoria dos grafos e topologia.&lt;&#x2F;p&gt;
&lt;p&gt;mais de um século depois, enquanto Listing introduzia o conceito de topologia, Cayley estudou uma classe particular de grafos, as árvores, por interesse em formas analíticas do cálculo diferencial, com implicação na química teórica. o primeiro livro didático sobre teoria dos grafos foi escrito por Dénes König, publicado em 1936.&lt;&#x2F;p&gt;
&lt;p&gt;o problema das quatro cores (“é possível colorir qualquer mapa dividido em regiões com apenas quatro cores, de forma que região vizinha não partilhe a mesma cor?”) foi notado primeiro por August Möbius em 1840 e levado adiante por Francis Guthrie em 1852.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicoes-basicas&quot;&gt;definições básicas&lt;&#x2F;h2&gt;
&lt;p&gt;um grafo direcionado (dígrafo, ou &lt;em&gt;quiver&lt;&#x2F;em&gt;) consiste de um conjunto $V$ de vértices (não vazio), um conjunto $E$ de arestas, e mapas $s, t : E \to V$, onde $s(e)$ é a fonte e $t(e)$ é o alvo da aresta direcionada $e$.&lt;&#x2F;p&gt;
&lt;p&gt;um grafo não direcionado é dado por $V$, $E$ e uma função $w : E \to P(V)$ que associa a cada aresta um subconjunto de dois (ou de um) elemento de $V$, os pontos terminais.&lt;&#x2F;p&gt;
&lt;p&gt;num grafo com peso, uma função adicional $E \to \mathbb{R}$ associa um custo a cada aresta. esse tipo de grafo aparece em problema de rota ótima, como o caixeiro viajante.&lt;&#x2F;p&gt;
&lt;p&gt;grafo de exemplo: $V = {1, 2, 3, 4, 5, 6}$ e $E = {{1,2}, {1,5}, {2,3}, {2,5}, {3,4}, {4,5}, {4,6}}$. a representação gráfica não deve ser confundida com o grafo em si, a estrutura abstrata. o que importa é qual vértice está conectado a qual, por quantas arestas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;armazenamento-em-computador&quot;&gt;armazenamento em computador&lt;&#x2F;h2&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;duas famílias de estrutura, com o trade-off clássico de memória contra velocidade de acesso.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;estrutura tipo lista (grafo esparso, menos memória): lista de adjacência (associa a cada vértice a lista dos vértices com que tem aresta) e lista de incidência (lista de arestas incidentes a cada vértice).&lt;&#x2F;p&gt;
&lt;p&gt;estrutura tipo matriz (acesso rápido, mais memória): matriz de incidência (0 e 1, linha é vértice, coluna é aresta) e matriz de adjacência (linha e coluna são vértices, 1 indica adjacência). na computação, um grafo finito com $n$ vértices costuma ser representado pela matriz de adjacência $n \times n$, cujo valor na linha $i$ coluna $j$ dá o número de arestas do $i$-ésimo ao $j$-ésimo vértice.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conceitos&quot;&gt;conceitos&lt;&#x2F;h2&gt;
&lt;p&gt;valência (ou grau) de um vértice: número de arestas incidentes a ele (laço conta duas vezes). o lema do aperto de mão diz que a soma dos graus de todos os vértices é o dobro do número de arestas:&lt;&#x2F;p&gt;
&lt;p&gt;$$2m = \sum_{v \in V} \deg(v)$$&lt;&#x2F;p&gt;
&lt;p&gt;num dígrafo, distingue-se grau de saída e grau de entrada.&lt;&#x2F;p&gt;
&lt;p&gt;passeio entre A e B: lista alternada de vértice e aresta. o tamanho é o número de arestas, contando repetição. caminho: sequência de vértices em que de cada um existe aresta para o seguinte. caminho simples: nenhum vértice se repete.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;caminho euleriano usa cada aresta exatamente uma vez. ciclo euleriano é o ciclo que faz isso. determinar se existe é trivial.&lt;&#x2F;li&gt;
&lt;li&gt;caminho hamiltoniano visita cada vértice exatamente uma vez. ciclo hamiltoniano faz isso e fecha. determinar se existe é trabalhoso.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;ciclo (ou circuito): caminho que começa e acaba no mesmo vértice. ciclo de comprimento 1 é laço. um grafo é acíclico se não contém ciclo simples.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tipos-de-grafo&quot;&gt;tipos de grafo&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;tipo&lt;&#x2F;th&gt;&lt;th&gt;definição&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;simples&lt;&#x2F;td&gt;&lt;td&gt;não direcionado, sem laço, no máximo uma aresta entre dois vértices&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;multigrafo&lt;&#x2F;td&gt;&lt;td&gt;permite múltiplas arestas entre os mesmos vértices&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;pseudografo&lt;&#x2F;td&gt;&lt;td&gt;contém aresta paralela e laço&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;completo&lt;&#x2F;td&gt;&lt;td&gt;cada vértice liga a todos os outros; $K_n$ tem $n(n-1)&#x2F;2$ arestas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;nulo&lt;&#x2F;td&gt;&lt;td&gt;conjunto de vértices vazio&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;vazio&lt;&#x2F;td&gt;&lt;td&gt;conjunto de arestas vazio&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;regular&lt;&#x2F;td&gt;&lt;td&gt;todos os vértices com o mesmo grau&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;conexo&lt;&#x2F;td&gt;&lt;td&gt;existe caminho de qualquer vértice a qualquer outro; $k$-conexo se isso vale após remover $k-1$ vértices&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;árvore&lt;&#x2F;td&gt;&lt;td&gt;grafo simples, acíclico e conexo; às vezes um vértice é a raiz&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;floresta&lt;&#x2F;td&gt;&lt;td&gt;conjunto de árvores (acíclico)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;planar&lt;&#x2F;td&gt;&lt;td&gt;representável no plano sem cruzar aresta; $K_n$ com $n &amp;gt; 4$ não é planar&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;bipartido&lt;&#x2F;td&gt;&lt;td&gt;vértices em dois conjuntos, sem aresta dentro do mesmo conjunto; é bipartido sse não contém ciclo de comprimento ímpar&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;além desses: subgrafo, subgrafo gerador, subgrafo induzido e grafo parcial; ponto de articulação (vértice cuja remoção desconecta o grafo) e ponte (aresta com o mesmo efeito); clique (subgrafo que também é completo); conjunto independente (vértice não adjacente entre si); grafo bipartido completo e grafo $k$-partido ($k$-coloração); e o teorema das quatro cores, que diz que todo grafo planar pode ser colorido com quatro cores.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;percurso-e-algoritmo&quot;&gt;percurso e algoritmo&lt;&#x2F;h2&gt;
&lt;p&gt;percorrer um grafo é visitar de modo sistemático todo vértice e toda aresta. os dois básicos:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;abbr title=&quot;busca em largura, breadth-first search&quot;&gt;BFS&lt;&#x2F;abbr&gt; usa fila. visita cada nó começando do menor nível, da esquerda para a direita. computa a menor distância para todos os vértices alcançáveis. o subgrafo dos caminhos é a &lt;em&gt;breadth-first tree&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;abbr title=&quot;busca em profundidade, depth-first search&quot;&gt;DFS&lt;&#x2F;abbr&gt; usa pilha. expande o primeiro nó filho e se aprofunda até achar o alvo ou uma folha, aí retrocede (&lt;em&gt;backtrack&lt;&#x2F;em&gt;). gasta menos espaço que a BFS.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;a complexidade de tempo das duas é proporcional ao número de vértices mais o de arestas.&lt;&#x2F;p&gt;
&lt;p&gt;problemas e algoritmos que orbitam isso: coloração de grafo, teorema das quatro cores, conjunto independente, clique, caminho mínimo, árvore geradora mínima, as sete pontes de Königsberg, inspeção de rotas (carteiro chinês), caixeiro viajante, fluxo máximo (Ford-Fulkerson), Dijkstra, Kruskal, vizinho mais próximo, Prim.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;generalizacao&quot;&gt;generalização&lt;&#x2F;h2&gt;
&lt;p&gt;num hipergrafo, uma aresta pode conectar mais de dois vértices. um grafo não direcionado pode ser visto como um complexo simplicial: simplices de dimensão um (as arestas) e de dimensão zero (os vértices), e o complexo generaliza isso para dimensão maior. ver também rede complexa, teoria espectral de grafos, rede de pequeno mundo, modelo de Watts e Strogatz.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;referências&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Biggs, N.; Lloyd, E.; Wilson, R. (1986). &lt;em&gt;Graph Theory, 1736-1936&lt;&#x2F;em&gt;. Oxford University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Cayley, A. (1857). On the theory of the analytical forms called trees. &lt;em&gt;Philosophical Magazine&lt;&#x2F;em&gt;, Série IV, 13(85), 172-176.&lt;&#x2F;li&gt;
&lt;li&gt;Tutte, W.T. (2001). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Cambridge University Press, p. 30.&lt;&#x2F;li&gt;
&lt;li&gt;Di Battista, G.; Eades, P.; Tamassia, R.; Tollis, I. G. (1994). Algorithms for Drawing Graphs: an Annotated Bibliography. &lt;em&gt;Computational Geometry: Theory and Applications&lt;&#x2F;em&gt;, 4, 235-282.&lt;&#x2F;li&gt;
&lt;li&gt;Longabaugh, W. (2012). Combing the hairball with BioFabric. &lt;em&gt;BMC Bioinformatics&lt;&#x2F;em&gt;, 13, 275.&lt;&#x2F;li&gt;
&lt;li&gt;Goodrich, M. T.; Tamassia, R. (2001). &lt;em&gt;Estruturas de Dados e Algoritmos em Java&lt;&#x2F;em&gt;, 2ª ed. Bookman, p. 502-503.&lt;&#x2F;li&gt;
&lt;li&gt;West, D. B. (2001). &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt;, 2nd ed. Prentice Hall, p. 20.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
