Cercles d'amis

23 Apr 2019 23 Apr 2019 9567 vues ESSADDOUKI Mostafa 7 min de lecture

Problème des cercles d'amis

Il y a N étudiants dans une classe, chaque étudiant peut avoir 0 ou plusieurs amis. Si A est un ami de B et B est un ami de C, alors A et C sont également des amis (relation transitive).

Nous définissons un cercle d'amis comme un groupe d'élèves amis, tel que défini par la relation transitive ci-dessus.

Étant donné une matrice friends de taille NxN constituée des caractères 'Y' ou 'N'. Si friends[i][j] = 'Y', alors les i-ème et j-ème étudiants sont des amis, sinon 'N'.

Graphe d'amitié
Matrice d'amitié

Figure : Exemple de relations d'amitié et leur représentation matricielle

Problème

Compter les cercles d'amis

Niveau : Intermédiaire

Trouvez le nombre total de cercles d'amis dans la classe.

Exemple
Entrée
friends = [
    ['Y', 'Y', 'N', 'N'],
    ['Y', 'Y', 'Y', 'N'],
    ['N', 'Y', 'Y', 'N'],
    ['N', 'N', 'N', 'Y']
]
Sortie
2
Explication : Les étudiants 0,1,2 forment un cercle (car 0-1 sont amis, 1-2 sont amis), et l'étudiant 3 est isolé et forme un cercle à lui seul.

Solution alternative : Union-Find (Disjoint Sets)

Optimisation

Approche avec Union-Find

Une autre approche pour résoudre ce problème est d'utiliser la structure de données Union-Find (ou Disjoint Set Union), qui permet de gérer efficacement les relations d'équivalence.

Autre exemple
Entrée
friends = [
    ['Y', 'N', 'N', 'N'],
    ['N', 'Y', 'N', 'N'],
    ['N', 'N', 'Y', 'N'],
    ['N', 'N', 'N', 'Y']
]
Sortie
4
Explication : Aucun étudiant n'est ami avec un autre. Chacun forme son propre cercle.
Contraintes
  • 1 ≤ N ≤ 10³
  • La matrice est symétrique (l'amitié est une relation symétrique)
  • friends[i][i] peut être 'Y' ou 'N' (généralement 'N' car on ne se compte pas soi-même)

Comparaison des approches

ApprocheComplexité temporelleComplexité spatialeAvantages
DFS / BFSO(N²)O(N)Simple à implémenter, parcourt tout le graphe
Union-FindO(N² × α(N))O(N)Très efficace, évite la récursion
Points clés à retenir
  • Le problème des cercles d'amis revient à trouver les composantes connexes d'un graphe.
  • Deux approches principales : parcours (DFS/BFS) ou Union-Find.
  • La matrice d'adjacence est symétrique car l'amitié est une relation réciproque.
  • La relation d'amitié est transitive (amis d'amis = amis).
  • Un étudiant isolé forme son propre cercle.
Sortie
// La sortie apparaîtra ici…
Prêt · Ctrl+Entrée pour exécuter

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.