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 àaetb. - Écrire
suggestions(reseau, a)renvoyant les utilisateurs situés à distance exactement 2 dea(amis d'amis qui ne sont pas déjà amis dea), 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
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
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.