SlideShare une entreprise Scribd logo
1  sur  37
Conexões científicas – análise de padrões de
conectividade
Relatório final das atividades desenvolvidas,
período de 01/12/2008 a 31/05/2009
Conteúdo
Conteúdo.................................................................................................................................................2
Introdução................................................................................................................................................3
Um pouco de história..........................................................................................................................4
Euler e as Pontes de Königsberg...................................................................................................4
Erdös e o Universo Aleatório..........................................................................................................5
Milgram e os Seis graus de separação..........................................................................................7
A Internet........................................................................................................................................8
Um pouco de matemática...................................................................................................................9
Definição.........................................................................................................................................9
O modelo Barabási-Albert..............................................................................................................9
Distribuição de graus....................................................................................................................10
Distância média............................................................................................................................11
Coeficiente de Aglutinação...........................................................................................................12
Detalhes de Implementação..................................................................................................................14
Por que Drupal?................................................................................................................................14
Modularização...................................................................................................................................14
Graph Module...............................................................................................................................14
Graph API.....................................................................................................................................14
Graph Rendering..........................................................................................................................16
Conclusão..............................................................................................................................................18
Bibliografia.............................................................................................................................................18
Notas......................................................................................................................................................18
Apêndice A – Código Fonte do Graph Module.....................................................................................20
Apêndice B – Código fonte do Flex Graph Rendering..........................................................................30
Introdução
A abordagem de problemas reais utilizando a teoria dos Grafos a muito vem ganhando importância,
unido a esta, as possibilidades da informática e atualmente o crescimento da Internet e sua
crescente importância para disseminação de informações em proporções nunca antes imaginadas,
estabelece um novo paradigma científico. O presente trabalho possui como propósito a construção
de um software (de código aberto) para extração e análise de informações das redes sociais
estabelecidas na infovia, proporcionando gerar arquivos de imagem que representem a rede social e
sua representação na forma de grafos.
Os avanços tecnológicos, em particular a revolução que a informática proporcionou para a ciência é
indiscutível e irreversível, não obstante a matemática pode se valer dessa tecnologia para provar
alguns fatos sem as metodologias clássicas. Na base estrutural da informática encontram-se
aninhadas diversas idéias matemáticas e um dos produtos da informática que mais ganhou
importância em todos os ramos da sociedade, a Internet, pode ser entendida segundo a visão
matemática como um grafo, que se estende por todo o globo terrestre, se expandindo a cada dia.
O estudo do comportamento e da topologia deste tipo de grafo, não apresenta ainda material
conclusivo, principalmente em português, existindo poucos estudos na área.
Por isso, durante esse texto eu traduzi vários termos da literatura estrangeira para os seus
equivalentes em português, alguns, porém eu não consegui achar tradução razoável, optando então
por utilizar os termos técnicos em inglês. Isso aconteceu, por exemplo, com o termo principal desse
documento, Scale-free Networks, o qual a tradução aproximada para português seria “Redes livres
de Escala” ou “Redes de escala invariante” mas optar por elas dificultaria ao leitor interessado na
hora de buscar por mais literatura na Internet.
Um pouco de história
A matemática por trás das Scale-free Networks é – como toda teoria dos grafos – intuitiva, o objetivo
desse capítulo é introduzir o leitor aos conceitos necessários e os motivos que justificam a pesquisa
em Scale-free Networks.
Euler e as Pontes de Königsberg
Leonhard Euler foi um matemático impar, o conjunto ainda hoje incompleto de sua obra – Opera
Omnia – soma 76 volumes em mais de 3 mil páginas1
. Euler possui contribuições em praticamente
todas as áreas da matemática, tendo desempenhado um papel extremamente relevante no
desenvolvimento da matemática aplicada.
Seus trabalhos mostram várias aplicações das séries de Fourier, de diagramas de Venn e dos
números de Euler. Mas no escopo desse documento estamos particularmente interessados num
problema que levou a criação de uma área completamente nova da matemática, as Pontes de
Königsberg, Königsberg era uma pequena cidade da Prússia (atualmente Kaliningrado, Rússia)
localizada as margens do rio Pregel, a aproximadamente 800km da casa de Euler em São
Petersburgo. Königsberg é dividida pelo rio em duas partes continentais e duas ilhas fluviais.
Figura 1 – Ilustração de Königsberg2
e suas Pontes em 1735
Os cidadãos de Königsberg se perguntavam se existe um caminho que atravesse as sete pontes
passando uma só vez por cada uma das pontes3
. Euler não só provou que era impossível realizar tal
façanha como também forneceu em seu artigo as bases para a Teoria dos Grafos.
A genialidade da solução de Euler não se encontra na solução em si, mas em representar o
problema no que ele chamou de Grafo.
Um grafo é um conjunto de nós e arestas (arcos) usualmente representadas como pontos e curvas
respectivamente.
Figura 2 – Representação em grafo do problema de Konigsberg
A prova de Euler para a não existência de tal caminho se baseia numa simples observação. Nós
com número impar de arestas necessariamente são ou o ponto de partida ou o ponto de chegada, e
para que seja possível passar por todas as arestas uma e somente uma vez, é necessário que
existam dois nós com número impar de arestas ou nenhum4
. E essa propriedade não se aplica
somente a esse grafo, mais do que isso ela é inerente a todos os grafos, ela é chama de caminho
Euleriano.
Depois dessa contribuição inicial, os grafos vieram se tornar um das maiores áreas da matemática,
tornando-se imprescindíveis para a nossa compreensão de redes.
Erdös e o Universo Aleatório
Se existiu uma pessoa que pôde igualar o feito de Euler tanto em quantidade e quanto em relevância
da sua produção científica, essa pessoa foi Paul Erdös. Nascido na Hungria, filho de matemáticos,
desde de sua primeira infância Erdös se destacava por sua habilidade matemática. Com mais de
511 colaboradores diretos, ele publicou aproximadamente 1500 artigos durante sua vida5
. Foi com
um conterrâneo, Alfréd Rényi, que Erdos escreveu o que seria a primeira tentativa de justificar como
as redes funcionam.
Imagine uma festa com centenas de convidados onde nenhum dos outros candidatos conheça os
outros. Eles vão começar a conversar, e depois – suponhamos meia hora – você encontrará vários
pequenos grupos de duas ou três pessoas. Essas pessoas depois de um tempo provavelmente
ficarão cansadas de conversar com o seu parceiro inicial e irão procurar novos pares.
Agora imagine isso como um grafo, cada convidado da sua festa é um nó, as arestas ligam os nós
(pessoas) que já conversaram entre si na festa.
Figura 3ª
Figura 3b
Figura 3c
Figura 3d
No primeiro momento ( 0=t ) ninguém se conhecia, logo o grafo se parecerá com o da figura 3a. Após
trinta minutos ( 1=t ), teremos vários pares de pessoas, como na figura 3b. E após um tempo
suficientemente grande, teremos um gráfico como o da figura 3d.
Formalmente, o que Erdös e Rényi definiram foi a determinação de um grafo pelo seguinte processo de
construção; comece com N nós e nenhuma aresta, e a cada iteração adicione uma aresta ligando dois
nós aleatórios que não estivessem previamente ligados. É trivial que após
2
)1( −NN
iterações
obteremos um clique.
Milgram e os Seis graus de separação
Stanley Milgram foi um dos psicólogos mais controversos do século vinte. Seus experimentos mais
famosos são o chamado experimento Milgram, em que ele analisou a capacidade dos participantes de
obedecer a uma figura autoritária que os ordenava ações contrárias a consciência pessoal dos
mesmos6
, e o experimento do mundo pequeno7
.
Nesse experimento, o objetivo de Milgram era descobrir a distância entre duas pessoas nos EEUU. Ele
escolheu pares de pessoas de cidades e estados diferentes, para uma pessoa do par ele mandou um
pacote com a foto, nome e outras informações da outra, com as seguintes regras:
1. Adicione seu nome no final da lista;
2. Pegue um dos cartões postais, preencha seus dados e mande de volta para a Universidade
Harvard;
3. Se você conhece pessoalmente a pessoa alvo, envie esse pacote para ela;
4. Caso contrário não tente contatá-la diretamente, ao invés disso envie esse pacote para alguém
que você conheça pessoalmente e que você acredite que tenha mais chances de conhecer o
alvo pessoalmente do que você;
Os resultados foram impressionantes, as cartas não só chegaram aos seus alvos, como ele encontrou
um número médio de passos entre pessoa inicial e alvo de 5,5. Esse é um número muito pequeno,
mesmo se pensando que o experimento se resumiu a cidades no interior dos EEUU.
É óbvio que os resultados para pessoas de países diferentes devem ser maiores, mas isso não ofusca a
relevância dos resultados. Imagine um grafo da sociedade, em que os nós sejam as pessoas, e que
caso elas se conheçam mutuamente há uma aresta entre elas.
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Se a sociedade fosse uma rede aleatória, seria impossível conseguir um valor médio tão baixo, mesmo
que fossem escolhidas pessoas de cidades vizinhas. Parece que temos um problema no nosso modelo,
não parece factível que ele comporte uma distância média tão baixa.
No próximo caso vamos tentar aplicar o modelo a mais uma rede e ver se ela nos dá uma pista de qual
é o problema. O próximo modelo será a Internet.
A Internet
O maior repositório de conhecimento da humanidade que já existiu, apesar do meio bilhão de nós que
possui atualmente, a internet começou pequena. Há cinqüenta anos nem o mais visionário dos
escritores de ficção científica sonhava que tal idéia viesse a se tornar real. Como uma rede com 213 nós
em 1981 passa a ter 489.774.2698
nós 26 anos depois? Qual é a topologia dessa rede? Por que ela não
se desmantelou no meio do caminho?
Se a Internet fosse regida pelo modelo de redes aleatórias de Erdös e Rényi antes que a Internet
alcança-se um milhão de nós ela já demandaria mais recursos do que toda a capacidade computacional
que a humanidade possui agora. Logo existe algo muito errado no nosso modelo.
A internet não é aleatória. Imagine que você tenha um fio “infinito” e queira se ligar a rede, você se
conectaria ao velho computador do seu vizinho na periferia da rede ou ao servidor mais central que você
conseguisse alcançar?
As pessoas escolhem a se conectar ao ISP9
que tenha o melhor preço, ou a melhor velocidade, ou uma
série de outros motivos. Mas em geral isso significa que quanto maior for o ISP (quanto mais conexões
com outros ISPs ele tiver, quanto mais no centro da rede ele estiver) mais pessoas escolherão se
conectar a ele.
Assim como com os seis degraus de separação, o modelo de redes aleatórias não consegue explicar a
internet, muitas outras redes reais também não conseguem ser explicadas por essa teoria, e foi a
necessidade de explicar essas situações que levou a criação do modelo de Scale-free Networks, foco
deste documento, que definiremos no próximo capítulo.
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Um pouco de matemática
Definição
Scale-free Networks são grafos de topologia não-trivial onde a distribuição dos graus dos nós da rede
segue uma lei de potência.
O modelo Barabási-Albert
O modelo de redes aleatórias pressupõe que dado um número fixo de nós, arestas são adicionadas
aleatoriamente ligando estes nós entre si, sem que nenhum nó seja acrescentado ou retirado do grafo.
Já as redes encontradas na vida real, pelo contrário, se baseiam firmemente em dois conceitos;
crescimento e anexação preferencial.
Começando com um pequeno grupo de pessoas, a sua rede de amizades vai crescendo com adição
esporádica de novos nós, isso é o que chamamos de crescimento. Mas mais do que isso, é muito mais
provável que você se torne amigo de um amigo de seus amigos do que de um estranho qualquer que
você encontre na rua, isso chamamos de anexação preferencial.
Da mesma forma, a Internet começou pequena, tendo somente dois computadores como nós, e foi
crescendo a cada nova máquina que foi ligada a rede. E na Internet também como na sua rede de
amigos, é o computador que possui mais conexões – provavelmente um servidor de algum ISP – o que
possui a maior probabilidade de que um computador recém adicionado à rede se conecte.
Estes dois ingredientes inspiraram a criação do modelo Barabási-Albert, o que levou ao primeiro modelo
com uma distribuição de graus em lei de potência. O algoritmo do modelo Barabási-Albert é o seguinte:
Começando com um número de nós iniciais ( 0m ), a cada passo adicione um novo nó com 0mm ≤
arestas ligando o novo nó a m diferentes nós.
Na hora de escolher os nós aos quais o novo nó se conectará nós assumimos que a probabilidade Π
de que um nó um novo nó se conectará ao nó i depende do grau ik do nó i da seguinte forma:
( )
∑
=Π
j
j
i
i
k
k
k
Após t iterações esse algoritmo resulta em uma rede com 0mtN += nós e mt arestas. Simulações
numéricas indicam que essa rede evolui para um estado de escala invariante com a probabilidade de
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
que um nó tenha k arestas seguindo uma lei de potência com um expoente 3=BAγ independente da
única variável do modelo, m .
Distribuição de graus
Um dos resultados determinantes do modelo de Scale-free networks, é a sua distribuição de graus.
Definimos distribuição de graus como a uma função nkfG =)( , onde dado um grau k , n é o
número de nós do grafo G que possua grau k .
Figura 4 – Distribuição de graus de uma rede aleatória
A figura 4, mostra a distribuição de graus de um grafo construído utilizando o algoritmo de Erdös-Rényi,
que é uma distribuição chamada de Curva Bell. Basicamente a figura nos mostra que a maior parte dos
nós possui um mesmo grau médiok .
Figura 5 – Distribuição de graus de uma Scale-free Network
Já a figura 5 mostra a distribuição encontrada em grafos construídos utilizando o algoritmo Barabási-
Albert, essa distribuição é chamada de lei de potência. Ao contrário da curva Bell onde a maior parte dos
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
nós tem grau médiok , na Scale-free networks uma pequena quantidade de nós possui um k muito
grande, enquanto a grande maioria possui um valor mínimo. Disso nos prova que o algoritmo Barabási-
Albert favorece com que os ricos enriquecem10
com relação ao grau k .
Distância média
Chamemos de ),( 71 nnd o número de arestas do menor caminho que ligue o nó 1n e 7n .
Figura 4 – Grafo com o menor caminho entre 1n e 7n realçado
Neste caso, 4),( 71 =nnd .
Da mesma forma, chamamos de distância média de um grafo a somatória da distância mínima entre
cada nó do grafo para todos os outros, dividida pela quantidade de nós do grafo, ou seja, dado um grafo
G com um número n de nós:
n
nnd
l
n
i
n
j
ji
G
∑∑= =
=
1 1
),(
Resultados experimentais11
indicam que redes Scale-free com grau médio 4=k e de tamanho n
quando comparados com redes aleatórias de mesmo tamanho e grau médio possuem uma distância
média menor, o que indica que a topologia livre de escapa é mais propensa a manter os nós uns
próximos dos outros do que a topologia homogênea dos grafos aleatórios.
Mais do que isso, foi descoberto que a distância média de um grafo cresce de forma aproximadamente
logarítmica com relação a n. Ou seja:
CBNAlG +− )ln(~
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Coeficiente de Aglutinação
O coeficiente de aglutinação12
determina o quão próximo um grafo está de ser considerado um clique.
Um clique é um grafo em que dado quaisquer dois nós, existe uma aresta ligando eles, 5K é um
exemplo clássico de clique13
.
Figura 514
– Grafo 5K
Chamemos de )( jG nλ a quantidade de triângulos presentes no grafo G que tenham jn como um
dos vértices, ou seja )( jG nλ é a quantidade de sub-grafos de G que possuam três arestas e três nós,
sendo um destes jn . Por sua vez, chamemos de )( jG nτ a quantidade de sub-grafos de G que
possuam duas arestas e três nós, sendo um destes jn .
Logo, o coeficiente de aglutinação de jn , )( jG nc será:
)n(
)n(
)n(
j
j
j
G
G
Gc
τ
λ
=
Logo, considerando o grafo da Figura 3, teremos que o 1
2
2
)n(
)n(
)n(
3
3
3 ===
G
G
Gc
τ
λ
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Figura 6 – A esquerda os triângulos que possuem 3n como vértice, e a direita as triplas
O coeficiente de aglutinação global do grafo por sua vez é dado por:
∑=
=
n
i
iGG ncC
1
)(
n
1
Enquanto nos grafos aleatórios coeficiente de aglutinação é dado por:
n
k
CG =
Onde k é o grau médio do grafo e n é número de nós, em Scale-free networks o coeficiente de
aglutinação aparentemente15
decai seguindo uma lei de potencia
75,0
~ −
NCG
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Detalhes de Implementação
Por que Drupal?
O Drupal é um CMS/CMF open source feito em Drupal, sua arquitetura beneficia a implementação de
comunidades online, ele inclusive possui uma longa história de uso no governo brasileiro, especialmente
no Ministério da Cultura. Por isso optamos por desenvolvermos uma suíte de módulos para ele.
Modularização
Graph Module
O Graph Module é um módulo responsável por armazenar as informações dos grafos sociais e controlar
seu preenchimento e renderização. Um Grafo é um tipo de node do Drupal, integravel com CCK, Views
e outras ferramentas padrões do drupal, o que possibilita, por exemplo, que um grafo seja
georeferênciado, seja plotado num mapa, ou seja, atrelado ao período do tempo.
Ele também possui suporte a versionamento, o que significa que o conteúdo do grafo (nós e arestas)
seja recalculado periodicamente, com as novas informações sendo salvas em revisões, possuindo assim
uma forma fácil de avaliar a evolução da rede.
Para isso, o Graph Module implementa a Graph API, a espinha dorsal da suíte, a ser descrita em
detalhes no próximo capítulo.
Graph API
A Graph API permite que módulos de terceiros implementem seus próprios algoritmos de
preenchimento, assim um mesmo grafo pode representar as relações de amizade dentro de uma
comunidade e a relevância das pessoas dentro dessa comunidade.
Uma hook implementando a Graph API é muito parecido com a hook Node API do Drupal, a seguir um
exemplo de implementação da hook:
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
function graph_graph($op, $a2 = '', $a3 = NULL) {
switch($op) {
case 'list':
$algorithms = array(
array(
'name' => 'static',
'title' => 'Static graph',
),
);
return $algorithms;
case 'form':
$name = $a2;
switch($name) {
case 'static':
$form['edges'] = array(
'#type' => 'textarea',
'#title'=> 'Edges',
);
}
return $form;
case 'process':
$algorithm = $a2['algorithm'];
switch($algorithm['name']) {
case 'static':
$data = $a2['edges'];
$lines = explode("n",$data);
if(is_array($lines)) {
foreach($lines as $line){
$foo = explode('->', $line);
if(is_array($foo)) {
$edges[] = array(
'from' => trim($foo[0]),
'to' => trim($foo[1]),
'orientation' => 0,
);
}
}
}
break;
}
return $edges;
}
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Graph Rendering
Graph Rendering é a parte da suite responsável por representar graficamente os grafos. Ela foi
desenvolvida em Flex, baseado na toolkit opensource Prefuse Flare.
Exemplo de Visualização gerada pelo Graph Rendering
O arquivo de entrada é um XML no formal GraphML, especificado em
http://graphml.graphdrawing.org/specification/, um exemplo de arquivo GraphML é:
<?xml version="1.0" encoding="UTF-8"?>
<graphml>
<graph>
<key id="name" for="node" attr.name="name" attr.type="string" />
<key id="gender" for="node" attr.name="gender" attr.type="string" />
<node id="a">
<data key="name">a</data>
<data key="gender">M</data>
</node>
<node id="e">
<data key="gender">M</data>
<data key="name">e</data>
</node>
<node id="d">
<data key="gender">M</data>
<data key="name">d</data>
</node>
<node id="c">
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
<data key="gender">M</data>
<data key="name">c</data>
</node>
<node id="b">
<data key="gender">M</data>
<data key="name">b</data>
</node>
<node id="f">
<data key="name">f</data>
<data key="gender">M</data>
</node>
<edge source="a" target="e" oriented="0" />
<edge source="a" target="d" oriented="0" />
<edge source="a" target="c" oriented="0" />
<edge source="a" target="b" oriented="0" />
<edge source="f" target="e" oriented="0" />
<edge source="f" target="d" oriented="0" />
<edge source="d" target="c" oriented="0" />
<edge source="f" target="b" oriented="0" />
<edge source="f" target="a" oriented="0" />
<edge source="a" target="f" oriented="0" />
</graph>
</graphml>
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Conclusão
Estudar Scale-free Networks nos permite modelar, e com isso compreender melhor e mais do que isso
prever o que acontece em várias redes reais. Numa sociedade extensivamente baseada na Internet
como a nossa, é de suma importância quais são suas vulnerabilidades e potencialidades, para que
possamos minimizar o impacto caso algum infortúnio venha acontecer. Vários estudos já forma feitos
nessa área, notavelmente o de L. Zhao, K. Park e Y.C. Lai., o Graph Module em específico nos ajuda
disponibilizando um jeito fácil de visualizar propriedades intrínsecas de comunidades online, obviamente
ainda temos um longo caminho a frente por ser percorrido. A maior parte das pendências se encontra na
ferramenta de renderização de grafos, mas conforme a lib em que nos baseados evolue esses erros
tendem a ser mitigados. No mais, talvez uma mudança de foco de um approach nas estruturas de dados
e nas funções da API seja recomendado. A API atual dá muito mais importância ao conceito de arestas
do que ao de nós, mas a experiência adquirida ao longo desse trabalho me diz que deveríamos partir
para estruturas mais voltadas aos nós e sua relevância na rede.
Bibliografia
S. MILGRAM – The small world problem. Psychology. Today 2, 60-67, (1967)
S. MILGRAM – Behavioral Study of Obedience. Journal of Abnormal and Social Psychology 67:
371–378. PMID 14049516 (1963).
R. ALBERT, A.-L. BARABÁSI – Statistical mechanics of complex networks. Reviews of Modern
Physics 74, 47-97 (2002).
D. J. WATTS, S. STROGATZ – Collective dynamics of 'small-world' networks. Nature 393: 440–442.
(1998).
L. ZHAO, K. PARK, Y.C. LAI – Attack vulnerability of scale-free networks due to cascading
breakdown. Physical Review E 70, 035101(R) (2004)
Z. DEZSO, A.-L. BARABÁSI – Halting viruses in scale-free networks. Physical Review E 65,
055103(R) (2002)
BARABÁSI, A-L – Linked ISBN 0-7382-0667-9 (2002)
Notas
Pagina pra comprar os volumes http://www.springer.com/dal/home/birkhauser/historyofscience?SGWID=1-40295-2-121672-0
Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Konigsberg_bridges.png
“Can one walk across the seven bridges and never cross the same one twice?”
http://www.math.dartmouth.edu/~euler/pages/E053.html
Erdős Number Project http://www.oakland.edu/enp/Erdos0
Mais informações em http://en.wikipedia.org/wiki/Milgram_experiment ,
e em http://content.apa.org/journals/abn/67/4/371
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
“Small world Experiment”
Números retirados de http://www.isc.org/index.pl?/ops/ds/host-count-history.php
Internet Service Provider
“Rich get richer”
Ver R. ALBERT, A.-L. BARABÁSI, Pág 74
Ver D. J. WATTS, S. STROGATZ
5K também é famoso devido ao Teorema de não-planaridade de Kuratowski
Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Complete_graph_K5.svg
Ver R. ALBERT, A.-L. BARABÁSI, Pág. 75
Ver Z. DEZSO, A.-L. BARABÁSI
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Apêndice A – Código Fonte do Graph Module
<?php
//; $Id: $
function graph_menu() {
$items = array();
$items['node/%graph_menu/graphml'] = array(
'title' => 'GraphML',
'page callback' => 'graph_export_graphml',
'page arguments' => array(1),
'access callback' => 'node_access',
'access arguments' => array('view', 1),
'file' => 'graphml.inc',
'type' => MENU_CALLBACK,
);
return $items;
}
function graph_menu_load($nid) {
if (!is_numeric($nid)) {
return FALSE;
}
$node = node_load($nid);
if (!isset($node->type) || $node->type != 'graph') {
return FALSE;
}
return $node;
}
function graph_form(&$node) {
$type = node_get_types('type', $node);
if ($type->has_title) {
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
'#default_value' => $node->title,
'#weight' => -5
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
);
}
if ($type->has_body) {
$form['body_field'] = node_body_field($node, $type->body_label, $type-
>min_word_count);
}
// Now we define the form elements specific to our node type.
$form['graph'] = array(
'#type' => 'fieldset',
'#collapsible' => true,
'#collapsed' => false,
'#title' => t('Edges'),
'#tree' => true,
);
$algorithms = _graph_get_algorithms_list();
if(count($algorithms)) {
$form['graph']['new'] = array(
'#type' => 'select',
'#title' => t('Auto-fill Algorithms'),
'#options' => $algorithms,
);
$form['graph']['add'] = array(
'#type' => 'submit',
'#value' => t('add'),
);
}
return $form;
}
function graph_form_alter(&$form, $form_state, $form_id) {
if($form_id != 'graph_node_form')
return;
if(count($form_state['storage']['graph']['algorithms'])) {
foreach($form_state['storage']['graph']['algorithms'] as $key =>
$algorithm) {
$fieldset = array(
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
'#type' => 'fieldset',
'#collapsible' => true,
'#collapsed' => false,
'#title' => $algorithm['title'],
'#tree' => true,
);
$fieldset['algorithm'] = array(
'#type' => 'value',
'#value' => $algorithm,
);
$form['graph']['algorithms'][$key] = array_merge($fieldset,
module_invoke_all('graph', 'form', $algorithm['name'], $algorithm['conf']));
}
}
$form['#submit'][] = 'graph_node_form_submit';
}
function graph_node_form_submit($form, &$form_state) {
if($form_state['clicked_button']['#value'] == 'add' && !
empty($form_state['values']['graph']['new'])) {
$algorithm = _graph_get_algorithm($form_state['values']['graph']['new']);
//if(!isset($algorithm['conf']))
// $algorithm['conf'] = array();
$algorithm['id'] = count($form_state['storage']['graph']['algorithms']);
$form_state['storage']['graph']['algorithms'][] = $algorithm;
}
else {
}
}
function _graph_get_algorithm($id = NULL) {
static $algorithms = NULL;
if($algorithms == NULL) {
$raw = module_invoke_all('graph','list');
foreach($raw as $algorithm) {
$algorithms[$algorithm['name']] = $algorithm;
}
}
if($id != NULL) {
if(isset($algorithms[$id])) {
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
return $algorithms[$id];
}
else {
return NULL;
}
}
return $algorithms;
}
function _graph_get_algorithms_list() {
$algorithms = _graph_get_algorithm();
foreach($algorithms as $key => $data) {
$result[$key] = $data['title'];
}
return $result;
}
function graph_graph($op, $a2 = '', $a3 = NULL) {
switch($op) {
case 'list':
$algorithms = array(
array(
'name' => 'static',
'title' => 'Static graph',
),
array(
'name' => 'simple_user_content_relationship',
'title' => 'Simple User to User Relationship',
),
);
return $algorithms;
case 'form':
$name = $a2;
switch($name) {
case 'static':
$form['edges'] = array(
'#type' => 'textarea',
'#title'=> 'Edges',
);
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
return $form;
case 'process':
$algorithm = $a2['algorithm'];
switch($algorithm['name']) {
case 'static':
$data = $a2['edges'];
$lines = explode("n",$data);
if(is_array($lines)) {
foreach($lines as $line){
$foo = explode('->', $line);
if(is_array($foo)) {
$edges[] = array(
'from' => trim($foo[0]),
'to' => trim($foo[1]),
'orientation' => 0,
);
}
}
}
break;
case 'simple_user_content_relationship':
$nodes = db_queryd("SELECT nid, title, uid FROM {node} WHERE type !=
'graph'");
while($node = db_fetch_object($nodes)) {
$poster = user_load($node->uid);
$comments = db_queryd("SELECT cid, uid FROM {comments} WHERE nid =
%d", $node->nid);
while($comment = db_fetch_object($comments)) {
if($comment->uid > 0) {
$commenter = user_load($comment->uid);
if($commenter->uid != $poster->uid) {
$edges[] = array(
'from' => $commenter->name,
'to' => $poster->name,
'orientation' => 1,
);
}
}
}
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
break;
}
return $edges;
}
}
function graph_validate(&$node) {
if($node->op != 'add' && (!isset($node->graph['algorithms']) || count($node-
>graph['algorithms']) < 1)) {
form_set_error('new',t('Each graph should have at least one Algorithm.'));
}
}
function graph_perm() {
return array(
'create graph',
'delete own graph',
'delete any graph',
'edit own graph',
'edit any graph',
);
}
function graph_access($op, $node, $account) {
if ($op == 'create') {
return user_access('create graph', $account);
}
if ($op == 'update') {
if (user_access('edit any graph', $account) || (user_access('edit own
graphs', $account) && ($account->uid == $node->uid))) {
return TRUE;
}
}
if ($op == 'delete') {
if (user_access('delete any graph', $account) || (user_access('delete own
graph', $account) && ($account->uid == $node->uid))) {
return TRUE;
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
}
}
}
function graph_node_info() {
return array(
'graph' => array(
'name' => t('Graph'),
'module' => 'graph',
'description' => t("This is an example node type with a few fields."),
'has_title' => TRUE,
'title_label' => t('Title'),
'has_body' => TRUE,
'body_label' => t('Description'),
)
);
}
function graph_load($node) {
$additions['graph']['oriented'] = db_result(db_query("SELECT oriented FROM
{graph} WHERE nid = %d",$node->nid));
$additions['graph']['edges'] = array();
$edges = db_query("SELECT `algorithm`, `delta`, `from`, `to`, `orientation`
FROM {graph_data} WHERE nid = %d AND vid = %d", $node->nid, $node->vid);
while($edge = db_fetch_array($edges)) {
$additions['graph']['edges'][] = $edge;
if(!isset($additions['graph']['vertices'][$edge['from']]))
_graph_create_vertice($additions['graph']['vertices'], $edge['from']);
if(!isset($additions['graph']['vertices'][$edge['to']]))
_graph_create_vertice($additions['graph']['vertices'], $edge['to']);
}
return $additions;
}
function _graph_create_vertice(&$vertices, $id) {
$vertice = array(
'id' => count($vertices),
'name' => $id,
'gender' => count($vertices)%2? 'M' : 'F',
);
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
$vertices[$id] = $vertice;
return $vertice;
}
function graph_insert($node) {
graph_rebuild_edges($node);
//db_query("INSERT into {graph} (nid, oriented) VALUES (%d, %d)", $node-
>nid, $node->graph['oriented']);
}
function graph_update($node) {
// if this is a new node or we're adding a new revision,
//if ($node->revision) {
graph_rebuild_edges($node);
//}
}
function graph_rebuild_edges($node) {
foreach($node->graph['algorithms'] as $algorithm) {
$edges = module_invoke_all('graph','process',$algorithm, $node);
foreach($edges as $edge) {
db_query("INSERT INTO {graph_data} (`nid`, `vid`, `algorithm`, `delta`,
`from`, `to`, `orientation`) VALUES (%d, %d, '%s', %d, '%s', '%s', %d)",
$node->nid, $node->vid, $algorithm['algorithm']['name'],
$algorithm['algorithm']['id'], $edge['from'], $edge['to'],
$edge['orientation']);
}
}
}
function graph_delete($node) {
// Notice that we're matching all revision, by using the node's nid.
db_query('DELETE FROM {graph_data} WHERE nid = %d', $node->nid);
}
function graph_view($node, $teaser = FALSE, $page = FALSE) {
$swf_path =
base_path().drupal_get_path('module','graph').'/flare.graph.swf';
$swf_string = $swf_path.'?graphml_file='.url('node/'.$node->nid.'/graphml');
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
$flash_object = ' <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-
444553540000"
id="flare" width="600" height="600"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab
">
<param name="movie" value="'.$swf_string.'" />
<param name="quality" value="high" />
<param name="bgcolor" value="#2e2e2e" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="'.$swf_string.'" quality="high" bgcolor="#2e2e2e"
width="600" height="600" name="explorer" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>';
$node = node_prepare($node, $teaser);
$node->content['flare'] = array(
'#value' => $flash_object,
'#weight' => 1,
);
return $node;
}
function graph_export_graphml($node) {
$output = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?
><graphml></graphml>');
$graph = $output->addChild('graph');
_add_key($graph,'name', 'node', 'string');
_add_key($graph,'gender', 'node', 'string');
foreach($node->graph['vertices'] as $vertice) {
$v = $graph->addChild('node');
$v->addAttribute('id', $vertice['id']);
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
foreach($vertice as $key => $value) {
if($key != 'id') {
$a = $v->addChild('data',$value);
$a->addAttribute('key',$key);
}
}
}
foreach($node->graph['edges'] as $edge) {
$e = $graph->addChild('edge');
$e->addAttribute('source', $node->graph['vertices'][$edge['from']]['id']);
$e->addAttribute('target', $node->graph['vertices'][$edge['to']]['id']);
//$e->addAttribute('oriented', $edge['orientation']);
}
$xml = $output->asXML();
$xml = str_replace('"/><edge','"></edge><edge', $xml);
$xml = str_replace('"/></graph>','"></edge></graph>', $xml);
print($xml);
//$domXML = dom_import_simplexml($output);
die;
}
function _add_key($graph, $name, $for, $type){
$key = $graph->addChild('key');
$key->addAttribute('id', $name);
$key->addAttribute('for', $for);
$key->addAttribute('attr.name', $name);
$key->addAttribute('attr.type', $type);
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
Apêndice B – Código fonte do Flex Graph Rendering
package
{
import flare.animate.Transitioner;
import flare.data.DataSet;
import flare.display.RectSprite;
import flare.display.TextSprite;
import flare.vis.Visualization;
import flare.vis.data.Data;
import flare.vis.data.NodeSprite;
import flare.vis.operator.filter.GraphDistanceFilter;
import flare.vis.operator.layout.RadialTreeLayout;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.text.TextFormat;
[SWF(width="600", height="600", backgroundColor="#2e2e2e", frameRate="30")]
public class graph extends Sprite
{
public var paramObj:Object;
private var vis:Visualization;
private var maxLabelWidth:Number;
private var maxLabelHeight:Number;
private var _gdf:GraphDistanceFilter;
private var _maxDistance:int = 2;
private var _transitionDuration:Number = 2;
public function graph() {
try {
paramObj = (this.root.loaderInfo as LoaderInfo).parameters;
}
catch (error:Error) {
trace(error.toString());
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
var gmr:GraphMLReader = new GraphMLReader(onLoaded);
gmr.read(paramObj.graphml_file);
}
private function onLoaded(data:Data):void {
vis = new Visualization(data);
var w:Number = stage.stageWidth;
var h:Number = stage.stageHeight;
vis.bounds = new Rectangle(0, 0, w, h);
var textFormat:TextFormat = new TextFormat();
textFormat.color = 0xffffffff;
var i:int = 0;
vis.data.nodes.visit(function(ns:NodeSprite):void {
var ts:TextSprite = new
TextSprite(ns.data.name,textFormat);
ns.addChild(ts);
});
vis.data.nodes.setProperty("x",w/2);
vis.data.nodes.setProperty("y",h/2);
maxLabelWidth = getMaxTextLabelWidth();
maxLabelHeight = getMaxTextLabelHeight();
vis.data.nodes.visit(function(ns:NodeSprite):void {
var rs:RectSprite = new RectSprite( -maxLabelWidth/2-1,-
maxLabelHeight/2 - 1, maxLabelWidth + 2, maxLabelHeight + 2);
if (ns.data.gender == "M") {
rs.fillColor = 0xff000044;
rs.lineColor = 0xff000044;
} else {
rs.fillColor = 0xffaa0000;
rs.lineColor = 0xffaa0000;
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
rs.lineWidth = 2;
ns.addChildAt(rs, 0); // at postion 0 so that the text
label is drawn above the rectangular box
ns.size = 0;
adjustLabel(ns,maxLabelWidth,maxLabelHeight);
ns.mouseChildren = false;
ns.addEventListener(MouseEvent.CLICK, update);
ns.buttonMode = true;
});
var lay:RadialTreeLayout = new RadialTreeLayout();
lay.useNodeSize = false;
var root:NodeSprite = vis.data.nodes[0];
_gdf = new GraphDistanceFilter([root],
_maxDistance,NodeSprite.GRAPH_LINKS);
vis.operators.add(_gdf); //distance filter has to be added
before the layout
vis.operators.add(lay);
addChild(vis);
updateRoot(root);
}
private function update(event:MouseEvent):void {
var n:NodeSprite = event.target as NodeSprite;
if (n == null) return;
updateRoot(n);
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
}
private function updateRoot(n:NodeSprite):void {
vis.data.root = n;
_gdf.focusNodes = [n];
var t1:Transitioner = new Transitioner(_transitionDuration);
vis.update(t1).play();
}
private function getMaxTextLabelWidth() : Number {
var maxLabelWidth:Number = 0;
vis.data.nodes.visit(function(n:NodeSprite):void {
var w:Number = getTextLabelWidth(n);
if (w > maxLabelWidth) {
maxLabelWidth = w;
}
});
return maxLabelWidth;
}
private function getMaxTextLabelHeight() : Number {
var maxLabelHeight:Number = 0;
vis.data.nodes.visit(function(n:NodeSprite):void {
var h:Number = getTextLabelHeight(n);
if (h > maxLabelHeight) {
maxLabelHeight = h;
}
});
return maxLabelHeight;
}
private function getTextLabelWidth(s:NodeSprite) : Number {
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
var s2:TextSprite = s.getChildAt(s.numChildren-1) as
TextSprite; // get the text sprite belonging to this node sprite
var b:Rectangle = s2.getBounds(s);
return s2.width;
}
private function getTextLabelHeight(s:NodeSprite) : Number {
var s2:TextSprite = s.getChildAt(s.numChildren-1) as
TextSprite; // get the text sprite belonging to this node sprite
var b:Rectangle = s2.getBounds(s);
return s2.height;
}
private function adjustLabel(s:NodeSprite, w:Number, h:Number) : void
{
var s2:TextSprite = s.getChildAt(s.numChildren-1) as
TextSprite; // get the text sprite belonging to this node sprite
s2.horizontalAnchor = TextSprite.CENTER;
s2.verticalAnchor = TextSprite.CENTER;
}
}
}
/**
* simple graphml reader utility
*
*/
import flare.data.converters.GraphMLConverter;
import flare.data.DataSet;
import flash.events.*;
import flash.net.*;
import flare.vis.data.Data;
class GraphMLReader {
public var onComplete:Function;
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
public function GraphMLReader(onComplete:Function=null,file:String =
null) {
this.onComplete = onComplete;
if(file != null) {
read(file);
}
}
public function read(file:String):void {
if ( file != null) {
var loader:URLLoader = new URLLoader();
configureListeners(loader);
var request:URLRequest = new URLRequest(file);
try {
loader.load(request);
} catch (error:Error) {
trace("Unable to load requested document.");
}
}
}
private function configureListeners(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
securityErrorHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR,
ioErrorHandler);
}
private function completeHandler(event:Event):void {
if (onComplete != null) {
var loader:URLLoader = event.target as URLLoader;
var dataSet:DataSet = new GraphMLConverter().parse(new
XML(loader.data));
onComplete(Data.fromDataSet(dataSet));
} else {
trace("No onComplete function specified.");
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
}
Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil
Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083
www.futuro.usp.br - info@futuro.usp.br
1
Pagina pra comprar os volumes http://www.springer.com/dal/home/birkhauser/historyofscience?SGWID=1-40295-2-121672-0
2
Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Konigsberg_bridges.png
3
“Can one walk across the seven bridges and never cross the same one twice?”
4
http://www.math.dartmouth.edu/~euler/pages/E053.html
5
Erdős Number Project http://www.oakland.edu/enp/Erdos0
6
Mais informações em http://en.wikipedia.org/wiki/Milgram_experiment ,
e em http://content.apa.org/journals/abn/67/4/371
7
“Small world Experiment”
8
Números retirados de http://www.isc.org/index.pl?/ops/ds/host-count-history.php
9
Internet Service Provider
10
“Rich get richer”
11
Ver R. ALBERT, A.-L. BARABÁSI, Pág 74
12
Ver D. J. WATTS, S. STROGATZ
13
5K também é famoso devido ao Teorema de não-planaridade de Kuratowski
14
Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Complete_graph_K5.svg
15
Ver R. ALBERT, A.-L. BARABÁSI, Pág. 75

Contenu connexe

Similaire à Análise de Padrões de Conectividade em Redes Científicas

Como fazer um trabalho de pesquisa
Como fazer um trabalho de pesquisaComo fazer um trabalho de pesquisa
Como fazer um trabalho de pesquisaMarquês de Pombal
 
CALCULO II - DERIVADAS.pptx
CALCULO II - DERIVADAS.pptxCALCULO II - DERIVADAS.pptx
CALCULO II - DERIVADAS.pptxssuser24a8bb1
 
graphtheorysftfc
graphtheorysftfcgraphtheorysftfc
graphtheorysftfcS Fontes
 
Historiada Computação
Historiada Computação Historiada Computação
Historiada Computação Fernando Palma
 
Licoes calculo-poliadico-tomo-1
Licoes calculo-poliadico-tomo-1Licoes calculo-poliadico-tomo-1
Licoes calculo-poliadico-tomo-1elysioruggeri
 
Modelo de monografia uff eng
Modelo de monografia uff engModelo de monografia uff eng
Modelo de monografia uff engJuliana Alves
 
Rachinations
RachinationsRachinations
RachinationsFelipe
 
Lições tomo i - vol. i - 28 mar 2013 com remissivo revisto
Lições   tomo i - vol. i -  28 mar 2013 com remissivo revistoLições   tomo i - vol. i -  28 mar 2013 com remissivo revisto
Lições tomo i - vol. i - 28 mar 2013 com remissivo revistoelysioruggeri
 
Algebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdf
Algebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdfAlgebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdf
Algebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdfLuciane Ribeiro
 
Inteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdf
Inteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdfInteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdf
Inteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdfRodrigoLuis21
 
Informática educativa - história das funções com a web 2.0 - Parte 1
Informática educativa - história das funções com a web 2.0 - Parte 1Informática educativa - história das funções com a web 2.0 - Parte 1
Informática educativa - história das funções com a web 2.0 - Parte 1Rafael Araujo
 
LIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃO
LIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃOLIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃO
LIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃOOs Fantasmas !
 
Gentil Lopes - ALGEBRA LINEAR (COMENTADO)
Gentil Lopes - ALGEBRA LINEAR (COMENTADO)Gentil Lopes - ALGEBRA LINEAR (COMENTADO)
Gentil Lopes - ALGEBRA LINEAR (COMENTADO)Adriano Pimentel
 
Arduino Como Ferramenta De Estudos da Mecânica Clássica
Arduino Como Ferramenta De Estudos da Mecânica ClássicaArduino Como Ferramenta De Estudos da Mecânica Clássica
Arduino Como Ferramenta De Estudos da Mecânica ClássicaDaniel Mendes
 
Elementos da teoria da integração
Elementos da teoria da integraçãoElementos da teoria da integração
Elementos da teoria da integraçãoMarcelo Leite
 

Similaire à Análise de Padrões de Conectividade em Redes Científicas (20)

Tese exemplo-alpha-ime
Tese exemplo-alpha-imeTese exemplo-alpha-ime
Tese exemplo-alpha-ime
 
Como fazer um trabalho de pesquisa
Como fazer um trabalho de pesquisaComo fazer um trabalho de pesquisa
Como fazer um trabalho de pesquisa
 
CALCULO II - DERIVADAS.pptx
CALCULO II - DERIVADAS.pptxCALCULO II - DERIVADAS.pptx
CALCULO II - DERIVADAS.pptx
 
graphtheorysftfc
graphtheorysftfcgraphtheorysftfc
graphtheorysftfc
 
Aula01 -
Aula01 - Aula01 -
Aula01 -
 
Dispositivos_semicondutores
Dispositivos_semicondutoresDispositivos_semicondutores
Dispositivos_semicondutores
 
Historiada Computação
Historiada Computação Historiada Computação
Historiada Computação
 
Licoes calculo-poliadico-tomo-1
Licoes calculo-poliadico-tomo-1Licoes calculo-poliadico-tomo-1
Licoes calculo-poliadico-tomo-1
 
Modelo de monografia uff eng
Modelo de monografia uff engModelo de monografia uff eng
Modelo de monografia uff eng
 
Rachinations
RachinationsRachinations
Rachinations
 
Lições tomo i - vol. i - 28 mar 2013 com remissivo revisto
Lições   tomo i - vol. i -  28 mar 2013 com remissivo revistoLições   tomo i - vol. i -  28 mar 2013 com remissivo revisto
Lições tomo i - vol. i - 28 mar 2013 com remissivo revisto
 
Algebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdf
Algebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdfAlgebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdf
Algebra Linea -JOSÉ LUIZ BOLDRINI - OCR.pdf
 
Inteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdf
Inteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdfInteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdf
Inteligência Artificial by Peter Norvig, Stuart Russell (z-lib.org).pdf
 
Trabalho final
Trabalho finalTrabalho final
Trabalho final
 
Informática educativa - história das funções com a web 2.0 - Parte 1
Informática educativa - história das funções com a web 2.0 - Parte 1Informática educativa - história das funções com a web 2.0 - Parte 1
Informática educativa - história das funções com a web 2.0 - Parte 1
 
LIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃO
LIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃOLIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃO
LIVRO PROPRIETÁRIO - MATEMÁTICA APLICADA A COMPUTAÇÃO
 
Apostila do prof aury cap 0
Apostila do prof aury   cap 0Apostila do prof aury   cap 0
Apostila do prof aury cap 0
 
Gentil Lopes - ALGEBRA LINEAR (COMENTADO)
Gentil Lopes - ALGEBRA LINEAR (COMENTADO)Gentil Lopes - ALGEBRA LINEAR (COMENTADO)
Gentil Lopes - ALGEBRA LINEAR (COMENTADO)
 
Arduino Como Ferramenta De Estudos da Mecânica Clássica
Arduino Como Ferramenta De Estudos da Mecânica ClássicaArduino Como Ferramenta De Estudos da Mecânica Clássica
Arduino Como Ferramenta De Estudos da Mecânica Clássica
 
Elementos da teoria da integração
Elementos da teoria da integraçãoElementos da teoria da integração
Elementos da teoria da integração
 

Plus de AcessaSP

Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...
Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...
Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...AcessaSP
 
Especial Estadão "Brasil Conectado" - parte 2
Especial Estadão "Brasil Conectado" - parte 2Especial Estadão "Brasil Conectado" - parte 2
Especial Estadão "Brasil Conectado" - parte 2AcessaSP
 
Especial Estadão "Brasil Conectado" - parte 1
Especial Estadão "Brasil Conectado" - parte 1Especial Estadão "Brasil Conectado" - parte 1
Especial Estadão "Brasil Conectado" - parte 1AcessaSP
 
Especial Estadão "Brasil Conectado" - parte 3
Especial Estadão "Brasil Conectado" - parte 3Especial Estadão "Brasil Conectado" - parte 3
Especial Estadão "Brasil Conectado" - parte 3AcessaSP
 
Oficina design thinking
Oficina design thinkingOficina design thinking
Oficina design thinkingAcessaSP
 
Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...
Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...
Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...AcessaSP
 
Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...
Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...
Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...AcessaSP
 
Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...
Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...
Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...AcessaSP
 
Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...
Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...
Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...AcessaSP
 
Manual de Cadastro Online 2015
Manual de Cadastro Online 2015Manual de Cadastro Online 2015
Manual de Cadastro Online 2015AcessaSP
 
Ponline 2014
Ponline 2014Ponline 2014
Ponline 2014AcessaSP
 
Apresentação Programa de Formação Continuada 2015
Apresentação Programa de Formação Continuada 2015Apresentação Programa de Formação Continuada 2015
Apresentação Programa de Formação Continuada 2015AcessaSP
 
Apresentação Acessa SP 2015
Apresentação Acessa SP 2015Apresentação Acessa SP 2015
Apresentação Acessa SP 2015AcessaSP
 
Apresentação Rede de Projetos 2015
Apresentação Rede de Projetos 2015Apresentação Rede de Projetos 2015
Apresentação Rede de Projetos 2015AcessaSP
 
Apresentação Formação Supervisores 2015
Apresentação Formação Supervisores 2015Apresentação Formação Supervisores 2015
Apresentação Formação Supervisores 2015AcessaSP
 
Oficina Design Thinking
Oficina Design Thinking Oficina Design Thinking
Oficina Design Thinking AcessaSP
 
Passo passo ponline 2013
Passo passo ponline 2013Passo passo ponline 2013
Passo passo ponline 2013AcessaSP
 
Ponline2013 passo a_passo
Ponline2013 passo a_passoPonline2013 passo a_passo
Ponline2013 passo a_passoAcessaSP
 
Como preencher seu perfil no Moodle - AcessaSP
Como preencher seu perfil no Moodle - AcessaSPComo preencher seu perfil no Moodle - AcessaSP
Como preencher seu perfil no Moodle - AcessaSPAcessaSP
 

Plus de AcessaSP (20)

Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...
Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...
Observatório da Cultura Digital - Conexões Científicas Ciclo III 2006 - 2007 ...
 
Especial Estadão "Brasil Conectado" - parte 2
Especial Estadão "Brasil Conectado" - parte 2Especial Estadão "Brasil Conectado" - parte 2
Especial Estadão "Brasil Conectado" - parte 2
 
Especial Estadão "Brasil Conectado" - parte 1
Especial Estadão "Brasil Conectado" - parte 1Especial Estadão "Brasil Conectado" - parte 1
Especial Estadão "Brasil Conectado" - parte 1
 
Especial Estadão "Brasil Conectado" - parte 3
Especial Estadão "Brasil Conectado" - parte 3Especial Estadão "Brasil Conectado" - parte 3
Especial Estadão "Brasil Conectado" - parte 3
 
Oficina design thinking
Oficina design thinkingOficina design thinking
Oficina design thinking
 
Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...
Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...
Observatório da Cultura Digital - Conexões Científicas 2011: "Acessa SP: 11 a...
 
Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...
Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...
Observatório da Cultura Digital - Conexões Científicas 2012: "Tecnologia e Cr...
 
Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...
Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...
Observatório de Cultura Digital - Conexões Científicas 2013: "O estado da art...
 
Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...
Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...
Observatório de Cultura Digital - Conexões Científicas 2014: "Tecnologia Soci...
 
Manual de Cadastro Online 2015
Manual de Cadastro Online 2015Manual de Cadastro Online 2015
Manual de Cadastro Online 2015
 
Ponline 2014
Ponline 2014Ponline 2014
Ponline 2014
 
Apresentação Programa de Formação Continuada 2015
Apresentação Programa de Formação Continuada 2015Apresentação Programa de Formação Continuada 2015
Apresentação Programa de Formação Continuada 2015
 
Apresentação Acessa SP 2015
Apresentação Acessa SP 2015Apresentação Acessa SP 2015
Apresentação Acessa SP 2015
 
Apresentação Rede de Projetos 2015
Apresentação Rede de Projetos 2015Apresentação Rede de Projetos 2015
Apresentação Rede de Projetos 2015
 
Apresentação Formação Supervisores 2015
Apresentação Formação Supervisores 2015Apresentação Formação Supervisores 2015
Apresentação Formação Supervisores 2015
 
Oficina Design Thinking
Oficina Design Thinking Oficina Design Thinking
Oficina Design Thinking
 
Passo passo ponline 2013
Passo passo ponline 2013Passo passo ponline 2013
Passo passo ponline 2013
 
Ponline2013 passo a_passo
Ponline2013 passo a_passoPonline2013 passo a_passo
Ponline2013 passo a_passo
 
Como preencher seu perfil no Moodle - AcessaSP
Como preencher seu perfil no Moodle - AcessaSPComo preencher seu perfil no Moodle - AcessaSP
Como preencher seu perfil no Moodle - AcessaSP
 
moodle
moodlemoodle
moodle
 

Dernier

Baladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxBaladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxacaciocarmo1
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresaulasgege
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbyasminlarissa371
 
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 anoAdelmaTorres2
 
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNASQUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNASEdinardo Aguiar
 
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕESPRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕESpatriciasofiacunha18
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxIsabellaGomes58
 
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptTREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptAlineSilvaPotuk
 
6°ano Uso de pontuação e acentuação.pptx
6°ano Uso de pontuação e acentuação.pptx6°ano Uso de pontuação e acentuação.pptx
6°ano Uso de pontuação e acentuação.pptxErivaldoLima15
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISVitor Vieira Vasconcelos
 
Slides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdfSlides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdfpaulafernandes540558
 
ADJETIVO para 8 ano. Ensino funda.mental
ADJETIVO para 8 ano. Ensino funda.mentalADJETIVO para 8 ano. Ensino funda.mental
ADJETIVO para 8 ano. Ensino funda.mentalSilvana Silva
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveaulasgege
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosAntnyoAllysson
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPanandatss1
 
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfPPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfAnaGonalves804156
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfHenrique Pontes
 
As Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptxAs Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptxAlexandreFrana33
 

Dernier (20)

Baladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptxBaladão sobre Variação Linguistica para o spaece.pptx
Baladão sobre Variação Linguistica para o spaece.pptx
 
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autores
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
637743470-Mapa-Mental-Portugue-s-1.pdf 4 ano
 
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNASQUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
QUIZ DE MATEMATICA SHOW DO MILHÃO PREPARAÇÃO ÇPARA AVALIAÇÕES EXTERNAS
 
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕESPRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
 
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptxQUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
QUARTA - 1EM SOCIOLOGIA - Aprender a pesquisar.pptx
 
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.pptTREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
TREINAMENTO - BOAS PRATICAS DE HIGIENE NA COZINHA.ppt
 
6°ano Uso de pontuação e acentuação.pptx
6°ano Uso de pontuação e acentuação.pptx6°ano Uso de pontuação e acentuação.pptx
6°ano Uso de pontuação e acentuação.pptx
 
Prática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGISPrática de interpretação de imagens de satélite no QGIS
Prática de interpretação de imagens de satélite no QGIS
 
(76- ESTUDO MATEUS) A ACLAMAÇÃO DO REI..
(76- ESTUDO MATEUS) A ACLAMAÇÃO DO REI..(76- ESTUDO MATEUS) A ACLAMAÇÃO DO REI..
(76- ESTUDO MATEUS) A ACLAMAÇÃO DO REI..
 
Slides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdfSlides criatividade 01042024 finalpdf Portugues.pdf
Slides criatividade 01042024 finalpdf Portugues.pdf
 
ADJETIVO para 8 ano. Ensino funda.mental
ADJETIVO para 8 ano. Ensino funda.mentalADJETIVO para 8 ano. Ensino funda.mental
ADJETIVO para 8 ano. Ensino funda.mental
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteiros
 
Educação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SPEducação São Paulo centro de mídias da SP
Educação São Paulo centro de mídias da SP
 
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfPPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
 
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdfBRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
BRASIL - DOMÍNIOS MORFOCLIMÁTICOS - Fund 2.pdf
 
As Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptxAs Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptx
 

Análise de Padrões de Conectividade em Redes Científicas

  • 1. Conexões científicas – análise de padrões de conectividade Relatório final das atividades desenvolvidas, período de 01/12/2008 a 31/05/2009
  • 2. Conteúdo Conteúdo.................................................................................................................................................2 Introdução................................................................................................................................................3 Um pouco de história..........................................................................................................................4 Euler e as Pontes de Königsberg...................................................................................................4 Erdös e o Universo Aleatório..........................................................................................................5 Milgram e os Seis graus de separação..........................................................................................7 A Internet........................................................................................................................................8 Um pouco de matemática...................................................................................................................9 Definição.........................................................................................................................................9 O modelo Barabási-Albert..............................................................................................................9 Distribuição de graus....................................................................................................................10 Distância média............................................................................................................................11 Coeficiente de Aglutinação...........................................................................................................12 Detalhes de Implementação..................................................................................................................14 Por que Drupal?................................................................................................................................14 Modularização...................................................................................................................................14 Graph Module...............................................................................................................................14 Graph API.....................................................................................................................................14 Graph Rendering..........................................................................................................................16 Conclusão..............................................................................................................................................18 Bibliografia.............................................................................................................................................18 Notas......................................................................................................................................................18 Apêndice A – Código Fonte do Graph Module.....................................................................................20 Apêndice B – Código fonte do Flex Graph Rendering..........................................................................30
  • 3. Introdução A abordagem de problemas reais utilizando a teoria dos Grafos a muito vem ganhando importância, unido a esta, as possibilidades da informática e atualmente o crescimento da Internet e sua crescente importância para disseminação de informações em proporções nunca antes imaginadas, estabelece um novo paradigma científico. O presente trabalho possui como propósito a construção de um software (de código aberto) para extração e análise de informações das redes sociais estabelecidas na infovia, proporcionando gerar arquivos de imagem que representem a rede social e sua representação na forma de grafos. Os avanços tecnológicos, em particular a revolução que a informática proporcionou para a ciência é indiscutível e irreversível, não obstante a matemática pode se valer dessa tecnologia para provar alguns fatos sem as metodologias clássicas. Na base estrutural da informática encontram-se aninhadas diversas idéias matemáticas e um dos produtos da informática que mais ganhou importância em todos os ramos da sociedade, a Internet, pode ser entendida segundo a visão matemática como um grafo, que se estende por todo o globo terrestre, se expandindo a cada dia. O estudo do comportamento e da topologia deste tipo de grafo, não apresenta ainda material conclusivo, principalmente em português, existindo poucos estudos na área. Por isso, durante esse texto eu traduzi vários termos da literatura estrangeira para os seus equivalentes em português, alguns, porém eu não consegui achar tradução razoável, optando então por utilizar os termos técnicos em inglês. Isso aconteceu, por exemplo, com o termo principal desse documento, Scale-free Networks, o qual a tradução aproximada para português seria “Redes livres de Escala” ou “Redes de escala invariante” mas optar por elas dificultaria ao leitor interessado na hora de buscar por mais literatura na Internet.
  • 4. Um pouco de história A matemática por trás das Scale-free Networks é – como toda teoria dos grafos – intuitiva, o objetivo desse capítulo é introduzir o leitor aos conceitos necessários e os motivos que justificam a pesquisa em Scale-free Networks. Euler e as Pontes de Königsberg Leonhard Euler foi um matemático impar, o conjunto ainda hoje incompleto de sua obra – Opera Omnia – soma 76 volumes em mais de 3 mil páginas1 . Euler possui contribuições em praticamente todas as áreas da matemática, tendo desempenhado um papel extremamente relevante no desenvolvimento da matemática aplicada. Seus trabalhos mostram várias aplicações das séries de Fourier, de diagramas de Venn e dos números de Euler. Mas no escopo desse documento estamos particularmente interessados num problema que levou a criação de uma área completamente nova da matemática, as Pontes de Königsberg, Königsberg era uma pequena cidade da Prússia (atualmente Kaliningrado, Rússia) localizada as margens do rio Pregel, a aproximadamente 800km da casa de Euler em São Petersburgo. Königsberg é dividida pelo rio em duas partes continentais e duas ilhas fluviais. Figura 1 – Ilustração de Königsberg2 e suas Pontes em 1735 Os cidadãos de Königsberg se perguntavam se existe um caminho que atravesse as sete pontes passando uma só vez por cada uma das pontes3 . Euler não só provou que era impossível realizar tal façanha como também forneceu em seu artigo as bases para a Teoria dos Grafos. A genialidade da solução de Euler não se encontra na solução em si, mas em representar o problema no que ele chamou de Grafo.
  • 5. Um grafo é um conjunto de nós e arestas (arcos) usualmente representadas como pontos e curvas respectivamente. Figura 2 – Representação em grafo do problema de Konigsberg A prova de Euler para a não existência de tal caminho se baseia numa simples observação. Nós com número impar de arestas necessariamente são ou o ponto de partida ou o ponto de chegada, e para que seja possível passar por todas as arestas uma e somente uma vez, é necessário que existam dois nós com número impar de arestas ou nenhum4 . E essa propriedade não se aplica somente a esse grafo, mais do que isso ela é inerente a todos os grafos, ela é chama de caminho Euleriano. Depois dessa contribuição inicial, os grafos vieram se tornar um das maiores áreas da matemática, tornando-se imprescindíveis para a nossa compreensão de redes. Erdös e o Universo Aleatório Se existiu uma pessoa que pôde igualar o feito de Euler tanto em quantidade e quanto em relevância da sua produção científica, essa pessoa foi Paul Erdös. Nascido na Hungria, filho de matemáticos, desde de sua primeira infância Erdös se destacava por sua habilidade matemática. Com mais de 511 colaboradores diretos, ele publicou aproximadamente 1500 artigos durante sua vida5 . Foi com um conterrâneo, Alfréd Rényi, que Erdos escreveu o que seria a primeira tentativa de justificar como as redes funcionam. Imagine uma festa com centenas de convidados onde nenhum dos outros candidatos conheça os outros. Eles vão começar a conversar, e depois – suponhamos meia hora – você encontrará vários
  • 6. pequenos grupos de duas ou três pessoas. Essas pessoas depois de um tempo provavelmente ficarão cansadas de conversar com o seu parceiro inicial e irão procurar novos pares. Agora imagine isso como um grafo, cada convidado da sua festa é um nó, as arestas ligam os nós (pessoas) que já conversaram entre si na festa. Figura 3ª Figura 3b Figura 3c Figura 3d
  • 7. No primeiro momento ( 0=t ) ninguém se conhecia, logo o grafo se parecerá com o da figura 3a. Após trinta minutos ( 1=t ), teremos vários pares de pessoas, como na figura 3b. E após um tempo suficientemente grande, teremos um gráfico como o da figura 3d. Formalmente, o que Erdös e Rényi definiram foi a determinação de um grafo pelo seguinte processo de construção; comece com N nós e nenhuma aresta, e a cada iteração adicione uma aresta ligando dois nós aleatórios que não estivessem previamente ligados. É trivial que após 2 )1( −NN iterações obteremos um clique. Milgram e os Seis graus de separação Stanley Milgram foi um dos psicólogos mais controversos do século vinte. Seus experimentos mais famosos são o chamado experimento Milgram, em que ele analisou a capacidade dos participantes de obedecer a uma figura autoritária que os ordenava ações contrárias a consciência pessoal dos mesmos6 , e o experimento do mundo pequeno7 . Nesse experimento, o objetivo de Milgram era descobrir a distância entre duas pessoas nos EEUU. Ele escolheu pares de pessoas de cidades e estados diferentes, para uma pessoa do par ele mandou um pacote com a foto, nome e outras informações da outra, com as seguintes regras: 1. Adicione seu nome no final da lista; 2. Pegue um dos cartões postais, preencha seus dados e mande de volta para a Universidade Harvard; 3. Se você conhece pessoalmente a pessoa alvo, envie esse pacote para ela; 4. Caso contrário não tente contatá-la diretamente, ao invés disso envie esse pacote para alguém que você conheça pessoalmente e que você acredite que tenha mais chances de conhecer o alvo pessoalmente do que você; Os resultados foram impressionantes, as cartas não só chegaram aos seus alvos, como ele encontrou um número médio de passos entre pessoa inicial e alvo de 5,5. Esse é um número muito pequeno, mesmo se pensando que o experimento se resumiu a cidades no interior dos EEUU. É óbvio que os resultados para pessoas de países diferentes devem ser maiores, mas isso não ofusca a relevância dos resultados. Imagine um grafo da sociedade, em que os nós sejam as pessoas, e que caso elas se conheçam mutuamente há uma aresta entre elas. Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 8. Se a sociedade fosse uma rede aleatória, seria impossível conseguir um valor médio tão baixo, mesmo que fossem escolhidas pessoas de cidades vizinhas. Parece que temos um problema no nosso modelo, não parece factível que ele comporte uma distância média tão baixa. No próximo caso vamos tentar aplicar o modelo a mais uma rede e ver se ela nos dá uma pista de qual é o problema. O próximo modelo será a Internet. A Internet O maior repositório de conhecimento da humanidade que já existiu, apesar do meio bilhão de nós que possui atualmente, a internet começou pequena. Há cinqüenta anos nem o mais visionário dos escritores de ficção científica sonhava que tal idéia viesse a se tornar real. Como uma rede com 213 nós em 1981 passa a ter 489.774.2698 nós 26 anos depois? Qual é a topologia dessa rede? Por que ela não se desmantelou no meio do caminho? Se a Internet fosse regida pelo modelo de redes aleatórias de Erdös e Rényi antes que a Internet alcança-se um milhão de nós ela já demandaria mais recursos do que toda a capacidade computacional que a humanidade possui agora. Logo existe algo muito errado no nosso modelo. A internet não é aleatória. Imagine que você tenha um fio “infinito” e queira se ligar a rede, você se conectaria ao velho computador do seu vizinho na periferia da rede ou ao servidor mais central que você conseguisse alcançar? As pessoas escolhem a se conectar ao ISP9 que tenha o melhor preço, ou a melhor velocidade, ou uma série de outros motivos. Mas em geral isso significa que quanto maior for o ISP (quanto mais conexões com outros ISPs ele tiver, quanto mais no centro da rede ele estiver) mais pessoas escolherão se conectar a ele. Assim como com os seis degraus de separação, o modelo de redes aleatórias não consegue explicar a internet, muitas outras redes reais também não conseguem ser explicadas por essa teoria, e foi a necessidade de explicar essas situações que levou a criação do modelo de Scale-free Networks, foco deste documento, que definiremos no próximo capítulo. Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 9. Um pouco de matemática Definição Scale-free Networks são grafos de topologia não-trivial onde a distribuição dos graus dos nós da rede segue uma lei de potência. O modelo Barabási-Albert O modelo de redes aleatórias pressupõe que dado um número fixo de nós, arestas são adicionadas aleatoriamente ligando estes nós entre si, sem que nenhum nó seja acrescentado ou retirado do grafo. Já as redes encontradas na vida real, pelo contrário, se baseiam firmemente em dois conceitos; crescimento e anexação preferencial. Começando com um pequeno grupo de pessoas, a sua rede de amizades vai crescendo com adição esporádica de novos nós, isso é o que chamamos de crescimento. Mas mais do que isso, é muito mais provável que você se torne amigo de um amigo de seus amigos do que de um estranho qualquer que você encontre na rua, isso chamamos de anexação preferencial. Da mesma forma, a Internet começou pequena, tendo somente dois computadores como nós, e foi crescendo a cada nova máquina que foi ligada a rede. E na Internet também como na sua rede de amigos, é o computador que possui mais conexões – provavelmente um servidor de algum ISP – o que possui a maior probabilidade de que um computador recém adicionado à rede se conecte. Estes dois ingredientes inspiraram a criação do modelo Barabási-Albert, o que levou ao primeiro modelo com uma distribuição de graus em lei de potência. O algoritmo do modelo Barabási-Albert é o seguinte: Começando com um número de nós iniciais ( 0m ), a cada passo adicione um novo nó com 0mm ≤ arestas ligando o novo nó a m diferentes nós. Na hora de escolher os nós aos quais o novo nó se conectará nós assumimos que a probabilidade Π de que um nó um novo nó se conectará ao nó i depende do grau ik do nó i da seguinte forma: ( ) ∑ =Π j j i i k k k Após t iterações esse algoritmo resulta em uma rede com 0mtN += nós e mt arestas. Simulações numéricas indicam que essa rede evolui para um estado de escala invariante com a probabilidade de Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 10. que um nó tenha k arestas seguindo uma lei de potência com um expoente 3=BAγ independente da única variável do modelo, m . Distribuição de graus Um dos resultados determinantes do modelo de Scale-free networks, é a sua distribuição de graus. Definimos distribuição de graus como a uma função nkfG =)( , onde dado um grau k , n é o número de nós do grafo G que possua grau k . Figura 4 – Distribuição de graus de uma rede aleatória A figura 4, mostra a distribuição de graus de um grafo construído utilizando o algoritmo de Erdös-Rényi, que é uma distribuição chamada de Curva Bell. Basicamente a figura nos mostra que a maior parte dos nós possui um mesmo grau médiok . Figura 5 – Distribuição de graus de uma Scale-free Network Já a figura 5 mostra a distribuição encontrada em grafos construídos utilizando o algoritmo Barabási- Albert, essa distribuição é chamada de lei de potência. Ao contrário da curva Bell onde a maior parte dos Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 11. nós tem grau médiok , na Scale-free networks uma pequena quantidade de nós possui um k muito grande, enquanto a grande maioria possui um valor mínimo. Disso nos prova que o algoritmo Barabási- Albert favorece com que os ricos enriquecem10 com relação ao grau k . Distância média Chamemos de ),( 71 nnd o número de arestas do menor caminho que ligue o nó 1n e 7n . Figura 4 – Grafo com o menor caminho entre 1n e 7n realçado Neste caso, 4),( 71 =nnd . Da mesma forma, chamamos de distância média de um grafo a somatória da distância mínima entre cada nó do grafo para todos os outros, dividida pela quantidade de nós do grafo, ou seja, dado um grafo G com um número n de nós: n nnd l n i n j ji G ∑∑= = = 1 1 ),( Resultados experimentais11 indicam que redes Scale-free com grau médio 4=k e de tamanho n quando comparados com redes aleatórias de mesmo tamanho e grau médio possuem uma distância média menor, o que indica que a topologia livre de escapa é mais propensa a manter os nós uns próximos dos outros do que a topologia homogênea dos grafos aleatórios. Mais do que isso, foi descoberto que a distância média de um grafo cresce de forma aproximadamente logarítmica com relação a n. Ou seja: CBNAlG +− )ln(~ Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 12. Coeficiente de Aglutinação O coeficiente de aglutinação12 determina o quão próximo um grafo está de ser considerado um clique. Um clique é um grafo em que dado quaisquer dois nós, existe uma aresta ligando eles, 5K é um exemplo clássico de clique13 . Figura 514 – Grafo 5K Chamemos de )( jG nλ a quantidade de triângulos presentes no grafo G que tenham jn como um dos vértices, ou seja )( jG nλ é a quantidade de sub-grafos de G que possuam três arestas e três nós, sendo um destes jn . Por sua vez, chamemos de )( jG nτ a quantidade de sub-grafos de G que possuam duas arestas e três nós, sendo um destes jn . Logo, o coeficiente de aglutinação de jn , )( jG nc será: )n( )n( )n( j j j G G Gc τ λ = Logo, considerando o grafo da Figura 3, teremos que o 1 2 2 )n( )n( )n( 3 3 3 === G G Gc τ λ Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 13. Figura 6 – A esquerda os triângulos que possuem 3n como vértice, e a direita as triplas O coeficiente de aglutinação global do grafo por sua vez é dado por: ∑= = n i iGG ncC 1 )( n 1 Enquanto nos grafos aleatórios coeficiente de aglutinação é dado por: n k CG = Onde k é o grau médio do grafo e n é número de nós, em Scale-free networks o coeficiente de aglutinação aparentemente15 decai seguindo uma lei de potencia 75,0 ~ − NCG Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 14. Detalhes de Implementação Por que Drupal? O Drupal é um CMS/CMF open source feito em Drupal, sua arquitetura beneficia a implementação de comunidades online, ele inclusive possui uma longa história de uso no governo brasileiro, especialmente no Ministério da Cultura. Por isso optamos por desenvolvermos uma suíte de módulos para ele. Modularização Graph Module O Graph Module é um módulo responsável por armazenar as informações dos grafos sociais e controlar seu preenchimento e renderização. Um Grafo é um tipo de node do Drupal, integravel com CCK, Views e outras ferramentas padrões do drupal, o que possibilita, por exemplo, que um grafo seja georeferênciado, seja plotado num mapa, ou seja, atrelado ao período do tempo. Ele também possui suporte a versionamento, o que significa que o conteúdo do grafo (nós e arestas) seja recalculado periodicamente, com as novas informações sendo salvas em revisões, possuindo assim uma forma fácil de avaliar a evolução da rede. Para isso, o Graph Module implementa a Graph API, a espinha dorsal da suíte, a ser descrita em detalhes no próximo capítulo. Graph API A Graph API permite que módulos de terceiros implementem seus próprios algoritmos de preenchimento, assim um mesmo grafo pode representar as relações de amizade dentro de uma comunidade e a relevância das pessoas dentro dessa comunidade. Uma hook implementando a Graph API é muito parecido com a hook Node API do Drupal, a seguir um exemplo de implementação da hook: Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 15. function graph_graph($op, $a2 = '', $a3 = NULL) { switch($op) { case 'list': $algorithms = array( array( 'name' => 'static', 'title' => 'Static graph', ), ); return $algorithms; case 'form': $name = $a2; switch($name) { case 'static': $form['edges'] = array( '#type' => 'textarea', '#title'=> 'Edges', ); } return $form; case 'process': $algorithm = $a2['algorithm']; switch($algorithm['name']) { case 'static': $data = $a2['edges']; $lines = explode("n",$data); if(is_array($lines)) { foreach($lines as $line){ $foo = explode('->', $line); if(is_array($foo)) { $edges[] = array( 'from' => trim($foo[0]), 'to' => trim($foo[1]), 'orientation' => 0, ); } } } break; } return $edges; } } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 16. Graph Rendering Graph Rendering é a parte da suite responsável por representar graficamente os grafos. Ela foi desenvolvida em Flex, baseado na toolkit opensource Prefuse Flare. Exemplo de Visualização gerada pelo Graph Rendering O arquivo de entrada é um XML no formal GraphML, especificado em http://graphml.graphdrawing.org/specification/, um exemplo de arquivo GraphML é: <?xml version="1.0" encoding="UTF-8"?> <graphml> <graph> <key id="name" for="node" attr.name="name" attr.type="string" /> <key id="gender" for="node" attr.name="gender" attr.type="string" /> <node id="a"> <data key="name">a</data> <data key="gender">M</data> </node> <node id="e"> <data key="gender">M</data> <data key="name">e</data> </node> <node id="d"> <data key="gender">M</data> <data key="name">d</data> </node> <node id="c"> Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 17. <data key="gender">M</data> <data key="name">c</data> </node> <node id="b"> <data key="gender">M</data> <data key="name">b</data> </node> <node id="f"> <data key="name">f</data> <data key="gender">M</data> </node> <edge source="a" target="e" oriented="0" /> <edge source="a" target="d" oriented="0" /> <edge source="a" target="c" oriented="0" /> <edge source="a" target="b" oriented="0" /> <edge source="f" target="e" oriented="0" /> <edge source="f" target="d" oriented="0" /> <edge source="d" target="c" oriented="0" /> <edge source="f" target="b" oriented="0" /> <edge source="f" target="a" oriented="0" /> <edge source="a" target="f" oriented="0" /> </graph> </graphml> Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 18. Conclusão Estudar Scale-free Networks nos permite modelar, e com isso compreender melhor e mais do que isso prever o que acontece em várias redes reais. Numa sociedade extensivamente baseada na Internet como a nossa, é de suma importância quais são suas vulnerabilidades e potencialidades, para que possamos minimizar o impacto caso algum infortúnio venha acontecer. Vários estudos já forma feitos nessa área, notavelmente o de L. Zhao, K. Park e Y.C. Lai., o Graph Module em específico nos ajuda disponibilizando um jeito fácil de visualizar propriedades intrínsecas de comunidades online, obviamente ainda temos um longo caminho a frente por ser percorrido. A maior parte das pendências se encontra na ferramenta de renderização de grafos, mas conforme a lib em que nos baseados evolue esses erros tendem a ser mitigados. No mais, talvez uma mudança de foco de um approach nas estruturas de dados e nas funções da API seja recomendado. A API atual dá muito mais importância ao conceito de arestas do que ao de nós, mas a experiência adquirida ao longo desse trabalho me diz que deveríamos partir para estruturas mais voltadas aos nós e sua relevância na rede. Bibliografia S. MILGRAM – The small world problem. Psychology. Today 2, 60-67, (1967) S. MILGRAM – Behavioral Study of Obedience. Journal of Abnormal and Social Psychology 67: 371–378. PMID 14049516 (1963). R. ALBERT, A.-L. BARABÁSI – Statistical mechanics of complex networks. Reviews of Modern Physics 74, 47-97 (2002). D. J. WATTS, S. STROGATZ – Collective dynamics of 'small-world' networks. Nature 393: 440–442. (1998). L. ZHAO, K. PARK, Y.C. LAI – Attack vulnerability of scale-free networks due to cascading breakdown. Physical Review E 70, 035101(R) (2004) Z. DEZSO, A.-L. BARABÁSI – Halting viruses in scale-free networks. Physical Review E 65, 055103(R) (2002) BARABÁSI, A-L – Linked ISBN 0-7382-0667-9 (2002) Notas Pagina pra comprar os volumes http://www.springer.com/dal/home/birkhauser/historyofscience?SGWID=1-40295-2-121672-0 Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Konigsberg_bridges.png “Can one walk across the seven bridges and never cross the same one twice?” http://www.math.dartmouth.edu/~euler/pages/E053.html Erdős Number Project http://www.oakland.edu/enp/Erdos0 Mais informações em http://en.wikipedia.org/wiki/Milgram_experiment , e em http://content.apa.org/journals/abn/67/4/371 Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 19. “Small world Experiment” Números retirados de http://www.isc.org/index.pl?/ops/ds/host-count-history.php Internet Service Provider “Rich get richer” Ver R. ALBERT, A.-L. BARABÁSI, Pág 74 Ver D. J. WATTS, S. STROGATZ 5K também é famoso devido ao Teorema de não-planaridade de Kuratowski Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Complete_graph_K5.svg Ver R. ALBERT, A.-L. BARABÁSI, Pág. 75 Ver Z. DEZSO, A.-L. BARABÁSI Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 20. Apêndice A – Código Fonte do Graph Module <?php //; $Id: $ function graph_menu() { $items = array(); $items['node/%graph_menu/graphml'] = array( 'title' => 'GraphML', 'page callback' => 'graph_export_graphml', 'page arguments' => array(1), 'access callback' => 'node_access', 'access arguments' => array('view', 1), 'file' => 'graphml.inc', 'type' => MENU_CALLBACK, ); return $items; } function graph_menu_load($nid) { if (!is_numeric($nid)) { return FALSE; } $node = node_load($nid); if (!isset($node->type) || $node->type != 'graph') { return FALSE; } return $node; } function graph_form(&$node) { $type = node_get_types('type', $node); if ($type->has_title) { $form['title'] = array( '#type' => 'textfield', '#title' => check_plain($type->title_label), '#required' => TRUE, '#default_value' => $node->title, '#weight' => -5 Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 21. ); } if ($type->has_body) { $form['body_field'] = node_body_field($node, $type->body_label, $type- >min_word_count); } // Now we define the form elements specific to our node type. $form['graph'] = array( '#type' => 'fieldset', '#collapsible' => true, '#collapsed' => false, '#title' => t('Edges'), '#tree' => true, ); $algorithms = _graph_get_algorithms_list(); if(count($algorithms)) { $form['graph']['new'] = array( '#type' => 'select', '#title' => t('Auto-fill Algorithms'), '#options' => $algorithms, ); $form['graph']['add'] = array( '#type' => 'submit', '#value' => t('add'), ); } return $form; } function graph_form_alter(&$form, $form_state, $form_id) { if($form_id != 'graph_node_form') return; if(count($form_state['storage']['graph']['algorithms'])) { foreach($form_state['storage']['graph']['algorithms'] as $key => $algorithm) { $fieldset = array( Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 22. '#type' => 'fieldset', '#collapsible' => true, '#collapsed' => false, '#title' => $algorithm['title'], '#tree' => true, ); $fieldset['algorithm'] = array( '#type' => 'value', '#value' => $algorithm, ); $form['graph']['algorithms'][$key] = array_merge($fieldset, module_invoke_all('graph', 'form', $algorithm['name'], $algorithm['conf'])); } } $form['#submit'][] = 'graph_node_form_submit'; } function graph_node_form_submit($form, &$form_state) { if($form_state['clicked_button']['#value'] == 'add' && ! empty($form_state['values']['graph']['new'])) { $algorithm = _graph_get_algorithm($form_state['values']['graph']['new']); //if(!isset($algorithm['conf'])) // $algorithm['conf'] = array(); $algorithm['id'] = count($form_state['storage']['graph']['algorithms']); $form_state['storage']['graph']['algorithms'][] = $algorithm; } else { } } function _graph_get_algorithm($id = NULL) { static $algorithms = NULL; if($algorithms == NULL) { $raw = module_invoke_all('graph','list'); foreach($raw as $algorithm) { $algorithms[$algorithm['name']] = $algorithm; } } if($id != NULL) { if(isset($algorithms[$id])) { Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 23. return $algorithms[$id]; } else { return NULL; } } return $algorithms; } function _graph_get_algorithms_list() { $algorithms = _graph_get_algorithm(); foreach($algorithms as $key => $data) { $result[$key] = $data['title']; } return $result; } function graph_graph($op, $a2 = '', $a3 = NULL) { switch($op) { case 'list': $algorithms = array( array( 'name' => 'static', 'title' => 'Static graph', ), array( 'name' => 'simple_user_content_relationship', 'title' => 'Simple User to User Relationship', ), ); return $algorithms; case 'form': $name = $a2; switch($name) { case 'static': $form['edges'] = array( '#type' => 'textarea', '#title'=> 'Edges', ); } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 24. return $form; case 'process': $algorithm = $a2['algorithm']; switch($algorithm['name']) { case 'static': $data = $a2['edges']; $lines = explode("n",$data); if(is_array($lines)) { foreach($lines as $line){ $foo = explode('->', $line); if(is_array($foo)) { $edges[] = array( 'from' => trim($foo[0]), 'to' => trim($foo[1]), 'orientation' => 0, ); } } } break; case 'simple_user_content_relationship': $nodes = db_queryd("SELECT nid, title, uid FROM {node} WHERE type != 'graph'"); while($node = db_fetch_object($nodes)) { $poster = user_load($node->uid); $comments = db_queryd("SELECT cid, uid FROM {comments} WHERE nid = %d", $node->nid); while($comment = db_fetch_object($comments)) { if($comment->uid > 0) { $commenter = user_load($comment->uid); if($commenter->uid != $poster->uid) { $edges[] = array( 'from' => $commenter->name, 'to' => $poster->name, 'orientation' => 1, ); } } } } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 25. break; } return $edges; } } function graph_validate(&$node) { if($node->op != 'add' && (!isset($node->graph['algorithms']) || count($node- >graph['algorithms']) < 1)) { form_set_error('new',t('Each graph should have at least one Algorithm.')); } } function graph_perm() { return array( 'create graph', 'delete own graph', 'delete any graph', 'edit own graph', 'edit any graph', ); } function graph_access($op, $node, $account) { if ($op == 'create') { return user_access('create graph', $account); } if ($op == 'update') { if (user_access('edit any graph', $account) || (user_access('edit own graphs', $account) && ($account->uid == $node->uid))) { return TRUE; } } if ($op == 'delete') { if (user_access('delete any graph', $account) || (user_access('delete own graph', $account) && ($account->uid == $node->uid))) { return TRUE; Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 26. } } } function graph_node_info() { return array( 'graph' => array( 'name' => t('Graph'), 'module' => 'graph', 'description' => t("This is an example node type with a few fields."), 'has_title' => TRUE, 'title_label' => t('Title'), 'has_body' => TRUE, 'body_label' => t('Description'), ) ); } function graph_load($node) { $additions['graph']['oriented'] = db_result(db_query("SELECT oriented FROM {graph} WHERE nid = %d",$node->nid)); $additions['graph']['edges'] = array(); $edges = db_query("SELECT `algorithm`, `delta`, `from`, `to`, `orientation` FROM {graph_data} WHERE nid = %d AND vid = %d", $node->nid, $node->vid); while($edge = db_fetch_array($edges)) { $additions['graph']['edges'][] = $edge; if(!isset($additions['graph']['vertices'][$edge['from']])) _graph_create_vertice($additions['graph']['vertices'], $edge['from']); if(!isset($additions['graph']['vertices'][$edge['to']])) _graph_create_vertice($additions['graph']['vertices'], $edge['to']); } return $additions; } function _graph_create_vertice(&$vertices, $id) { $vertice = array( 'id' => count($vertices), 'name' => $id, 'gender' => count($vertices)%2? 'M' : 'F', ); Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 27. $vertices[$id] = $vertice; return $vertice; } function graph_insert($node) { graph_rebuild_edges($node); //db_query("INSERT into {graph} (nid, oriented) VALUES (%d, %d)", $node- >nid, $node->graph['oriented']); } function graph_update($node) { // if this is a new node or we're adding a new revision, //if ($node->revision) { graph_rebuild_edges($node); //} } function graph_rebuild_edges($node) { foreach($node->graph['algorithms'] as $algorithm) { $edges = module_invoke_all('graph','process',$algorithm, $node); foreach($edges as $edge) { db_query("INSERT INTO {graph_data} (`nid`, `vid`, `algorithm`, `delta`, `from`, `to`, `orientation`) VALUES (%d, %d, '%s', %d, '%s', '%s', %d)", $node->nid, $node->vid, $algorithm['algorithm']['name'], $algorithm['algorithm']['id'], $edge['from'], $edge['to'], $edge['orientation']); } } } function graph_delete($node) { // Notice that we're matching all revision, by using the node's nid. db_query('DELETE FROM {graph_data} WHERE nid = %d', $node->nid); } function graph_view($node, $teaser = FALSE, $page = FALSE) { $swf_path = base_path().drupal_get_path('module','graph').'/flare.graph.swf'; $swf_string = $swf_path.'?graphml_file='.url('node/'.$node->nid.'/graphml'); Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 28. $flash_object = ' <object classid="clsid:D27CDB6E-AE6D-11cf-96B8- 444553540000" id="flare" width="600" height="600" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab "> <param name="movie" value="'.$swf_string.'" /> <param name="quality" value="high" /> <param name="bgcolor" value="#2e2e2e" /> <param name="allowScriptAccess" value="sameDomain" /> <embed src="'.$swf_string.'" quality="high" bgcolor="#2e2e2e" width="600" height="600" name="explorer" align="middle" play="true" loop="false" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"> </embed> </object>'; $node = node_prepare($node, $teaser); $node->content['flare'] = array( '#value' => $flash_object, '#weight' => 1, ); return $node; } function graph_export_graphml($node) { $output = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"? ><graphml></graphml>'); $graph = $output->addChild('graph'); _add_key($graph,'name', 'node', 'string'); _add_key($graph,'gender', 'node', 'string'); foreach($node->graph['vertices'] as $vertice) { $v = $graph->addChild('node'); $v->addAttribute('id', $vertice['id']); Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 29. foreach($vertice as $key => $value) { if($key != 'id') { $a = $v->addChild('data',$value); $a->addAttribute('key',$key); } } } foreach($node->graph['edges'] as $edge) { $e = $graph->addChild('edge'); $e->addAttribute('source', $node->graph['vertices'][$edge['from']]['id']); $e->addAttribute('target', $node->graph['vertices'][$edge['to']]['id']); //$e->addAttribute('oriented', $edge['orientation']); } $xml = $output->asXML(); $xml = str_replace('"/><edge','"></edge><edge', $xml); $xml = str_replace('"/></graph>','"></edge></graph>', $xml); print($xml); //$domXML = dom_import_simplexml($output); die; } function _add_key($graph, $name, $for, $type){ $key = $graph->addChild('key'); $key->addAttribute('id', $name); $key->addAttribute('for', $for); $key->addAttribute('attr.name', $name); $key->addAttribute('attr.type', $type); } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 30. Apêndice B – Código fonte do Flex Graph Rendering package { import flare.animate.Transitioner; import flare.data.DataSet; import flare.display.RectSprite; import flare.display.TextSprite; import flare.vis.Visualization; import flare.vis.data.Data; import flare.vis.data.NodeSprite; import flare.vis.operator.filter.GraphDistanceFilter; import flare.vis.operator.layout.RadialTreeLayout; import flash.display.LoaderInfo; import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Rectangle; import flash.text.TextFormat; [SWF(width="600", height="600", backgroundColor="#2e2e2e", frameRate="30")] public class graph extends Sprite { public var paramObj:Object; private var vis:Visualization; private var maxLabelWidth:Number; private var maxLabelHeight:Number; private var _gdf:GraphDistanceFilter; private var _maxDistance:int = 2; private var _transitionDuration:Number = 2; public function graph() { try { paramObj = (this.root.loaderInfo as LoaderInfo).parameters; } catch (error:Error) { trace(error.toString()); } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 31. var gmr:GraphMLReader = new GraphMLReader(onLoaded); gmr.read(paramObj.graphml_file); } private function onLoaded(data:Data):void { vis = new Visualization(data); var w:Number = stage.stageWidth; var h:Number = stage.stageHeight; vis.bounds = new Rectangle(0, 0, w, h); var textFormat:TextFormat = new TextFormat(); textFormat.color = 0xffffffff; var i:int = 0; vis.data.nodes.visit(function(ns:NodeSprite):void { var ts:TextSprite = new TextSprite(ns.data.name,textFormat); ns.addChild(ts); }); vis.data.nodes.setProperty("x",w/2); vis.data.nodes.setProperty("y",h/2); maxLabelWidth = getMaxTextLabelWidth(); maxLabelHeight = getMaxTextLabelHeight(); vis.data.nodes.visit(function(ns:NodeSprite):void { var rs:RectSprite = new RectSprite( -maxLabelWidth/2-1,- maxLabelHeight/2 - 1, maxLabelWidth + 2, maxLabelHeight + 2); if (ns.data.gender == "M") { rs.fillColor = 0xff000044; rs.lineColor = 0xff000044; } else { rs.fillColor = 0xffaa0000; rs.lineColor = 0xffaa0000; } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 32. rs.lineWidth = 2; ns.addChildAt(rs, 0); // at postion 0 so that the text label is drawn above the rectangular box ns.size = 0; adjustLabel(ns,maxLabelWidth,maxLabelHeight); ns.mouseChildren = false; ns.addEventListener(MouseEvent.CLICK, update); ns.buttonMode = true; }); var lay:RadialTreeLayout = new RadialTreeLayout(); lay.useNodeSize = false; var root:NodeSprite = vis.data.nodes[0]; _gdf = new GraphDistanceFilter([root], _maxDistance,NodeSprite.GRAPH_LINKS); vis.operators.add(_gdf); //distance filter has to be added before the layout vis.operators.add(lay); addChild(vis); updateRoot(root); } private function update(event:MouseEvent):void { var n:NodeSprite = event.target as NodeSprite; if (n == null) return; updateRoot(n); Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 33. } private function updateRoot(n:NodeSprite):void { vis.data.root = n; _gdf.focusNodes = [n]; var t1:Transitioner = new Transitioner(_transitionDuration); vis.update(t1).play(); } private function getMaxTextLabelWidth() : Number { var maxLabelWidth:Number = 0; vis.data.nodes.visit(function(n:NodeSprite):void { var w:Number = getTextLabelWidth(n); if (w > maxLabelWidth) { maxLabelWidth = w; } }); return maxLabelWidth; } private function getMaxTextLabelHeight() : Number { var maxLabelHeight:Number = 0; vis.data.nodes.visit(function(n:NodeSprite):void { var h:Number = getTextLabelHeight(n); if (h > maxLabelHeight) { maxLabelHeight = h; } }); return maxLabelHeight; } private function getTextLabelWidth(s:NodeSprite) : Number { Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 34. var s2:TextSprite = s.getChildAt(s.numChildren-1) as TextSprite; // get the text sprite belonging to this node sprite var b:Rectangle = s2.getBounds(s); return s2.width; } private function getTextLabelHeight(s:NodeSprite) : Number { var s2:TextSprite = s.getChildAt(s.numChildren-1) as TextSprite; // get the text sprite belonging to this node sprite var b:Rectangle = s2.getBounds(s); return s2.height; } private function adjustLabel(s:NodeSprite, w:Number, h:Number) : void { var s2:TextSprite = s.getChildAt(s.numChildren-1) as TextSprite; // get the text sprite belonging to this node sprite s2.horizontalAnchor = TextSprite.CENTER; s2.verticalAnchor = TextSprite.CENTER; } } } /** * simple graphml reader utility * */ import flare.data.converters.GraphMLConverter; import flare.data.DataSet; import flash.events.*; import flash.net.*; import flare.vis.data.Data; class GraphMLReader { public var onComplete:Function; Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 35. public function GraphMLReader(onComplete:Function=null,file:String = null) { this.onComplete = onComplete; if(file != null) { read(file); } } public function read(file:String):void { if ( file != null) { var loader:URLLoader = new URLLoader(); configureListeners(loader); var request:URLRequest = new URLRequest(file); try { loader.load(request); } catch (error:Error) { trace("Unable to load requested document."); } } } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.COMPLETE, completeHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); } private function completeHandler(event:Event):void { if (onComplete != null) { var loader:URLLoader = event.target as URLLoader; var dataSet:DataSet = new GraphMLConverter().parse(new XML(loader.data)); onComplete(Data.fromDataSet(dataSet)); } else { trace("No onComplete function specified."); } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 36. } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } } Av. Prof. Lucio Martins, Trav. 4, Bl. 18 - Cidade Universitária - 05508-900 - São Paulo - SP - Brasil Telefones: (+55-11) 3091-6325 / 4925 Fax: (+55-11) 3815-3083 www.futuro.usp.br - info@futuro.usp.br
  • 37. 1 Pagina pra comprar os volumes http://www.springer.com/dal/home/birkhauser/historyofscience?SGWID=1-40295-2-121672-0 2 Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Konigsberg_bridges.png 3 “Can one walk across the seven bridges and never cross the same one twice?” 4 http://www.math.dartmouth.edu/~euler/pages/E053.html 5 Erdős Number Project http://www.oakland.edu/enp/Erdos0 6 Mais informações em http://en.wikipedia.org/wiki/Milgram_experiment , e em http://content.apa.org/journals/abn/67/4/371 7 “Small world Experiment” 8 Números retirados de http://www.isc.org/index.pl?/ops/ds/host-count-history.php 9 Internet Service Provider 10 “Rich get richer” 11 Ver R. ALBERT, A.-L. BARABÁSI, Pág 74 12 Ver D. J. WATTS, S. STROGATZ 13 5K também é famoso devido ao Teorema de não-planaridade de Kuratowski 14 Copyright Wikipedia http://en.wikipedia.org/wiki/Image:Complete_graph_K5.svg 15 Ver R. ALBERT, A.-L. BARABÁSI, Pág. 75