Il semble que vous ayez besoin de Associative Arrays. Un tableau associatif mappe un objet clé d'un certain type à un autre objet, éventuellement d'un type différent. Il est souvent juste appelé une "carte" puisque c'est ce qu'il fait. Une carte peut être implémentée par un Hash Table, ce qui veut dire que vous avez constamment le temps de chercher vos clés -> mappages d'objets. Je suggère deux tables de hachage pour ce problème. Le premier à mapper les noms des élèves à des listes de classes prises. La seconde pour mapper les noms de classe aux élèves qui ont suivi le cours. Vos recherches étudiant -> cours seront très rapides, et votre recherche de classe -> étudiant sera rapide aussi. En outre, lorsque vous traitez un élève particulier X, vous pouvez en utiliser un troisième pour mapper un nom d'étudiant en nombre entier, en comptant combien de fois il a partagé un cours avec l'élève X. Cela finira par être une mise en œuvre assez efficace.
Mieux encore, cela peut s'avérer être une implémentation très simple. Le mappage relationnel est une tâche si courante et les tableaux associatifs sont si utiles que de nombreuses langues les ont intégrés ou dans la bibliothèque standard. Python a son dictionnaire, Perl a son hash, Java a un HashMap (et beaucoup d'autres types de cartes), C++ a std :: map, bien que cela ne soit pas supporté par une table de hachage et n'a pas d'accès constant. À moins que vous ne soyez interdit d'utiliser la bibliothèque standard de votre langue pour cet exercice, vous ne devriez pas avoir trop de difficulté à faire fonctionner une solution efficace.
Qu'avez-vous venir avec à ce jour? –
Placez chaque liste dans son tableau respectif. Chaque élément du tableau contient un autre tableau avec la liste des classes triées par date. Trouvez l'élève X dans la liste et copiez sa liste de classes. Comparez chaque élève avec sa liste de classes. Mais cela semble inefficace. –
Le terme «le plus efficace» est celui où toutes les réponses sont déjà pré-calculées: où, pour chaque question (c'est-à-dire pour chaque élève X) vous avez déjà la réponse associée (ex. qui partage le plus de classes avec l'élève X). La structure la plus efficace pourrait alors être un dictionnaire, avec une clé pour chaque étudiant et la réponse associée pour chaque valeur correspondante. – ChrisW