O que você está procurando é uma heurística. Nenhum algoritmo pode dizer, dado um gráfico de amigos como a única entrada, se dois indivíduos não conectados diretamente são amigos ou não; não é garantido que a relação amizade / conhecimento seja transitiva (podemos assumir simetria, mas isso pode até ser um exagero na vida real). Qualquer boa heurística precisará, portanto, basear-se no entendimento de como as pessoas interagem, em vez de algum entendimento matemático da natureza dos gráficos de relações (embora seja necessário quantificar a heurística nesses termos).
Sugerir amigos de amigos com igual probabilidade é uma heurística relativamente barata, mas imprecisa. Por exemplo, meu pai tem amigos, mas eu não diria que sou amigo de nenhum deles (embora eu provavelmente diria que sou amigo de meu pai para fins de, por exemplo, uma rede social). Ter uma pessoa a uma distância relativamente próxima não necessariamente a torna uma ótima candidata.
Sugerir pessoas com quem você tem muitas conexões estendidas também parece ser uma má escolha em geral, porque isso tende a levar a um crescimento exponencial de amigos de pessoas que seguem adiante (os sete graus de separação do jogo de Kevin Bacon são um exemplo disso).
Eu sugiro um modelo baseado em circuito. Assume-se que cada elo é um resistor de resistência . Então, o melhor candidato para um novo amigo pode ser o indivíduo com a menor resistência equivalente. Aqui está um exemplo de gráfico ASCII mal executado:R
_____
/ \
a---c f
| | /
b d---e
| \ |
g h i
Digamos que queremos encontrar novos amigos para a
. a
Os amigos atuais de b
, são c
, e f
. Nós avaliamos a resistência equivalente líquido entre a
e cada um d
, e
, g
, h
, e i
:
pair resistance
(a,d) 6/7
(a,e) 13/7
(a,g) 7/4
(a,h) 1/1
(a,i) inf
De acordo com essa heurística, d
é o melhor candidato amigo, seguido de perto por h
. g
é a próxima melhor aposta, seguida de perto por e
. i
nunca pode ser um amigo candidato por essa heurística. Se você considera os resultados dessa heurística representativos de interações sociais humanas reais, é importante. Em termos computacionais, isso envolveria a localização de um subgrafo contendo todos os caminhos entre dois indivíduos (ou, talvez curiosamente, algum truncamento significativamente selecionado disso) e, em seguida, a avaliação da resistência equivalente entre os nós de origem e coletor.
EDIT: Então, qual é a minha motivação social para isso? Bem, esse pode ser um modelo aproximado de quão difícil é entrar em contato e, posteriormente, comunicar quantidades significativas de informações por meio de intermediários (amigos). Em termos de CS (em vez de termos de física), isso pode ser interpretado como largura de banda entre dois nós em um gráfico. As extensões desse sistema permitiriam diferentes tipos de links entre pessoas com pesos diferentes (resistência, largura de banda etc.) e procedessem da forma descrita acima.