desenvolvimento de um algoritmo de busca em redes por

63
DESENVOLVIMENTO DE UM ALGORITMO DE BUSCA EM REDES POR V ´ ERTICES COM CARACTER ´ ISTICAS ESPEC ´ IFICAS Victor de Oliveira Cardoso Projeto de Gradua¸c˜ ao apresentado ao departamento de Engenharia da Computa¸c˜ ao e Informa¸c˜ ao, da Universidade Federal do Rio de Janeiro, como parte dos requisitos necess´ arios ` aobten¸c˜ ao do t´ ıtulo de EngenheirodaComputa¸c˜aoeInforma¸c˜ ao. Orientador: Daniel Ratton Figueiredo Rio de Janeiro Fevereiro de 2017

Upload: others

Post on 28-Jun-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Desenvolvimento de um algoritmo de busca em redes por

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

Page 2: Desenvolvimento de um algoritmo de busca em redes por

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

Page 3: Desenvolvimento de um algoritmo de busca em redes por

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

Page 4: Desenvolvimento de um algoritmo de busca em redes por

“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

Page 5: Desenvolvimento de um algoritmo de busca em redes por

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

Page 6: Desenvolvimento de um algoritmo de busca em redes por

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

Page 7: Desenvolvimento de um algoritmo de busca em redes por

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

Page 8: Desenvolvimento de um algoritmo de busca em redes por

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

Page 9: Desenvolvimento de um algoritmo de busca em redes por

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

Page 10: Desenvolvimento de um algoritmo de busca em redes por

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

Page 11: Desenvolvimento de um algoritmo de busca em redes por

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

Page 12: Desenvolvimento de um algoritmo de busca em redes por

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

Page 13: Desenvolvimento de um algoritmo de busca em redes por

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

Page 14: Desenvolvimento de um algoritmo de busca em redes por

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

Page 15: Desenvolvimento de um algoritmo de busca em redes por

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

Page 16: Desenvolvimento de um algoritmo de busca em redes por

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

Page 17: Desenvolvimento de um algoritmo de busca em redes por

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

Page 18: Desenvolvimento de um algoritmo de busca em redes por

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

Page 19: Desenvolvimento de um algoritmo de busca em redes por

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

Page 20: Desenvolvimento de um algoritmo de busca em redes por

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

Page 21: Desenvolvimento de um algoritmo de busca em redes por

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

Page 22: Desenvolvimento de um algoritmo de busca em redes por

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

Page 23: Desenvolvimento de um algoritmo de busca em redes por

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

Page 24: Desenvolvimento de um algoritmo de busca em redes por

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

Page 25: Desenvolvimento de um algoritmo de busca em redes por

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

Page 26: Desenvolvimento de um algoritmo de busca em redes por

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

Page 27: Desenvolvimento de um algoritmo de busca em redes por

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

Page 28: Desenvolvimento de um algoritmo de busca em redes por

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

Page 29: Desenvolvimento de um algoritmo de busca em redes por

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

Page 30: Desenvolvimento de um algoritmo de busca em redes por

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

Page 31: Desenvolvimento de um algoritmo de busca em redes por

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

Page 32: Desenvolvimento de um algoritmo de busca em redes por

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

Page 33: Desenvolvimento de um algoritmo de busca em redes por

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

Page 34: Desenvolvimento de um algoritmo de busca em redes por

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

Page 35: Desenvolvimento de um algoritmo de busca em redes por

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

Page 36: Desenvolvimento de um algoritmo de busca em redes por

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

Page 37: Desenvolvimento de um algoritmo de busca em redes por

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

Page 38: Desenvolvimento de um algoritmo de busca em redes por

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

Page 39: Desenvolvimento de um algoritmo de busca em redes por

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

Page 40: Desenvolvimento de um algoritmo de busca em redes por

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

Page 41: Desenvolvimento de um algoritmo de busca em redes por

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

Page 42: Desenvolvimento de um algoritmo de busca em redes por

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

Page 43: Desenvolvimento de um algoritmo de busca em redes por

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

Page 44: Desenvolvimento de um algoritmo de busca em redes por

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

Page 45: Desenvolvimento de um algoritmo de busca em redes por

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

Page 46: Desenvolvimento de um algoritmo de busca em redes por

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

Page 47: Desenvolvimento de um algoritmo de busca em redes por

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

Page 48: Desenvolvimento de um algoritmo de busca em redes por

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

Page 49: Desenvolvimento de um algoritmo de busca em redes por

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

Page 50: Desenvolvimento de um algoritmo de busca em redes por

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

Page 51: Desenvolvimento de um algoritmo de busca em redes por

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

Page 52: Desenvolvimento de um algoritmo de busca em redes por

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

Page 53: Desenvolvimento de um algoritmo de busca em redes por

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

Page 54: Desenvolvimento de um algoritmo de busca em redes por

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

Page 55: Desenvolvimento de um algoritmo de busca em redes por

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

Page 56: Desenvolvimento de um algoritmo de busca em redes por

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

Page 57: Desenvolvimento de um algoritmo de busca em redes por

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

Page 58: Desenvolvimento de um algoritmo de busca em redes por

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

Page 59: Desenvolvimento de um algoritmo de busca em redes por

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

Page 60: Desenvolvimento de um algoritmo de busca em redes por

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

Page 61: Desenvolvimento de um algoritmo de busca em redes por

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

Page 62: Desenvolvimento de um algoritmo de busca em redes por

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

Page 63: Desenvolvimento de um algoritmo de busca em redes por

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