Bonjour
J’essaie de trouver un algorithme qui me permettrait efficacement de générer des paires de nombres de façon aléatoire depuis une liste de nombres définit.
Je m’explique:
J’ai une liste de nombres discontinues nommée N (ex: { 1, 2, 3, 6, 8, 10}), et j’ai besoin de former des paires de nombres aléatoirement pour les ajouter dans une liste. (une paire ne peux se trouver qu’une seule fois dans la liste)
Par exemple, avec une liste N de 3 nombres différent, il y a 6 paires possible (on ne prend pas en compte les paires qui contiennent 2 fois le même nombre):
Exemple pour une liste N = { 4, 8, 9 }
, les paires possibles sont:
(4,8) (4,9) (8,4) (8,9) (9,4) (9,8)
Quand on arrive a une liste N avec 30 nombres à l’intérieur, on obtient 870 paires possibles et ma méthode actuelle devient de moins en moins performante plus j’ajoute de nombres à N.
Pour l’instant ma stratégie c’est ça:
// taille de N est 30 pour cet exemple, donc 870 paires possibles
N = { 3, 8, 10, 15, 16, ... }
// disons que j'ai déjà 200 paires dans ma list
my_pairs = { (8,16), (23, 32), (16,10), ... }
// on sélectionne 2 nombres de N aléatoirement
rn1 = random(N)
rn2 = random(N)
On parcours my_pairs pour checked si il y a déjà une paire (rn1,rn2)
Si la paire existe déjà, on choisit 2 nouveau nombres pour rn1 et rn2 et on recommence le check de la liste
Si la paire n'existe pas, on l'ajoute à la liste my_pairs
Le problème est que plus il y a de paires dans 'my_pairs’, plus je vais aléatoirement générer de paires qui existent déjà et donc a chaque fois je dois parcourir la liste pour check l’existence de la paire dans my_list.
Je pourrais essayer de générer toutes les paires possibles depuis N dans une liste, mélanger aléatoirement la liste et récupérer 1 élément de la liste à chaque fois mais ça prendrais pas mal de mémoire de stocker l’entièreté des paires possibles (9900 paires possibles pour une liste N de 100 nombres) et en plus de ça la taille de N augmente progressivement donc je peux pas trop recalculer la liste des paires possible à chaque fois que j’ajoute un nombre à N.
Est ce qu’il y a un algorithme qui me permettrait générer des paires uniques aléatoirement et différentes à chaque fois ?
Je pensais peut être qu’utiliser des matrices pourrait être utile, ou classer les paires dans une structure ordonnée à chaque fois que je les ajoutes à ma liste.