Escolar Documentos
Profissional Documentos
Cultura Documentos
Trabalho Prático 1
1. Introdução
A análise de redes sociais é um tópico de estudo importante permitindo obter informação de vários tipos, tais
como o tráfego gerado na net (número de acessos), número de críticas (“likes”), agentes mais populares
(“influencers”) , etc. Existem vários tipos de análise que podem ser feitas, mas neste trabalho vamos apenas
estudar uma relação que se pode estabelecer entre os agentes de uma rede: graus de amizade.
Vamos assumir que os agentes são indicados por um inteiro. Neste contexto, quando um agente ai pede amizade
a um agente aj (e este aceita), então ai fica a ser um amigo direto do agente aj, o que denotaremos por ai,j = 1,
ou equivalentemente que ai é amigo1 de aj. Por outro lado, se ai não é amigo1 de aj, mas se é amigo1 de um
agente am, que por sua vez é amigo1 de aj, então ai fica a ser amigo2 do agente aj. Estes exemplos podem
generalizar-se na seguinte definição indutiva:
Um agente ai é amigoi de um agente aj (i.e. gi,j = i) se:
a) ai é amigo0 de si próprio (gi,i = 0)
b) ai é amigo1 de um agente aj (gi,j = 1) se existe uma relação de amizade direta de ai para aj.
c) ai é amigok de um agente aj se for amigop de um agente am, que é amigoq de aj, se k = p + q e não existir
nenhum outro agente an que induza uma relação de amizade menor, i.e.
1. gi,j = gi,m + gm,j ; e
2. Para qualquer agente an, gi,n + gn,j >= gi,j
d) Se as condições acima não se verificarem, então ai não é amigo em qualquer grau de aj, o que
convencionamos denotar por gi,j = -1.
A rede seguinte pode servir para ilustrar esta relação: a0
• O agente a0 é amigo1 do a1, e vice-versa (g0,1 = g1,0 = 1)
• O agente a0 é amigo1 de a2, mas a2 é apenas amigo2 de a0 ( é amigo1 de a1
a1 a2
que é amigo1 de a0).
a3
• O agente a0 é amigo3 de a5, mas a5 não é amigo de a0 (i.e. g5,0 = -1).
• O agente a3 não tem amigos (exceto ele próprio, g3,3 = 0).
• Todos os agentes são amigos em algum grau (>0) de a5, mas a5 não é amigo a4 a5
de ninguém.
R = [
[0,1,1,0,0,0],
[1,0,1,0,1,0],
Neste trabalho pretende-se determinar o grau de amizade entre agentes de [0,1,0,0,0,0],
uma rede que é especificada como uma matriz quadrada R, em que o [1,1,1,0,1,1],
elemento Ri,j indica se o agente ai é amigo1 de aj. Os agentes são numerados [0,1,0,0,0,1],
de 0 a n-1 em que n é o número de agentes da rede. Por exemplo a rede [0,0,0,0,0,0]
acima é especificada pela matriz: ]
Naturalmente a amizade entre 2 agentes é tanto mais forte quanto menor for o seu grau de amizade (não
consideramos “auto-amizades”, i.e. só consideramos graus de amizade maiores que 0). Podemos associar um
peso a cada grau de amizade (maior para graus de amizade mais diretos) e determinar a popularidade de um
agente ai agregando os graus de amizade gj,i de todos os outros agentes em relação a ai.
2.4 Popularidade
A popularidade de uma agente depende não apenas dos amigos que tem, como também do seu grau de
amizade. Para cada grau de amizade é definido um peso que tem o valor 0 para os graus de amizade 0 (auto
amizade) e -1 (não amizade). Para cada um dos outros graus, o seu valor será 1/d, em que d é a soma dos inteiros
desde 1 até ao grau de amizade considerado.
3. Notas Finais
1. O trabalho deve ser feito em grupos de 2 alunos.
2. Cada grupo deverá entregar um ficheiro com as funções implementadas (idealmente serão as 6 funções,
mas podem não implementar alguma – com a correspondente penalização na nota). Atenção que as
funções deverão ter a assinatura exatamente igual à que é pedida, nomeadamente os nomes das
funções devem ser em minúsculas e não devem ter quaisquer acentos.
3. A entrega do trabalho deverá ser feita seguindo as instruções indicadas em separado.
4. As funções implementadas deverão ser testadas o mais exaustivamente possível, e no mínimo com os
exemplos no enunciado (e outros fornecidos)
5. A classificação do trabalho tem em conta não só a correção do código das funções, mas também a
qualidade do código apresentado, nomeadamente a sua estrutura e facilidade de leitura, medida em
aspetos como a documentação das funções pedidas, a escolha do nome das variáveis utilizadas e a
decomposição adequada dos problemas.
6. Este trabalho cobre a matéria dada sobre funções, listas e vetores, ciclos e condições. Além do material
das aulas, a documentação do Python e o livro de texto serão boas fontes para estudar o que precisam
para resolver estes problemas.