Adloun

NSI (terminale) · Chapitre 4 · Application directe du cours

Problème — Amis communs et suggestions dans un réseau social

Les graphes · niveau 2

Énoncé

Problème — Amis communs et suggestions dans un réseau social.

Un réseau social est modélisé par un graphe non orienté reseau (listes d'adjacence), où chaque sommet est un utilisateur (chaîne de caractères) et chaque arête une relation d'amitié.

  • Écrire amis_communs(reseau, a, b) renvoyant l'ensemble des amis communs à a et b.
  • Écrire suggestions(reseau, a) renvoyant les utilisateurs situés à distance exactement 2 de a (amis d'amis qui ne sont pas déjà amis de a), classés par nombre d'amis communs décroissant.

Corrigé

La première question est une intersection d'ensembles de voisins. La seconde exploite le fait que les bonnes suggestions sont les amis d'amis : on compte, pour chaque candidat, combien d'amis il partage avec a.


def amis_communs(reseau, a, b):
    return set(reseau[a]) & set(reseau[b])

def suggestions(reseau, a):
    amis_de_a = set(reseau[a])
    scores = {}   # candidat -> nombre d'amis communs avec a
    for ami in reseau[a]:
        for candidat in reseau[ami]:
            if candidat != a and candidat not in amis_de_a:
                scores[candidat] = scores.get(candidat, 0) + 1
    # tri par score decroissant
    return sorted(scores, key=lambda c: scores[c], reverse=True)

reseau = {
    "Alice":  ["Bob", "Chloe"],
    "Bob":    ["Alice", "Chloe", "David"],
    "Chloe":  ["Alice", "Bob", "Eve"],
    "David":  ["Bob"],
    "Eve":    ["Chloe"],
}
print(amis_communs(reseau, "Alice", "Bob"))  # {'Chloe'}
print(suggestions(reseau, "Alice"))          # ['David', 'Eve']

David (ami de Bob) et Eve (amie de Chloé) sont suggérés à Alice. Le calcul des suggestions parcourt les amis d'amis, soit une complexité de l'ordre de autour du voisinage de a.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →