Conceitos


= Conceitos =

Neste capítulo será dada uma breve introdução sobre teoria dos grafos. Essa introdução
tem por objetivo contextualizar o leitor para trabalhar com a nomenclatura
utilizada no **GRAFO**. 

Tanto em matemática quanto em ciência da computação, a teoria dos grafos estuda a estrutura matemática
//grafo// que são utilizados para modelar a relação entre objetos de uma certa coleção. Neste contexto
um grafo é uma coleção de vértices (nodos) e arestas conectando um par de vértices. WIKIPEDIA (2008). 


== Grafo ==

Segundo GAGNON (2001) e SZWARCFITER (1984) um grafo **//G//** é um par ordenado //**G** = (V, E)// que está sujeito as seguintes condições:

- //**V**// é um conjunto não-vazio de elementos chamados de vértices ou nodos. Vértice é a unidade fundamental da composição de um //grafo// sendo
este indivisível.

Como exemplo temos o conjunto //**V**//, onde, //**V** = {v0, v1, v2, v3, v4, v5}// e //v0..v,,n,,// são vértices. 

- //**E**// é um conjunto de arestas que por sua vez são pares de vértices distintos e não ordenados. 

Como exemplo temos o conjunto //**E**//, onde, //**E** = {e0, e1, e2, e3, e4}// e //e0..e,,n,,// são arestas. 
Cada aresta de //**E**// é um par não ordenado e distinto de vértices sendo: 
//**e0** = (v0, v2)//, //**e1** = (v0, v3)//, //**e2** = (v1, v2)//, //**e3** = (v2, v3)//, //**e4** = (v3, v4)//.


== Representação gráfica de um grafo ==

A figura 2.1 traz a representação gráfica do //grafo// //**G**// acima, onde,
 //**G** = ({v0, v1, v2, v3, v4, v5}, {(v0, v3), (v0, v2), (v0, v3), (v1, v2), (v2, v3), (v3, v4)})//.
 
Os seus vértices correspondem a pontos distintos do plano em posição aleatória e
suas arestas correspondem a retas ou curvas que unem estes pontos. SZWARCFITER (1984).
   
[images/02-Conceito-01-Representacao.png]

(figura 2.1)

== Incidência, grau e adjacência ==

Uma aresta incide aos dois vértices que conecta. Um vértice é incidente a uma aresta
a ele conectada. O grau de um vértice é dado pelo número de arestas incidentes a ele. SZWARCFITER (1984).
Na figura 2.1 temos como grau dos vértices o seguinte: 
//**v0** = 2//, //**v1** = 1//, //**v2** = 3//, //**v3** = 3//, //**v4** = 1//, //**v5** = 0//.

Os vértices adjacentes são vértices unidos por uma aresta, na figura 2.1 os pares de vértices não ordenados
//(v0, v2), (v0, v3), (v1, v2), (v2, v3) e (v3, v4)// são adjacentes. Duas arestas
são adjacentes quando compartilham um mesmo vértice. No exemplo os pares de arestas não ordenadas
//(e0, e1), (e0, e2), (e0, e3), (e1, e3), (e1, e4), (e2, e3) e (e3, e4)// são adjacentes.

== Peso de vértices e arestas ==

Peso é um valor associado a vértices e arestas de um grafo. Por exemplo um custo, uma distância, uma
capacidade ou algo que mensure ir de um vértice a outro utilizando uma determinada
aresta ou passando por um determinado vértice. SZWARCFITER (1984).

== Caminho, trajeto, ciclo ==

É denominado //caminho// em um //grafo// uma seqüencia de vértices onde para cada vértice existe
uma aresta que o conecta ao vértice seguinte. Um //caminho// de //K// vértices possui um caminho de //comprimento// //K-1//.
Se os vértices do caminho não se repetirem a seqüencia recebe o nome de //caminho simples//. Se as
arestas forem únicas a seqüencia recebe o nome de //trajeto//. Um //ciclo// é um //caminho// que
começa em um vértice e retorna ao mesmo vértice. SZWARCFITER (1984).

== Tipos de Grafos ==

Neste tópico serão exemplificado alguns tipos de grafos citados na interface do **GRAFO**. 
São eles: //Grafo completo//, //Grafo bipartite//, //Grafo regular//, //Grafo estrela//.

=== Grafo completo ===

Em um //grafo completo// todo par de vértice é ligado por uma aresta, isto significa que
o grafo possui o máximo de arestas possíveis. GAGNON (2001).

Um grafo com //n// vértices é nomeado //K,,n,,//. //K1// um grafo com um único vértice e chamado //trivial//.
//K2// é um grafo com 2 vértices e uma aresta. //K3// é um grafo com 3 vértices e 3 arestas e assim
sucessivamente. O número de arestas de um //grafo completo// é dado por //n(n-1)/2//. 

A figura 2.2 traz o exemplo de um //K8// que é um //grafo// com 8 vértices e 28 arestas.


=== Grafo bipartite ===

Em um //grafo bipartite// os vértices são divididos em dois grupos. Sendo que
cada vértice do primeiro grupo é adjacente a somente vértices do segundo grupo
e vice-versa. De uma maneira mais formal em um //grafo// bipartite não existe //ciclo// 
de comprimento ímpar. SZWARCFITER (1984).

A figura 2.3 traz um exemplo de um //grafo bipartite// com 5 vértices no primeiro grupo
e 3 vértices no segundo.


=== Grafo regular ===

É denominado um //grafo regular// um //grafo// onde todos os vértice tem
o mesmo //grau//. Como no exemplo da figura 2.4 que traz um //grafo regular// 
com 10 vértices e onde todos os vértices possuem grau 2. GAGNON (2001).


=== Grafo estrela ===

Um //grafo estrela// é um //grafo// onde existe um vértice central que é adjacente
a todos os outros vértices do //grafo//. Como na figura 2.5.

| [images/02-Conceito-02-GrafoCompleto-K8.png] | [images/02-Conceito-03-Bipartite-5-3.png]
| (figura 2.2)                                 | (figura 2.3)
| [images/02-Conceito-04-Regular.png]          | [images/02-Conceito-05-Estrela.png]
| (figura 2.4)                                 | (figura 2.5)


== Representação computacional de um grafo ==

Neste tópico será abordado uma das maneiras de se representar um //grafo// em um computador. Esta
não é a única maneira de representação de um grafo, porem, é a maneira utilizada internamente
pelo **GRAFO**. Por GAGNON (2001) e SZWARCFITER (1984).

=== Matriz de Adjacência ===

Dado o //grafo// //**G** = (V, E)// de //n// vértices //v0, v1, v2..v,,n,,// a
 //matriz de adjacências// //**M** = (m,,jk,,)// é uma matriz //n x n// sujeito
as seguintes condições:

+ //**m**,,jk,,// = 1 se o par de vértices //(v,,j,,, v,,k,,)// pertence a //**E**//.

+ //**m**,,jk,,// = 0 se não pertence.

Como exemplo a tabela 2.1 que representa a //matriz de adjacência// do grafo da figura 2.1.

|   --   | **v0** | **v1** | **v2** | **v3** | **v4** | **v5** |
| **v0** |    0   |    0   |    1   |    1   |    0   |    0   |
| **v1** |    0   |    0   |    1   |    0   |    0   |    0   |
| **v2** |    1   |    1   |    0   |    1   |    0   |    0   |
| **v3** |    1   |    0   |    1   |    0   |    1   |    0   |
| **v4** |    0   |    0   |    0   |    1   |    0   |    0   |
| **v5** |    0   |    0   |    0   |    0   |    0   |    0   |
(tabela 2.1)


 
