desenvolvimento de um algoritmo de busca em redes por
TRANSCRIPT
DESENVOLVIMENTO DE UM ALGORITMO DE BUSCA EM REDES POR
VERTICES COM CARACTERISTICAS ESPECIFICAS
Victor de Oliveira Cardoso
Projeto de Graduacao apresentado
ao departamento de Engenharia da
Computacao e Informacao, da Universidade
Federal do Rio de Janeiro, como parte dos
requisitos necessarios a obtencao do tıtulo de
Engenheiro da Computacao e Informacao.
Orientador: Daniel Ratton Figueiredo
Rio de Janeiro
Fevereiro de 2017
DESENVOLVIMENTO DE UM ALGORITMO DE BUSCA EM REDES POR
VERTICES COM CARACTERISTICAS ESPECIFICAS
Victor de Oliveira Cardoso
PROJETO DE GRADUACAO SUBMETIDO AO CORPO DOCENTE DO
DEPARTAMENTO DE ENGENHARIA DA COMPUTACAO E INFORMACAO
DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO PARTE
DOS REQUISITOS NECESSARIOS PARA A OBTENCAO DO GRAU DE
ENGENHEIRO DA COMPUTACAO E INFORMACAO.
Aprovado por:
Prof. Daniel Ratton Figueiredo, Ph. D.
Prof. Fernando Gil Vianna Resende Junior, Ph. D.
Prof. Alexandre Goncalves Evsukoff, Ph.D.
RIO DE JANEIRO, RJ – BRASIL
FEVEREIRO DE 2017
Cardoso, Victor de Oliveira
Desenvolvimento de um algoritmo de busca em redes por
vertices com caracterısticas especıficas/Victor de Oliveira
Cardoso. – Rio de Janeiro: UFRJ/Escola Politecnica,
2017.
XI, 52 p.: il.; 29, 7cm.
Orientador: Daniel Ratton Figueiredo
Projeto de Graduacao (engenheiro) – UFRJ/Escola
Politecnica/Curso de Engenharia da Computa cao e
Informa cao. , 2017.
Referencias Bibliograficas: p. 45 – 46.
1. Grafos. 2. Busca Heurıstica. 3.
Algoritmos Informados. I. Ratton Figueiredo,
Daniel. II. Universidade Federal do Rio de Janeiro,
Escola Politecnica/Curso de Engenharia da Computa cao
e Informa cao. III. Tıtulo.
iii
“A diferenca entre a comunidade
e a rede e que voce pertence a co-
munidade, mas a rede pertence a
voce. E possıvel adicionar e dele-
tar amigos, e controlar as pessoas
com quem voce se relaciona. Isso
faz com que os indivıduos se sin-
tam um pouco melhor, porque a
solidao e a grande ameaca nesses
tempos individualistas.” Zygmunt
Bauman( in memoriam).
iv
Agradecimentos
A Deus por me manter firme para superar todos os obstaculos ate aqui.
Aos meus pais e avos, pelos quais segui em frente e sem os quais nada disso faria
sentido.
Ao meu orientador, Daniel Ratton, que aceitou tao arrojada empreitada me forne-
cendo os insumos e a atencao essencial para o exito desse trabalho.
A Universidade Federal do Rio de janeiro, seu corpo docente e discente, por tao
oportuno ambiente para o meu desenvolvimento academico.
Aos professores que participaram da banca, agradeco por aceitar examinar esse tra-
balho
A todos os meus amigos que, cada um a sua maneira, me deram incentivo para
concluir essa graduacao.
A todos que direta ou indiretamente fizeram parte da minha formacao, o meu muito
obrigado.
v
Resumo do Projeto de Graduacao apresentado a COPPE/UFRJ como parte dos
requisitos necessarios para a obtencao do grau de Engenheiro da Computacao e
Informacao
DESENVOLVIMENTO DE UM ALGORITMO DE BUSCA EM REDES POR
VERTICES COM CARACTERISTICAS ESPECIFICAS
Victor de Oliveira Cardoso
Fevereiro/2017
Orientador: Daniel Ratton Figueiredo
Programa: Engenharia de Sistemas e Computacao
Esse trabalho busca projetar e desenvolver um algoritmo de busca eficiente para
encontrar vertices de uma rede que possuam uma determinada caracterıstica. A
proposta se baseia em uma heurıstica que utiliza a probabilidade de um vertice
descoberto mas nao explorado, ter a caracterıstica desejada. Apresenta-se em se-
guida uma avaliacao empırica do algoritmo proposto em comparacao a busca em
largura (BFS), utilizados dados (rede e caracterısticas) reais. Os resultados indicam
o potencial do algoritmo.
vi
Abstract of Final Project presented to COPPE/UFRJ as a partial fulfillment of
the requirements for the degree of Computer and Information Engineer of Science
(B.Sc.)
DEVELOPMENT OF A NETWORK SEARCH ALGORITHM FOR VERTICES
WITH SPECIFIC CHARACTERISTICS
Victor de Oliveira Cardoso
February/2017
Advisor: Daniel Ratton Figueiredo
Department: Systems Engineering and Computer Science
This work seeks to design and develop an efficient search algorithm to find ver-
tices of a network that have a certain characteristic. The proposal is based on a
heuristic that uses the probability of a discovered but not explored vertex, to have
the desired characteristic. We present an empirical evaluation of the proposed algo-
rithm in comparison to the BFS, using real data (network and characteristics). The
results indicate the potential of the algorithm.
vii
Sumario
Lista de Figuras x
Lista de Tabelas xi
1 Motivacao e Introducao 1
1.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Organizacao do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Definicoes e Conceitos 5
2.1 Redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2.1 Grau de um vertice . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 Grafo Conexo . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.3 Grafos Dirigidos e Nao-Dirigidos . . . . . . . . . . . . . . . . . 8
2.2.4 Conjunto Independente . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Algoritmos de Busca . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.1 Busca em Largura . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3.2 Busca Informada . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 O Algoritmo 14
3.1 Trabalhos Anteriores . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Caracterısticas dos Vertices . . . . . . . . . . . . . . . . . . . . . . . 16
3.3 Fracao de tipos de arestas . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4 A Heurıstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5 Implementacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
viii
3.6 Analise de Complexidade . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Resultados e Avaliacao 24
4.1 Metodologia para avaliacao . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2 Comparacao com Busca em Largura . . . . . . . . . . . . . . . . . . . 25
4.2.1 Redes do Facebook . . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.2 Rede do Google Plus . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.3 Rede de Blogs . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5 Conclusao e Trabalhos Futuros 43
A Codigo Fonte 47
ix
Lista de Figuras
1.1 Rede de amigos no Facebook . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Decisao sobre qual vertice explorar . . . . . . . . . . . . . . . . . . . 3
2.1 Rede de amizade entre usuarios . . . . . . . . . . . . . . . . . . . . . 6
2.2 Representacao de um Grafo . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Grafos conexo e nao-conexo . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Diferenca entre os grafos . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Conjunto independente . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.6 Grafo de Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1 Etapa do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2 aresta do tipo TT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.3 aresta do tipo TN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4 Aresta do Tipo NN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5 Exemplo - Fracao dos Tipos de Aresta . . . . . . . . . . . . . . . . . 18
3.6 Heurıstica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
x
Lista de Tabelas
4.1 Propriedades das redes sendo avaliadas . . . . . . . . . . . . . . . . . 25
4.2 Distribuicao de arestas - Rede do Facebook . . . . . . . . . . . . . . . 26
4.3 Resultados da busca pela caracterıstica A . . . . . . . . . . . . . . . . 27
4.4 Resultados da busca pela caracterıstica B . . . . . . . . . . . . . . . . 29
4.5 Resultados da busca pela caracterıstica C . . . . . . . . . . . . . . . . 31
4.6 Resultados da busca pela caracterıstica D . . . . . . . . . . . . . . . . 33
4.7 Distribuicao do tipo de arestas - Rede do Google Plus . . . . . . . . . 34
4.8 Resultados da busca - Caracterıstica A . . . . . . . . . . . . . . . . . 35
4.9 Resultados da busca - Caracterıstica B . . . . . . . . . . . . . . . . . 37
4.10 Resultados da busca - Caracterıstica C . . . . . . . . . . . . . . . . . 39
4.11 Distribuicao de Arestas - Rede de Blogs . . . . . . . . . . . . . . . . . 41
4.12 Resultados da busca na rede de Blogs . . . . . . . . . . . . . . . . . . 41
xi
Capıtulo 1
Motivacao e Introducao
Este trabalho surge da motivacao em encontrar indivıduos que tenham determinadas
caracterısticas em redes sociais online como o Facebook, Linkedin, apenas navegando
pelas suas redes de amizades.
Buscaremos explicar os conceitos necessarios para o entendimento do problema,
e fazendo um paralelo com redes sociais, tentar projetar e implementar uma forma
eficiente de navegar e recuperar informacoes de grafos
Se imaginarmos o Facebook por exemplo, os indivıduos possuem caracterısticas
distintas. Por exemplo, alguns amigos de um usuario torcem para um time, outros
dominam um certo idioma, outros ainda estudam em uma determinada Universi-
dade. Encontrar esses indivıduos a partir de suas caracterısticas e o foco deste
projeto.
Figura 1.1: Rede de amigos no Facebook
Imaginemos que a figura 1.1 representa os meus amigos na rede do Facebook e
1
os vertices circulados em amarelo possuem uma determinada caracterıstica. Caso
essa caracterıstica seja o time para o qual a pessoa torce, se fosse preciso encontrar
aqueles que por exemplo torcem pelo Flamengo, seria necessario perguntar a cada
um desses indivıduos para que time eles torcem.
Outro exemplo real da necessidade de se estudar uma forma inteligente de encon-
trar indivıduos especıficos em uma rede, sao campanhas de marketing. Pensando
nesse exemplo poderıamos imaginar que os indivıduos mais influentes seriam os
mais importantes, no entanto, eles nao sao os responsaveis pela decisao de compra
de alguem. Mesmo que eles nao sejam os mais instruıdos no tema, a opiniao e a
indicacao de alguem que esteja mais proximo a voce, tem mais credibilidade do que
daquelas que apenas servem como veıculos para se chegar ate a informacao.
Quando pensamos em redes reais, onde indivıduos possuem caracterısticas di-
ferentes entre si, a abordagem dos algoritmos de busca tradicionais, nao parece
vantajosa pois traz uma grande quantidade de indivıduos que nao pertencerao ao
grupo que desejamos encontrar.
Entao esse projeto parte da vontade em explorar de forma mais eficiente as
diversas redes pelas quais nos conectamos atualmente. Indivıduos tem suas carac-
terısticas e encontrar os indivıduos de acordo com essas caracterısticas e o desafio
proposto por esse projeto.
1.1 Objetivo
O objetivo principal desse trabalho consiste em desenvolver um algoritmo guloso de
busca em grafos que nao sao conhecidos previamente, utilizando-se de informacao
sobre as arestas (relacionamentos entre indivıduos), para recuperar a maior quanti-
dade possıvel de elementos com uma caracterıstica desejada.
Como um objetivo secundario esta conseguir uma eficiencia melhor que a ofere-
cida por metodos de busca desinformada como a busca em largura (BFS).
1.2 Metodologia
Como abordagem para a construcao desse trabalho, foram elaborados modelos ma-
tematicos (probabilısticos) que representam o problema apresentado. Algumas te-
2
orias foram levantadas em discussao e foram realizados algumas validacoes em pe-
quena escala para entender como esses modelos funcionariam quando aplicados aos
algoritmos que seriam desenvolvidos.
A abordagem utilizada nesse projeto parte do princıpio de que quanto maior for
o numero de vizinhos com uma caracterıstica, maior a probabilidade de um vertice
possuir tambem essa caracterıstica.
A figura 1.2 ilustra dois vertices de uma rede e seus vizinhos. Os vertices circu-
lados em amarelo representam indivıduos que possuem certa caracterıstica.
Figura 1.2: Decisao sobre qual vertice explorar
Baseando-se nessa informacao, seria tomada a decisao de explorar (ou seja, per-
guntar ao vertice se ele possui a caracterıstica) aquele com mais vizinhos com a
caracterıstica desejada.
Inicialmente o trabalho consiste de uma modelagem matematica que represente
o problema da busca em redes, e a partir desse modelo implementar um algoritmo
que possa descobrir a maior quantidade de vertices com as caracterısticas desejadas.
Esses resultados obtidos a partir do algoritmo proposto em diferentes redes reais
e com caracterısticas reais dos vertices serao analisados por metricas estatısticas co-
nhecidas como medias e desvio padrao, e tambem pelo seu tempo de processamento.
Em seguida sera feita a comparacao desses resultados com outras implementacoes
de algoritmos para o mesmo problema. Serao utilizados graficos desses desempenhos
e tabelas para melhor ilustrar as diferencas entre os metodos.
3
1.3 Organizacao do Trabalho
No capıtulo 2 serao apresentados os conceitos e definicoes necessarios para a melhor
compreensao do restante do trabalho. Serao mostrados os conceitos de redes, grafos
e os algoritmos de busca em grafos ja existentes.
O capıtulo 3 trara o projeto do algoritmo que foi modelado e desenvolvido, assim
como um estudo da sua complexidade e propostas de melhoria no seu codigo.
No capıtulo 4 sera apresentada a metodologia de avaliacao que sera utilizada para
analisar o desempenho do algoritmo. Serao comentados os dados utilizados para a
avaliacao, e atraves de tabelas e graficos, o algoritmo desenvolvido sera comparado
com outros metodos de busca.
Por fim, no capıtulo 5 serao feitas consideracoes finais, conclusoes sobre a
eficiencia e eficacia do algoritmo proposto. Alguns trabalhos que podem ser rea-
lizados a partir deste tambem serao citados.
4
Capıtulo 2
Definicoes e Conceitos
2.1 Redes
De maneira generalizada, redes sao um conjunto de elementos relacionados entre si.
Esse elementos sao chamados vertices, e podem ser de qualquer natureza, pessoas,
elementos de infraestrutura, paginas da internet, artigos cientıficos. Os relaciona-
mentos entre esses vertices recebem o nome de arestas, e representam uma relacao
entre pares de vertices, seja essa ligacao uma conexao fısica ou abstrata.
Consideremos a rede de amigos de um individuo em uma rede social. Nesta rede,
os vertices sao as pessoas da lista de amigos desse indivıduo, e as arestas demonstram
o relacionamento de amizade entre esses amigos e o usuario, e entre esses amigos.
Para construir uma rede, e necessario conhecermos quais sao os vertices da rede e
quais as suas arestas.
Um exemplo de rede que sera mais visto nesse trabalho sao as redes sociais. Uma
rede social e uma estrutura composta por pessoas ou organizacoes que se conectam
por variadas formas de interacao. Uma caracterıstica principal desse tipo de rede e
a horizontalidade das relacoes, possibilitando a abertura de relacoes entre todos os
elementos, descartando uma visao hierarquica.
5
Figura 2.1: Rede de amizade entre usuarios
A figura 2.1 representa o desenho de uma rede de relacionamento entre pessoas
por exemplo, mas como ja foi dito, pode ser utilizada para entender qualquer tipo
de relacao entre nos.
2.2 Grafos
Grafos sao uma estrutura abstrata capaz de representar elementos de uma rede e as
relacoes entre esses elementos de forma sucinta. Formalmente, utilizamos a seguinte
definicao
Segundo Cormen et al. [2012], os grafos sao estruturas de dados sempre presentes
na ciencia da computacao, e os algoritmos para trabalhar com eles sao fundamentais
na area. Existem centenas de problemas computacionais interessantes definidos em
termos dos grafos.
Definicao 1. Um Grafo e uma estrutura G = (V,E) em que:
• V e o conjunto (v1, v2, v3, ..., vk) dos vertices da rede, sendo k o numero de
elementos do grafo
• E e o conjunto arestas e = (vi, vj) em que vi e o vertice inicial e vj o vertice
de destino de um relacionamento, com e ∈ V × V
Um grafo pode ser representado de diversas formas, sendo umas das mais comuns
e que sera utilizada posteriormente nesse trabalho, as listas de arestas.
6
Definicao 2. Em uma lista de arestas temos um conjunto de pares de vertices, onde
cada par representa uma aresta do grafo
Figura 2.2: Representacao de um Grafo
O grafo da figura 2.2 pode ser descrito pela sua lista de arestas L =
(a, b), (a, c), (b, c)
2.2.1 Grau de um vertice
Antes de definirmos o conceito de grau de um vertice e preciso entender alguns
outros princıpios sobre a teoria dos grafos.
Definicao 3. Seja G = (V,E) um grafo. Para um vertice v ∈ V sua vizinhanca
η(v) e definida por:
η(v) = {u ∈ V ‖(u, v) ∈ E}
Definicao 4. Com isso podemos entao definir o grau de um vertice como:
d(v) = ‖η(v)‖
O grau de um vertice v tambem pode ser visto como a quantidade de arestas
que incidem em v
7
2.2.2 Grafo Conexo
Definicao 5. Como vemos em Bondy and Rama Murty [1976] um grafo e conexo
se para todo par de vertices [u, v] e possıvel encontramos um caminho com extremos
v e u.
Definicao 6. Caminho e uma sequencia de vertices tal que de cada um dos vertices
existe uma aresta para o vertice seguinte. Um caminho e chamado simples se nenhum
dos vertices no caminho se repete. O comprimento do caminho e o numero de arestas
que o caminho usa.
Figura 2.3: Grafos conexo e nao-conexo
A figura 2.3 demonstra a diferenca entre os grafos conexos e os que chamamos
de nao-conexos. No grafo da esquerda e possıvel alcancar qualquer vertice atraves
de um caminho por suas arestas. Ja na estrutura da direita, nao e possıvel atingir
os vertices J ou K caso iniciemos a percorrer o grafo nos vertices G , F , I ou H.
2.2.3 Grafos Dirigidos e Nao-Dirigidos
Uma outra definicao importante sobre grafos, diz respeito a forma como sao descritas
as suas arestas. Podemos classificar os grafos, a respeito de suas relacoes, em grafos
dirigidos e grafos nao-dirigidos.
Como vemos em Bondy and Rama Murty [2007] ao lidar com problemas de fluxo
de trafego, por exemplo, e necessario saber a direcao em que o trafego e permitido
numa determinada estrada. Para isso precisamos de uma estrutura que possua nas
suas arestas uma orientacao atribuıda, ou seja, um grafico direcionado. Um grafo
dirigido e uma onde as ligacoes entre os elementos se dao de forma unidirecional.
8
Formalmente Bondy and Rama Murty [2007] definem um grafo dirigido da
seguinte maneira.
Definicao 7. Um grafo dirigido D e um par ordenado (V (D), A(D)) constituıdo
por um conjunto V := V (D) de vertices e um conjunto A := A(D), disjunto de
V (D), de arcos, juntos com uma funcao de incidencia ψD que associa a cada arco
de D um par ordenado de vertices de D. Se a e um arco e ψD(a) = (u, v), entao
diz-se que a liga u ate v; pode-se dizer tambem que u domina v
Ocasionalmente para o problemas de busca em grafos utilizado nesse projeto, a
direcao dos relacionamentos entre os vertices nao e uma informacao relevante e,
entao ao inves da denominacao de arcos utilizaremos o termo aresta.
Um grafo nao-dirigido e um conjunto de vertices que estao conectados entre si,
onde todas as arestas sao bidirecionais. Um grafo nao-dirigido por vezes pode ser
chamado de rede nao-direcionada.
A figura 2.4 demonstra a diferenca na representacao das arestas dos dois tipos de
grafo.
(a) Grafo Dirigido (b) Grafo Nao-Dirigido
Figura 2.4: Diferenca entre os grafos
9
2.2.4 Conjunto Independente
Na teoria dos grafos, um conjunto independente de um grafo G e um conjunto S
de vertices de G tal que nao existem dois vertices adjacentes contidos em S. Em
outras palavras, se a e b sao vertices quaisquer de um conjunto independente, nao
ha aresta entre a e b.
Todo grafo tem ao menos um conjunto independente: o conjunto vazio. Um grafo
pode ter varios conjuntos independentes distintos.
Se S e um conjunto independente de G e nao existe um conjunto independente de
G maior que S, diz-se que S e um conjunto independente maximo de G. O
problema de, dado um grafo G, determinar se ha um conjunto independente de
tamanho k e um problema NP-completo.
Definicao 8. V ′ e conjunto independente de
G⇐⇒ ∀u, v ∈ V ′ : u 6= v −→ (u, v) /∈ E
Figura 2.5: Conjunto independente
Na figura 2.5, os vertices {A,B,G,H}, formam um conjunto independente do grafo
apresentado.
10
2.3 Algoritmos de Busca
Dentre as tecnicas existentes para a solucao de problemas envolvendo grafos, se
destacam os algoritmos de busca, pelo grande numero de problemas que podem ser
resolvidos atraves da sua utilizacao. A busca consiste em localizar um vertice de
um grafo, registrando o caminho percorrido ate se atingir o vertice desejado
Podemos dividir os algoritmos de busca em grafos em dois grupos em relacao ao
conhecimento de informacoes da rede: informados e desinformados. Os algoritmos
de busca desinformados, rodam sobre um grafo sem ter nenhum conhecimento
sobre as caracterısticas ou a estrutura da rede. Ja os algoritmos informados, se
baseiam em algumas premissas sobre o grafo com o intuito de otimizar os seus
resultados
As principais tecnicas de busca desinformadas utilizadas sao a Busca em Largura e
a Busca em Profundidade. Alem dessas, existem alguns metodos de busca
informada como a Busca Heurıstica que sera detalhada mais a frente.
2.3.1 Busca em Largura
Formalmente, uma busca em largura e um metodo de busca nao-informada (ou
desinformada). O metodo da busca em largura se utiliza de uma fila para definir a
ordem em que os vertices serao visitados. Filas sao estruturas de dados do tipo
FIFO (First in First out), ou seja, os primeiros elementos a entrarem na fila,
serao os primeiros a saırem dela. A Busca em Largura examina todos os vertices
de um certo nıvel do grafo, antes de passar a exploracao dos vertices do nıvel
imediatamente abaixo.
Na busca em largura, se partimos de um vertice u, esperamos que todos os
vizinhos de u sejam visitados antes prosseguir a busca para outros nıveis.
11
O pseudo-codigo abaixo define como e a operacao de uma busca em largura:
Algoritmo 1: Busca em LarguraEntrada: v - Vertice inicial
1 inıcio
2 Inicializar Fila;
3 Marcar v como visitado;
4 Colocar v no final da Fila;
5 enquanto Fila nao vazia faca
6 u := primeiro elemento da fila;
7 retira u da fila;
8 para cada vertice w vizinho de u faca
9 se w nao foi visitado entao
10 Marcar w como visitado;
11 Colocar w no final da fila
12 fim
13 fim
14 fim
15 fim
Para melhor ilustrar essa tecnica, vamos nos basear no grafo da figura 2.6.
Consideraremos que o vertice inicial e o vertice A
Figura 2.6: Grafo de Exemplo
Se aplicassemos esse algoritmo ao grafo acima , terıamos como resultado o
percurso {A,B,D,C,E, F}.
12
Analise de Complexidade
Considerando-se um grafo representado por listas de adjacencia, no pior caso,
aquele em que todos os vertices e arestas sao visitados pelo algoritmo, a
complexidade do algoritmo e de O(|V |+ |E|) , sendo |E| o tempo gasto para
percorrer todas as arestas, sendo que cada uma dessas operacoes custa O(1), e |V |
o tempo necessario para percorrer todos os vertices, considerando tambem que o
tempo gasto em cada vertice e constante, O(1), ja que um vertice so e enfileirado e
desenfileirado uma vez.
2.3.2 Busca Informada
De acordo com Russel and Norvig [2003], a busca heurıstica e uma estrategia que
utiliza o conhecimento especıfico a cerca do problema, podendo encontrar solucoes
de forma mais eficiente que uma estrategia desinformada.
Uma heurıstica consiste em uma funcao de avaliacao sobre para qual vertice seria
mais vantajoso navegar, levando em consideracao algum modelo pre-determinado.
As funcoes heurısticas sao especificas de cada problema, e se baseiam em
informacoes disponıveis sobre a estrutura da rede, ou outros fatores que possam
influenciar na forma como as relacoes sao construıdas entre nos.
Segundo Rich and Knight [1993], a heurıstica e uma tecnica mais eficiente para
resolver problemas de buscas em grafos. A heurıstica e util, pois leva a escolhas de
direcao possivelmente mais interessantes, mesmo que possa vir a ignorar certos
pontos dos caminhos a serem percorridos. Podem-se obter boas solucoes usando
uma boa heurıstica em problemas difıceis
Alguns exemplos de metodos que se utilizam de informacao para decidir qual
caminho escolher sao o A* e os metodos de busca gulosa, onde se decide pelos nos
com os maiores valores para uma dada funcao heurıstica.
13
Capıtulo 3
O Algoritmo
Para resolver o problema da busca em um grafo, foi desenvolvido um algoritmo
baseado no metodo de busca heurıstica, anteriormente citado na secao 2.3.2.
Para alcancar os objetivos desejados com esse trabalho, alguma premissas
precisaram ser adotadas. O metodo que desenvolvemos parte do princıpio que
algumas caracterısticas do grafo sao conhecidas, sendo a principal, como os
vertices estao relacionados entre si de acordo com sua caracterıstica, o que gera
tipos de arestas ligando vertices com ou sem essa caracterıstica.
Os vertices das redes utilizadas apresentam caracterısticas binarias, sendo o valor 1
significativo de presenca de uma caracterıstica, e o valor 0, a ausencia dessa mesma.
Serao utilizados tres conjuntos ao longo do funcionamento do algoritmo:
• V - Vertices do Grafo
• O - Vertices Explorados
• D - Vertices descobertos mas nao explorados
Sabendo que ‖O‖ ≤ ‖D‖ ≤ ‖V ‖, apos receber um vertice inicial, o algoritmo
escolhe em D, o proximo vertice a ser explorado.
14
A figura 3.1 ilustra os conjuntos citados acima, sendo o conjunto V , todos os
vertices do grafo, o conjunto D, os vertices em azul, e o conjunto O, os vertices na
cor verde. O anel amarelo em torno de um vertice representa a presenca da
caracterıstica.
Figura 3.1: Etapa do Algoritmo
O projeto do algoritmo parte da hipotese de que quanto maior a quantidade de
vizinhos de um vertice com uma caracterıstica, maior a probabilidade desse vertice
apresentar tambem essa caracterıstica. Isso sera utilizado para montar a funcao
heurıstica baseando-se tambem na distribuicao dos tipos de arestas do grafo.
Em um algoritmo guloso como o que utilizaremos, adota-se uma tecnica de projeto
de algoritmos que tenta resolver o problema fazendo a escolha localmente otima
em cada fase com a esperanca de encontrar nesse caminho de vertices, um otimo
global para o problema.
Calculados os valores da funcao heurıstica para os vertices, o algoritmo toma uma
decisao gulosa, ou seja, explora o vertice com maior valor para essa funcao de
avaliacao. Nos casos em que ha empate no maior valor, a decisao sobre qual vertice
explorar e feita de maneira aleatoria.
15
3.1 Trabalhos Anteriores
O problema da busca em redes nao e recente e por isso existe consideravel
producao academica e cientıfica sobre o tema. Ainda que baseando-se em outras
abordagens para tratar o problema, e relativamente facil encontrar trabalhos que
se dedicaram a encontrar vertices em um grafo.
No trabalho de Murai et al. [2014] encontramos um exemplo de trabalho nesse
sentido, voltado a descoberta dos indivıduos mais influentes em uma rede.
Baseando-se em campanhas de marketing, os autores buscaram encontrar os
elementos de uma rede que facilitariam o maior espalhamento de uma determinada
campanha publicitaria, a partir da observacao do numero de conexoes entre os
indivıduos.
Em Figueiredo and Gonzaga [2003] o autor lida com o problema da busca em
grafos para solucionar o problema de alocacao otima de torres de transmissao,
visando uma alocacao otima dessas estruturas. Esse e um outro trabalho que
utiliza uma metodologia diferente na modelagem do algoritmos, utilizando-se da
informacao do custo da ligacao entre as torres da rede.
3.2 Caracterısticas dos Vertices
Os vertices dos grafos que foram utilizados possuem caracterısticas reais, que para
esse trabalho serao definidas atraves da variavel indicadora cv definida abaixo:
cv = 1 se v possui a caracterıstica
cv = 0 se v nao possui a caracterıstica
Essas variavel indicadora sera importante para entendermos a definicao dos tipos
de arestas
16
3.3 Fracao de tipos de arestas
Trabalharemos com tres tipos de arestas nesse trabalho: TT (entre vertices com a
caracterıstica) , TN (entre um vertice com e outro sem a caracterıstica) , NN
(entre dois vertices sem a caracterıstica).
Baseando-se nisso, podemos definir formalmente os tipos de arestas.
Definicao 9. Uma aresta TT e um elemento e(u, v) ∈ E | cu = 1 e cv = 1
Figura 3.2: aresta do tipo TT
Definicao 10. Uma aresta TN e um elemento e(u, v) ∈ E | cu = 1 e cv = 0
Figura 3.3: aresta do tipo TN
Definicao 11. Uma aresta NN e um elemento e(u, v) ∈ E | cu = 0 e cv = 0
Figura 3.4: Aresta do Tipo NN
17
Chamaremos de PD a fracao de arestas do tipo TN no conjunto de arestas E, de
PN a fracao de arestas do tipo NN , e de PT a fracao de arestas do tipo TT . A
heurıstica que utilizaremos, toma como informacao, essas tres proporcoes sabendo
que PD + PT + PN = 1
Formalmente essas fracoes podem ser definidas daa seguinte forma:
Definicao 12.
PT = 1‖E‖
∗∑
e(u,v)∈E1(cu = 1, cv = 1)
Definicao 13.
PD = 1‖E‖
∗∑
e(u,v)∈E1(cu = 1, cv = 0)
Definicao 14.
PN = 1‖E‖
∗∑
e(u,v)∈E1(cu = 0, cv = 0)
Figura 3.5: Exemplo - Fracao dos Tipos de Aresta
Um exemplo desse calculo das fracoes pode ser visto na figura 3.5. As arestas
(A,B) , (B,C) , (D,E) e (D,F ) sao do tipo TN e equivalem a 4/7 das arestas do
grafo. As arestas (C,E) e (E,F ) sao do tipo NN e correspondem a 2/7 das
arestas do grafo. Finalmente a aresta (B,D) e a unica do tipo TT equivalendo a
1/7 das arestas do grafo.
18
3.4 A Heurıstica
A ideia do metodo proposto e usar uma heurıstica para determinar a chance de um
vertice descoberto mas nao explorado ter a caracterıstica desejada.
O modelo que foi projetado para esse trabalho, calcula para cada vertice
descoberto da rede o que chamaremos de rank ou h(v).
A partir da lista de vertices explorados, podemos descobrir informacoes uteis para
a avaliacao da nossa funcao. Queremos determinar a probabilidade de um vertice
ter o rotulo T (possuir a caracterıstica buscada), que sera modelada como o
complemento da probabilidade desse vertice nao ter essa caracterıstica.
Para essa funcao precisamos de algumas informacoes como as fracoes dos tipos de
arestas, PD, PT explicadas na secao 3.3, e tambem das quantidades de vertices
explorados que sao vizinhos de um vertice e que possuem cv = 1 ou cv = 0, a essas
quantidades chamaremos NT (v) e NN(v). Formalmente esses parametros sao
definidos como:
Definicao 15.
NT (v) =∑
u∈η(v)1(cu = 1)
Definicao 16.
NN(v) =∑
u∈η(v)1(cu = 0)
Onde 1(...) e a funcao indicadora, que vale 1 quando o argumento e verdade e 0
caso contrario.
A funcao que usamos e uma estimativa da probabilidade do vertice possuir a
caracterıstica dado que o mesmo possui NT e NN vertices com e sem a
caracterıstica. Ou seja, e uma probabilidade condicional, P (A | NT , NN), onde
A e o evento “ter a caracterıstica”. E uma estimativa pois o modelo que usamos
para escrever a equacao assume que os vizinhos sao independentes, no sentido de
influenciar o vertice a possuir uma caracterıstica (isto esta no fato de termos um
produtorio). Alem disso, o modelo assume que a influencia de cada vizinho e
identica.
19
Podemos entao a funcao que estima a probabilidade de um vertice, possuir a
caracterıstica desejada, h(v),como:
Definicao 17. h(v) = 1− (1− PT )NT (v) × (1− PD)NN(v)
Esta funcao sera usada para ranquear todos os vertices em D \O (descobertos e
nao explorados) em ordem decrescente. O vertice de maior valor, ou seja, o mais
provavel de ter a caracterıstica, sera o proximo vertice a ser explorado. Vale
reparar que ao explorar o vertice, sua caracterıstica passa a ser conhecida, assim
como a identidade de seus vizinhos. Logo, a funcao h(v) precisa ser recalculada
para todos estes vertices. O maior valor e novamente determinado e o algoritmo
prossegue.
Para exemplificar o calculo da heurıstica vamos considerar o grafo da figura 3.6.
Os vertice em verde sao os vertices ja explorados do grafo, e os em azul, aqueles
que foram descobertos mas ainda nao foram explorados. Os vertices com a
caracterıstica estao sinalizados com um anel amarelo ao redor. As fracoes dos tipos
de arestas desse grafo valem PT = 510 e PD = 3
10 .
Figura 3.6: Heurıstica
No proximo passo do algoritmo serao calculados os valores da funcao h(v) para os
vertices A e E. O vertice A possui dois vizinhos com a caracterıstica (NT = 2) e
outros dois vizinhos sem a caracterıstica (NN = 2), ja o vertice E possui quatro
vizinhos com a caracterıstica desejada (NT = 4) e nenhum sem a caracterıstica
(NN = 0).
20
Com essas informacoes e possıvel entao calcular h(A) e h(E).
h(A) = 1− (1− 510)2 × (1− 3
10)2 ∼= 0.875
h(E) = 1− (1− 510)4 × (1− 3
10)0 ∼= 0.938
Com isso o proximo vertice a ser explorado sera o vertice E que possui um valor
maior para a funcao heurıstica.
3.5 Implementacao
O algoritmo foi implementado utilizando a linguagem de programacao Python, no
ambiente PyCharm. Alem disso, foi utilizada a biblioteca NetworkX do Python,
que implementa diversas funcionalidades para manipular grafos. Uma biblioteca
para leitura de arquivos xls e xlsx (formatos do Excel), foi necessaria para realizar
a leitura da lista de arestas do grafo e a leitura do arquivo com as caracterısticas
dos vertices.
Em seguida, cada vertice do grafo recebe sua caracterıstica e sao calculadas as
fracoes de arestas de cada tipo, que serao necessarias para o calculo da heurıstica.
Finalmente, o algoritmo de busca esta ilustrado no pseudocodigo a seguir:
21
Algoritmo 2: Busca InformadaEntrada:
1 v - Vertice inicial
2 limite - Quantidade de nos a explorar
3 inıcio
4 Cria as listas vazias de O (explorados) e D (descobertos);
5 Coloca v (inicial) na lista O;
6 Inicializa contador i = 0
7 enquanto i < limite - 1 faca
8 para cada vertice u vizinho de v faca
9 Adiciona u em D
10 se v tem a caracterıstica entao
11 Incrementa NT (u) em 1
12 fim
13 senao
14 Incrementa NN(u) em 1
15 fim
16 Calcula h(u)
17 fim
18 v := vertice com maior h(u) em D
19 Insere v na lista O
20 fim
21 fim
22 retorna O - Lista de nos explorados
Em linhas gerais, partindo de um vertice de entrada, o valor de h(v) e calculado
para cada vizinho (valor que e atualizado conforme o grafo vai sendo explorado).
Os vertices descobertos sao ordenados a cada iteracao pelo valor de h(v) e entao e
feita a escolha do primeiro da lista, que passa a fazer parte da lista de vertices
explorados. A variavel limite que o algoritmo recebe como entrada, representa a
quantidade de vertices que queremos explorar na rede.
22
3.6 Analise de Complexidade
Podemos analisar a eficiencia de um algoritmo em termos do seu tempo de
execucao, ou pelo espaco (memoria utilizada). Nesse trabalho o tempo de execucao
nao foi considerado pois pode variar de uma maquina para outra. Sera considerada
a complexidade em termos de numero de operacoes realizadas no pior caso.
No metodo que desenvolvemos, temos como valores relevantes para essa analise: o
limite escolhido e o grau de cada vertice. Deve ser considerada tambem a
complexidade de encontrar o vertice com maior h(v) dentre os descobertos. Esse
processo no pior caso tem complexidade O(n).
Teoricamente a complexidade do restante do algoritmo valeria O(grau ∗ limite),
onde grau e o maior grau da rede. Entretanto, a soma de graus dos vertices de um
grafo e igual ao seu numero de arestas, entao grau× limite ≤ m, onde m = ‖E‖
(numero de arestas). Entao, temos que a complexidade no pior caso do algoritmo
apresentado e de O(m)×O(n)
A complexidade vista no algoritmo que foi desenvolvido e maior que a dos metodos
de busca ja comentados, veremos no proximo capıtulo se os resultados compensam
essa perda em tempo/espaco computacional.
23
Capıtulo 4
Resultados e Avaliacao
Neste capıtulo serao apresentados os resultados do algoritmo desenvolvido
utilizando tres conjuntos de dados. Os dois primeiros sao respectivamente pedacos
do Facebook e do Google Plus, obtidos a partir do trabalho de Leskovec and Krevl
[2014], e sao construıdos a partir da lista de relacionamentos de um usuario. Cada
um desses datasets possui uma lista de caracterısticas de cada vertice (indivıduo da
rede), onde os valores 1 e 0 representam a presenca ou ausencia, da caracterıstica.
Essas duas redes sao egonets, ou seja, redes centradas em um indivıduo, com suas
arestas para seus vizinhos, e as possıveis arestas entre esses vizinhos.
Como nos dataset existem mais de 200 caracterısticas para cada vertice do grafo,
foi tomada a decisao de escolher 4 dessas caracterısticas para analise, tentando
respeitar uma certa distribuicao da quantidade de valores positivos para cada
caracterıstica de modo que fosse possıvel avaliar se fracoes diferentes dos tipos de
arestas impactariam significativamente nos resultados.
O ultimo dataset utilizado e parte do trabalho de Adamic and Glance [2005] e se
trata de uma rede de blogs de polıtica norte-americanos. O conjunto de dados sao
os links entre esses blogs, sendo um link, uma referencia entre uma pagina e a
outra. Esse dataset traz como caracterıstica de cada blog, a sua inclinacao politica
dentro do contexto daquele paıs. Nos vertices com valor “0”, sao os blogs com
inclinacao a esquerda ou liberais e os com caracterıstica “1”, aqueles blogs com
tendencias a direita ou conservadores.
24
Tabela 4.1: Propriedades das redes sendo avaliadas
Dataset Vertices Arestas
Facebook 745 60046
Blogs 1490 19025
Google Plus 4877 416991
Ao inicializar, o algoritmo faz a leitura do grafo que foi escolhido atraves da sua
lista de incidencias e cria os vertices e arestas do grafo. Apos isso, partindo de uma
caracterıstica definida, e feita a leitura do arquivo com as caracterısticas dos
vertices, e atribuicao a cada vertice do valor correspondente.
4.1 Metodologia para avaliacao
Para a avaliacao do algoritmos, sera considerada a media amostral de 60 rodadas
com inicializacao aleatoria, da quantidade de vertices recuperados com a
caracterıstica escolhida. Alem disso serao calculados o desvio padrao desse
resultado. O limite de vertices explorados ira aumentar gradualmente ate em torno
de 50% do total de vertices em cada grafo.
4.2 Comparacao com Busca em Largura
Para os datasets escolhidos, os resultados serao comparados com os obtidos atraves
da busca em largura. A busca em largura (BFS) entretanto, por nao ter um ponto
de parada explıcito, retorna todos os vertices do grafo, ordenados de acordo com o
seu ordenamento de exploracao. Para avaliar a qualidade dos resultados da busca
em largura, a variavel limite utilizada anteriormente para definir quantos vertices
seriam explorados na busca heurıstica, sera utilizada para estipular quantos
vertices serao considerados no resultado da busca em largura.
25
4.2.1 Redes do Facebook
O conjunto de dados do Facebook, apos uma filtragem inicial, possui quatro
caracterısticas as quais nesse trabalho chamaremos de A, B, C e D . Sao
caracterısticas anonimas e o significado de cada uma delas nao e relevante para
esse trabalho.
A distribuicao do tipo das arestas de cadas uma dessas caracterısticas pode ser
vista na tabela 4.2. Sendo PT, PD e PN as fracoes das arestas ja discutidas
anteriormente, e Positivos, a quantidade de valores “1” presentes em determinada
caracterıstica.
Tabela 4.2: Distribuicao de arestas - Rede do Facebook
Caracterıstica PT PD PN Positivos (%)
A 0,015 0,19 0,80 66 (8.8%)
B 0,04 0,27 0,68 109 (14%)
C 0,66 0,30 0,04 582 (78%)
D 0,10 0,43 0,47 215 (29%)
A primeira caracterıstica a ser avaliada foi a A que possui 66 vertices que tem
valor positivo. Os resultados dos algoritmos podem ser vistos na tabela 4.3 abaixo.
26
Tabela 4.3: Resultados da busca pela caracterıstica A
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
20 2.2 1.5 7.1 1.4
40 3.3 1.8 11.0 1.1
60 4.1 2.3 13.4 1.0
80 4.5 2.2 15.6 1.2
100 6.4 2.3 17.4 0.8
120 7.3 2.8 19.9 1.3
140 8.2 3.8 20.1 1.1
160 11.5 5.1 21.3 1.2
180 12.8 5 25.3 1.4
200 16.2 6 25.6 1.9
220 18.4 7 27.8 3.2
240 19.5 7.8 29.4 3.8
260 20.3 8.3 28.7 4.6
280 24.1 9.3 26.9 4.4
300 25.0 10 27.4 4.5
320 28.3 9.3 31.1 2.8
340 30.8 10 31.9 2.9
Como pode ser visto, em geral o algoritmo utilizando a heurıstica tem melhor
performance que a Busca em Largura. Alem de encontrar mais vertices com a
caracterıstica desejada, o seu desvio padrao se mantem significativamente menor
que o desvio devido ao metodo da busca em largura, o que faz com que seus
resultados sejam mais estaveis pois nao apresentam uma grande variancia na
execucao dos experimentos. O grafico a seguir ilustra a diferenca de desempenho
entre os metodos de busca.
27
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 3400
5
10
15
20
25
30
35
40
45
50
55
60
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica A
BFSHeurıstica
Como essa caracterıstica possui um numero pequeno de vertices positivos, era
natural esperar que com o aumento da quantidade de vertices a serem explorados,
em algum momento, a busca em largura e a busca heurıstica convergiriam, pois ja
estariam se aproximando da fronteira da quantidade de vertices possıveis de serem
descobertos. No entanto logo de inıcio, e apesar da baixa quantidade de
informacao das primeiras decisoes, a busca heurıstica possuıa uma cobertura alta,
ou seja, retorna mais vertices positivos para a caracterıstica desejada.
Em seguida passou-se a analise da caracterıstica B, com 109 vertices positivos para
esta caracterıstica. A tabela 4.4 com os resultados para essa caracterıstica segue
abaixo.
28
Tabela 4.4: Resultados da busca pela caracterıstica B
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
20 2.5 2.2 11.4 0.7
40 3.7 2.3 2.2 0.8
60 5.2 3.2 3.8 0.6
80 7.5 3.4 5.1 1.5
100 9.3 3.8 6.5 1.6
120 11.2 4.2 9.6 2.3
140 13.1 6.2 13.2 1.8
160 16.4 7.4 16.2 2.3
180 21.5 7.6 32.4 2.4
200 23.6 8.1 21.5 0.9
220 27.2 11.2 23.2 1.8
240 28.9 12.4 24.8 1.6
260 31.2 11.4 38.4 2.4
280 40.4 15.3 41.3 3.3
300 37.8 15.8 33.2 3.2
320 39.9 15.8 33.9 3.7
340 40.9 14.7 46.5 4.1
Novamente, como no caso anterior, temos resultados melhores na busca heurıstica
em comparacao a busca em largura, no entanto como podera ser visto melhor no
grafico logo abaixo, em alguns pontos os dois metodos apresentaram eficiencia
muito semelhante. O desvio padrao da busca em largura aumenta com uma razao
muito maior que o desvio da busca heurıstica. Se imaginarmos a aplicacao desse
metodos em conjuntos de dados muito maiores, seriam desejaveis resultados nos
quais a variancia nao cresca tao rapido.
29
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 3400
5
10
15
20
25
30
35
40
45
50
55
60
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica B
BFSHeurıstica
Continuando, uma analise que pode ser interessante e a dos resultados para a
caracterıstica C, a qual conta com 582 vertices positivos. Como vemos na tabela
4.5 e no respectivo grafico, temos resultados levemente piores ao utilizar a busca
heurıstica para essa propriedade. A BFS vence em desempenho em todas as
quantidades de vertices explorados. Esse comportamento pode ser em parte
justificado pela quantidade de vertices que sao positivos para essa caracterıstica, o
que influi diretamente na distribuicao das arestas. Uma escolha proxima da
aleatoriedade (como a feita pela busca em largura), acaba por ter um resultado tao
bom quanto um algoritmo informado, visto que a quantidade de vertices positivos
e tao grande proporcionalmente dentro do grafo, que a possibilidade de retirar um
positivo ao acaso e muito grande.
30
Tabela 4.5: Resultados da busca pela caracterıstica C
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
20 17.0 2.2 15.2 0.6
40 33.2 3.1 31.1 0.6
60 49.1 3.6 44.3 0.8
80 65.7 4.8 63.3 1.2
100 79.4 4.9 79.0 1.3
120 94.3 5.2 90.5 1.4
140 107.2 6.2 106.8 2.1
160 125.2 7.3 123.5 2.3
180 141.0 7.4 140.7 2.6
200 157.6 7.8 154.4 1.8
220 174.5 8.2 170.6 2.4
240 189.4 8.5 185.3 3.1
260 208.1 8.6 109.2 2.8
280 220.9 8.9 214.1 4.2
300 238.0 16.1 229.0 1.6
320 254.2 17.8 244.2 2.6
340 269.1 28.2 259.3 3.6
No entanto, existe um fator que pode nos fazer acreditar que mesmo com os
valores de media menores que os da busca em largura, a busca heurıstica ainda e
muito boa nesse caso. Se repararmos nos valores de desvio padrao da busca em
largura e compararmos esses valores com os da busca informada, veremos que os
resultados da busca em largura sao mais variaveis. Isso acaba nao garantindo que
a busca ira atingir essa media em todas as suas execucoes, e depende fortemente
do vertice inicial onde a busca foi iniciada..
31
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340020406080
100120140160180200220240260280
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica C
BFSHeurıstica
Se em algumas ocasioes o resultado podera ser ate mesmo maior do que a media,
ao mesmo tempo, podem ocorrer iteracoes com resultados bem abaixo. Entao
mesmo que a busca heurıstica esteja perdendo se olharmos somente para os valores
da media, ela ainda pode ser considerado mais estatisticamente confiavel, devido
ao baixo desvio.
32
Tabela 4.6: Resultados da busca pela caracterıstica D
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
20 5.1 2.0 8.6 1.4
40 11.2 2.2 17.4 2.5
60 16.1 1.8 20.1 1.6
80 22.0 2.6 31.2 2.8
100 26.1 3.5 33.1 3.4
120 33.4 4.1 40.0 4.2
140 39.2 4.6 44.9 3.8
160 46.5 4.8 49.4 2.2
180 51.0 5.4 53.8 4.2
200 55.3 6.4 64.6 5.4
220 66.4 7.2 70.3 5.8
240 69.7 6.8 71.1 6.2
260 71.6 9.3 75.5 6.1
280 83.5 8.2 85.8 6.4
300 88.3 6.4 88.6 3.2
320 94.0 7.2 96.0 5.4
340 100.1 5.6 101.2 5.2
A caracterıstica D chama a atencao para um dos principais fatores de melhora no
desempenho do algoritmo, que e a distribuicao de suas arestas vista na tabela 4.2.
Quanto maior o coeficiente PD ,o algoritmo tende a perder sua capacidade de
prever as relacoes que influenciam em presenca de caracterıstica em um vertice
(mas nao somente por esse fator). Ainda assim o algoritmo de busca conseguiu
obter resultados pouco melhores que a BFS, mas com um aumento do seu desvio
em relacao a outros momentos, o que pode ser influencia de alguns resultados ruins
devidos a configuracao das arestas.
33
0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 3400
20
40
60
80
100
120
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica D
BFSHeurıstica
4.2.2 Rede do Google Plus
O grafo gerado pelo conjunto de dados da rede social Google Plus, e semelhante ao
gerado pelos dados do Facebook no sentido dos vertices serem pessoas e as arestas
as suas amizades. Entretanto, possui um tamanho seis vezes maior no conjunto de
vertices. Esse aumento significativo da rede e importante para observarmos o
comportamento do algoritmo de busca proposto em redes maiores. As distribuicoes
dos tipos de arestas nas caracterısticas separadas para analise podem ser vistas na
tabela 4.7
Tabela 4.7: Distribuicao do tipo de arestas - Rede do Google Plus
Caracterıstica PT PD PN Positivos (%)
A 0,60 0,34 0,06 3528 (72%)
B 0,03 0,25 0,71 914 (20%)
C 0,04 0,22 0,74 521 (10%)
34
A primeira caracterıstica que foi utilizada para realizar a busca de vertices nesse
grafo esta presente em aproximadamente 72% de vertices da rede. Esse percentual
influencia o resultado, como poderemos observar na tabela 4.8 e no grafico.
Tabela 4.8: Resultados da busca - Caracterıstica A
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
100 75.2 8.1 70.4 3.1
300 213.1 30.3 220.2 5.2
500 363.6 31.6 369.1 4.6
700 510.2 45.2 517.3 6.7
900 643.0 103.1 662.2 11.1
1100 800.1 56.2 807.0 6.4
1300 940.3 67.0 946.2 13.2
1500 1078.4 61.1 1100.1 22.2
1700 1219.0 68.2 1238.0 19.6
1900 1365.8 66.5 1395.8 19.2
2100 1508.4 52.6 1547.3 22.9
2300 1650.6 61.2 1700.4 25.3
2500 1802.7 51.3 1840.2 25.1
Como a caracterıstica esta presente em uma parcela muito alta dos vertices do
grafo, isso faz com que os metodos tenham um resultado muito parecido devido a
facilidade em encontrar nos com essa caracterıstica. O mesmo comportamento
pode ser observado na rede do Facebook para uma caracterıstica que tambem era
presente em um percentual alto de vertices do grafo (Caracterıstica C, positiva em
78% dos vertices).
35
0 100 300 500 700 900 1,100 1,300 1,500 1,700 1,900 2,100 2,3000100
300
500
700
900
1,100
1,300
1,500
1,700
1,900
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica A
BFSHeurıstica
Tanto a BFS como o algoritmo utilizando a heurıstica apresentam resultado
similares com uma pequena diferenca quando o limite de vertices explorados se
aproxima. A mesma questao do desvio padrao que fora anteriormente citada, se
aplica tambem nesse caso. Como os valores de media para ambos metodos sao
semelhantes, pode-se considerar um menor desvio padrao e mais vantajoso.
36
Tabela 4.9: Resultados da busca - Caracterıstica B
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
100 15.3 6.15 20.3 2.79
300 51.5 8.36 52.5 2.86
500 91.1 24.74 93.1 2.59
700 138.4 39.35 129.6 0.88
900 166.8 41.09 163.2 1.51
1100 206.4 53.01 199.0 1.19
1300 246.0 54.24 246.1 0.69
1500 267.1 43.65 293.6 0.49
1700 302.6 52.45 338.9 0.41
1900 345.2 60.49 371.4 1.03
2100 370.9 66.55 416.8 0.57
2300 409.3 47.0 450.3 0.5
2500 451.0 42.0 491.9 0.6
Quando existem proporcionalmente poucos vertices descobertos, os valores da
funcao heurıstica para os vertices sao muito semelhantes ou ate mesmo iguais, o
que faz com que o proximo vertice a ser explorado seja escolhido de forma
aleatoria. Conforme se percorrem mais vertices, e com isso tenhamos mais
informacao a respeito das caracterıstica, consequentemente sera possıvel avaliar de
forma mais precisa o valor da heurıstica para os vertices restantes e assim tomar
decisoes mais bem informadas.
No caso da caracterıstica B, analisando exclusivamente o grafico dos resultados se
imaginava que para uma quantidade pequena de vertices explorados o algoritmo se
saia pior. No entanto se verificarmos a fracao de positivos da heurıstica em relacao
aos da BFS, vemos que na verdade com poucos vertices explorados essa fracao e
maior do que ao explorar uma quantidade maior de vertices do grafo.
Por exemplo, podemos ver que ao explorarmos 100 vertices, a fracao de positivos
em relacao a BFS e de cerca de 33% (5 positivos a mais), ja ao serem explorados
2500 vertices essa fracao e de somente 2% (38 positivos a mais).
37
0 100 300 500 700 900 1,100 1,300 1,500 1,700 1,900 2,100 2,3000
50
100
150
200
250
300
350
400
450
500
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica B
BFSHeurıstica
A partir de 1300 vertices explorados, o que equivale a aproximadamente 26% do
total de vertices do grafo, ja e possıvel perceber um distanciamento significativo da
busca informada em comparacao com os resultados da busca em largura. Isso no
entanto nao pode ser confundido com o comportamento linear que os graficos
apresentam entre o eixo dos “Vertices Explorados” e o de “Vertices Positivos”.
Essa relacao linear esta diretamente ligada ao fato de que aumentando o limite,
aumenta a quantidade de informacao sobre os vertices explorados e seus vizinhos,
o que faz com que escolhas mais bem informadas possam ser tomadas.
Em seguida foram realizados os testes para a caracterıstica C desse mesmo grafo.
Cabe ressaltar que o algoritmo se mostrou mais eficiente do que o esperado pois
sua fracao de vertices com a caracterıstica e bem menor nesse caso (10%).
38
Tabela 4.10: Resultados da busca - Caracterıstica C
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
100 16.2 8.45 13.5 8.74
300 45.3 13.61 35.2 3.55
500 67.1 37.24 71.9 0.73
700 80.1 47.07 94.8 1.07
900 105.5 56.19 141.0 0.53
1100 118.4 79.46 186.2 2.69
1300 139.6 68.5 208.5 1.2
1500 167.2 78.36 239.9 0.47
1700 190.0 87.78 296.1 0.56
1900 208.8 71.63 328.4 0.5
2100 237.9 73.34 367.0 0.87
2300 260.7 62.64 404.2 0.21
2500 283.1 58.23 419.8 0.18
Como podemos perceber, somente ate 500 vertices explorados os resultados sao
proximo entre a BFS e a Heurıstica, partindo disso ja ocorre um grande
desacoplamento entre as retas, com um aumento expressivo da quantidade de
vertices positivos na busca heurıstica. Outro ponto que vale comentario e o desvio
padrao muito proximo do ideal (0) o que demonstra que mesmo rodando 60 vezes
com inicializacoes aleatorias, o algoritmo apresentou praticamente o mesmo
desempenho em todos esses experimentos.
39
0 100 300 500 700 900 1,100 1,300 1,500 1,700 1,900 2,100 2,3000
50
100
150
200
250
300
350
400
450
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Caracterıstica C
BFSHeurıstica
Como vimos na definicao da heurıstica em 3.6. O valor de PN nao e nem mesmo
considerado para calcular o rank de um vertice e por isso nos casos em que PT e
PD sao muito pequenos em relacao a PN, o algoritmo opera nesse bem proximo da
aleatoriedade.
4.2.3 Rede de Blogs
Essa rede, apresentada pelo trabalho de Adamic and Glance [2005], possui apenas
uma caracterıstica como dito anteriormente. Contudo, a apresentacao do seu
resultado traz uma importante confirmacao a respeito do impacto da distribuicao
das arestas na eficiencia do algoritmo, e tambem e relevante por trazer uma rede
duas vezes e mais “rica” que as anteriores, que eram centradas em indivıduos
(egonet).
40
A distribuicao do tipo das arestas nesse grafo pode ser vista na tabela 4.11
Tabela 4.11: Distribuicao de Arestas - Rede de Blogs
Caracterıstica PT PD PN Positivos
A 0.47 0.08 0.44 732 (%49.1)
Para obter as estatısticas de eficiencia da busca nesse grafo, a metodologia e a
mesma utilizada no grafo do Facebook e que foi explicada na secao 4.1 desse
capıtulo. A tabela 4.12 contem o comparativo desses valores ao buscarmos os
vertices pela caracterıstica A (a unica do grafo).
Tabela 4.12: Resultados da busca na rede de Blogs
Vertices Explorados Positivos - BFS σ Positivos - Heurıstica σ
50 15.4 19.00 48.3 2.48
100 35.2 31.92 99.4 0.50
150 49.6 41.03 149.1 0.49
200 69.7 46.53 199.2 0.50
250 100.5 52.95 249.6 0.50
300 117.0 72.37 299.9 0.50
350 126.2 95.61 349.3 0.50
400 148.1 105.88 399.1 0.49
450 151.9 145.08 449.0 0.49
500 204.4 132.02 499.5 0.50
550 224.7 161.39 513.6 0.52
600 253.5 182.80 515.3 0.54
650 266.2 195.26 517.9 0.57
700 304.1 202.14 518.2 0.56
750 346.8 199.36 519.0 0.30
Podemos perceber que o desempenho do algoritmo nesse conjunto de dados apesar
de ser muito melhor que todos os outros resultados, tem uma dificuldade em
continuar melhorando a medida em que sao explorados mais vertices. Isso pode ser
41
causado por existirem vertices que sao “difıceis” de se explorar, provavelmente pro
estarem cercados por outros vertices sem a caracterıstica.
esse resultado apresentado e ainda mais estavel que os anteriores com desvio
padrao medio proximo de 0.5. Tanto o aumento da rede, como a grande relacao
entre caracterısticas e composicao de arestas sao os responsaveis pela acuracia do
algoritmo.
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 7500
50
100
150
200
250
300
350
400
450
500
550
Vertices Explorados
Ver
tices
Posit
ivos
BFS X Heurıstica - Blogs
BFSHeurıstica
Se contextualizarmos a caracterıstica que foi utilizada, fica ainda mais nıtido o seu
impacto no resultado. Como ela representa a inclinacao polıtica de um blog, e de
se esperar que blogs com as mesmas tendencias no aspecto polıtico estejam mais
relacionados e facam mais referencias entre si, do que o oposto. Esse seria o grande
ponto positivo do algoritmo, que e performar bem em situacoes onde a correlacao
entre presenca de caracterıstica e presenca de relacionamento e alta. Mesmo com
um fracao de positivos alta (49%) o resultado foi melhor do que os anteriores (que
eram melhores para fracoes de positivos baixas).
42
Capıtulo 5
Conclusao e Trabalhos Futuros
A respeito dos objetivos elencados para esse trabalho, modelar e projetar um
algoritmo de busca heurıstica e buscar uma eficiencia de busca maior comparado
aos metodos ja existentes, pode-se dizer que esses objetivos foram alcancados e em
alguns casos superados.
O algoritmo de busca em largura, em relacao ao algoritmo implementado,encontra
a solucao do problema, porem sua amostragem aleatoria tende a nao se apresentar
uma solucao eficiente. Entretanto, em uma situacao de recursos computacionais
muito limitados, poderia ser aplicavel devido a sua baixa complexidade em relacao
a uma busca heurıstica.
A heurıstica que foi modelada, funcionou bem nos casos em que existe uma alta
correlacao entre a presenca da caracterıstica, e a formacao de uma aresta. Nos
casos em que existe por exemplo uma grande polarizacao dos vertices, como no
grafo de blogs de polıtica, a heurıstica leva na maioria dos casos a resultados muito
bons, por evitar explorar que tenham baixa probabilidade de apresentar essa
caracterıstica.
Um dos pontos levantados a respeito da busca heurıstica foi que quando uma
heurıstica apresenta boas solucoes para o resultado desejado, geralmente apresenta
um tempo de execucao alto. No capıtulo 3 desse trabalho ja havia sido notado que
a complexidade e o tempo de execucao da busca heurıstica seriam altos, entao
restava saber se os resultados compensariam esse aumento de complexidade. No
capıtulo 4, com todas a analises feitas nas comparacoes, podemos perceber que as
solucoes encontradas pela busca compensariam esse aumento previsto de
43
complexidade
O aumento da rede utilizada para testes tambem se mostrou um fator importante
de melhoria na eficiencia dos algoritmos. Com poucos vertices, a quantidade de
informacao que pode ser utilizada para a tomada de decisao e pequena. Enquanto
o algoritmo nao conhecer uma boa parcela dos nos da rede, muitas decisoes sao
tomadas de forma aleatoria. A dificuldade em testar esses metodos em conjuntos
de dados muito maiores que os utilizados, se deu principalmente por questoes
computacionais. Para testar o grafo da rede social Google Plus, que tem menos de
cinco mil vertices, ja foram necessarias algumas horas para poder coletar os dados.
Uma proposta de trabalho futuro vai no sentido de tentar realizar as avaliacoes em
redes muito maiores e mais proxima da realidade das redes sociais. Para isso
podem ser utilizados clusters de computadores ou alternativas de programacao
paralela, que ajudem a realizar as operacoes quando a necessidade de recursos
computacionais e consideravelmente alta.
Como outra sugestao de continuidade desse trabalho, fica a implementacao de um
servico online para realizar a busca dentro da rede de amigos de um usuario do
Facebook por exemplo. A partir da utilizacao da interface de aplicacao do proprio
Facebook, e possıvel obter alguns dados a respeito dos amigos de um usuario e,
utilizando como entrada do servico uma determinada caracterıstica desejada
(genero, interesses, idioma), poderia ser feita um abusca informada que retorne
com uma determinada margem de erro quais os usuarios mais provaveis de ter a
caracterıstica buscada.
44
Referencias Bibliograficas
Lada A. Adamic and Natalie Glance. Thepolitical blogosphere and the 2004 us
election. Proceedings of the WWW-2005 Workshop on the Weblogging
Ecosystem, 2005.
John Adrian Bondy and U.S. Rama Murty. Graph Theory with Aplications.
Macmillan/Elsevier, 5 edition, 1976. ISBN 0-44-19451-7.
John Adrian Bondy and U.S. Rama Murty. Graduate Texts in Mathematics. Graph
Theory. Springer, 1 edition, 2007. ISBN 978-1-84628-969-9.
Thomas H. Cormen, Charles E. Leiserson, Clifford Stein, and Ronald L. Rivest.
Algoritmos: Teoria e Pratica. Campus Elsevier, 3 edition, 2012. ISBN
978-85-3523-699-6.
Joao Neiva de Figueiredo and Clovis C. Gonzaga. Aplicacao de metodos de busca
em grafos com nos parcialmente ordenados a alocacao de torres de transmissao.
Pesquisa Operacional, 23:209 – 220, 01 2003. ISSN 0101-7438.
Jure Leskovec and Andrej Krevl. SNAP Datasets: Stanford large network dataset
collection. http://snap.stanford.edu/data, June 2014.
Fabricio Murai, Bruno Ribeiro, Don Towsley, and Krista Gile. Pay few, influence
most: Online myopic network covering. IEEE NetSciCom Workshop, 2014.
Fabricio Murai, Diogo Renno, Bruno Ribeiro, Pappa Gisele, Don Towsley, and
Krista Gile. Selective harvesting for networks. Data Mining and Knowledge
Discovery, sob revisao.
P. O. Boaventura Neto. Grafos: teoria, modelos, algoritmos. E. Blucher, Sao Paulo
SP, 1996.
45
Elaine Rich and Kevin Knight. Inteligencia artificial. Makron Books, 1993.
Stuart Russel and Peter Norvig. Artificial intelligence: a modern approach.
Prentice Hall, 2003.
J.L. Szwarcfiter. Grafos e algoritmos computacionais. Campus, 1986.
K. Thulasiraman and M.N.S. Swamy. Graphs: Theory and Algorithms. A Wiley
interscience publication. Wiley, 1992. ISBN 9780471513568.
46
Apendice A
Codigo Fonte
from f u t u r e import d i v i s i o n
from f u t u r e import p r i n t f u n c t i o n
import networkx as nx
import pandas
import operator
import s t a t i s t i c s
import t i m e i t as time
import random
l i m i t e = 340
props = pandas . r e a d e x c e l ( ’ 1912 props . x l sx ’ )
i d s = props [ ’ id ’ ] . va lue s
H = nx . read gml ( ’ po lb l og s . gml ’ , ’ id ’ )
prop = props [ ’ prop0 ’ ] . va lue s
fh = open( ” 1912 . edges ” , ’ rb ’ )
G = nx . r e a d e d g e l i s t ( fh , nodetype=int )
G. add nodes from ( i d s )
#d e f i n e qua l sera o g r a f o u t i l i z a d o no exemplo (G (750 nos ) , H (1490 nos )
g ra f o = G
i = 0
pt = 0
47
pn = 0
pd = 0
#Como G e H s o d i f e r e n t e s na e s t r u t u r a p r e c i s o r e s e t a r os 2 em separado
for n in i d s :
i f ( prop [ i ] == 0 or prop [ i ] == 1 ) :
G. node [ n ] [ ’ va lue ’ ] = prop [ i ]
i = i + 1
else :
G. node [ n ] [ ’ va lue ’ ] = 0
i = i + 1
G. node [ n ] [ ’ rank ’ ] = 0
G. node [ n ] [ ’numT ’ ] = 0
G. node [ n ] [ ’numN ’ ] = 0
for n in H. nodes ( ) :
H. node [ n ] [ ’ rank ’ ] = 0
H. node [ n ] [ ’numT ’ ] = 0
H. node [ n ] [ ’numN ’ ] = 0
#Cakcula a d i s t r i b u i o de a r e s t a s
def c a l c u l a A r e s t a s ( g ) :
pt = 0
pd = 0
pn = 0
num edges = g . number of edges ( )
arrayP = [ ]
for edg in g . edges ( ) :
i f ( g . node [ edg [ 0 ] ] [ ’ va lue ’ ] != g . node [ edg [ 1 ] ] [ ’ va lue ’ ] ) :
pd = pd+1
e l i f ( g . node [ edg [ 0 ] ] [ ’ va lue ’ ] == 0 and g . node [ edg [ 1 ] ] [ ’ va lue ’ ] == 0 ) :
pn = pn+1
48
else :
pt = pt+1
# Normalizando pt , pd e pn
i f ( ( pd + pt + pn) != g . number of edges ( ) ) :
print ( ” Ocorreu um er ro no processamento das propr i edades ” )
e x i t (1 )
else :
pt = pt / num edges
pn = pn / num edges
pd = pd / num edges
arrayP . append ( pt )
arrayP . append (pn)
arrayP . append (pd)
return arrayP
ve to rProbab i l i dade s = c a l c u l a A r e s t a s ( g ra f o )
pt = veto rProbab i l i dade s [ 0 ]
pn = veto rProbab i l i dade s [ 1 ]
pd = veto rProbab i l i dade s [ 2 ]
print ( pt )
print (pd )
print (pn )
#Busca Informada
def buscaInformada ( g , s t a r t , l i m i t ) :
i = 0
exp lored = [ ]
d i s cove r ed = l i s t ( g . nodes ( ) )
49
exp lored . append ( s t a r t )
d i s cove r ed . remove ( s t a r t )
while ( i < l im i t −1):
i = i + 1
for n in g . ne ighbors ( s t a r t ) :
i f ( g . node [ s t a r t ] [ ’ va lue ’ ] == 1 ) :
g . node [ n ] [ ’numT ’ ] = g . node [ n ] [ ’numT ’ ] + 1
else :
g . node [ n ] [ ’numN ’ ] = g . node [ n ] [ ’numN ’ ] + 1
#c a l c u l a v a l o r da p r i o r i d a d e dos v i z i n h o s
g . node [ n ] [ ’ rank ’ ] = h e u r i s t i c a ( g , n )
d i s cove r ed = sorted ( d i s cove r ed , key = lambda n : g . node [ n ] [ ’ rank ’ ] )
s t a r t = d i s cove r ed . pop ( )
exp lored . append ( s t a r t )
return exp lored
#H e u r i s t i c a
def h e u r i s t i c a ( g , node ) :
expoentT = g . node [ node ] [ ’numT ’ ]
expoentN = g . node [ node ] [ ’numN ’ ]
return 1−(1−pt )∗∗ expoentT ∗ (1−pd)∗∗ expoentN
j = 1
bfsTimes = [ ]
heuTimes = [ ]
b f s R e s u l t s = [ ]
50
heuResults = [ ]
while j <= 100 :
# I n i c i o A l e a t o r i o
randomStart = random . cho i c e ( g ra f o . nodes ( ) )
######################################################
# BFS
######################################################
s t a r t t i m e = time . d e f a u l t t i m e r ( )
bfsEdges = l i s t ( nx . b f s e d g e s ( gra fo , randomStart ) )
bfsTimes . append ( time . d e f a u l t t i m e r ( ) − s t a r t t i m e )
n e w l i s t 0 = map( operator . i t emge t t e r ( 0 ) , bfsEdges )
n e w l i s t 1 = map( operator . i t emge t t e r ( 1 ) , bfsEdges )
bfsNodes = [ ]
for edg in n e w l i s t 0 :
i f ( edg not in bfsNodes ) :
bfsNodes . append ( edg )
for edg in n e w l i s t 1 :
i f ( edg not in bfsNodes ) :
bfsNodes . append ( edg )
posBFS = 0
i = 0
for n in bfsNodes :
i f ( g ra f o . node [ n ] [ ’ va lue ’ ] == 1 ) :
posBFS = posBFS + 1
i f ( i == l i m i t e ) :
51
break
i = i + 1
b f s R e s u l t s . append (posBFS)
##############################################################
# Algoritmo Guloso
############################################################
s t a r t t i m e = time . d e f a u l t t i m e r ( )
v i s i t edNodes = l i s t ( buscaInformada ( grafo , randomStart , l i m i t e ) )
heuTimes . append ( time . d e f a u l t t i m e r ( ) − s t a r t t i m e )
posHEU = 0
for n in v i s i t edNodes :
i f ( g ra f o . node [ n ] [ ’ va lue ’ ] == 1 ) :
posHEU = posHEU + 1
heuResults . append (posHEU)
j = j + 1
print ( ” P o s i t i v o s do BFS : ”+str ( s t a t i s t i c s . mean( b f s R e s u l t s ) ) )
print ( ” Desvio do BFS : ”+str ( s t a t i s t i c s . s tdev ( b f s R e s u l t s ) ) )
print ( ”Tempo do BFS : ”+ str ( s t a t i s t i c s . mean( bfsTimes ))+”\n” )
print ( ” P o s i t i v o s do Guloso : ”+str ( s t a t i s t i c s . mean( heuResults ) ) )
print ( ” Desvio do Guloso : ”+str ( s t a t i s t i c s . s tdev ( heuResults ) ) )
print ( ”Tempo do Guloso : ”+ str ( s t a t i s t i c s . mean( heuTimes ) ) )
52