6 votes

Garantir qu'une seule formule puisse s'appliquer à 4 éléments aléatoires

Je dispose d'une liste de formules pour combiner des éléments :

A + B + C = X
D + E + F = Y
G + H + I = Z

Je veux m'assurer qu'à partir de 4 éléments pris au hasard, il n'y aura jamais plus d'une formule applicable. Par exemple, les formules ci-dessous ne devraient pas être autorisées car si j'obtiens les éléments A, B, C et D, les deux sont applicables :

A + B + C = X
B + C + D = Y

Chaque formule sera composée de 3 éléments sur la LHS et c'est sur la LHS que je veux appliquer la règle. Les éléments peuvent être triés, si cela peut aider.


Un problème alternatif et équivalent :

J'ai une liste d'un tableau de 3 éléments : List<Element[3]> Comment puis-je m'assurer qu'aucun élément n'apparaît dans plus d'un tableau ?


Quel serait un moyen raisonnablement efficace (vitesse d'exécution) d'effectuer cette opération pour un grand nombre d'éléments et un grand nombre de formules (au-delà de la force brute) ?

-1voto

Nicolas Garnil Points 2958

Stockez vos valeurs dans une matrice et assurez-vous que matrice[i][j] != matrice[k][j] avec i != k.

Mise à jour :

Cette approche est souvent utilisée pour résoudre des problèmes d'équations linéaires. Les éléments de la matrice représentent les coefficients des fonctions polynomiales. Vous pouvez ensuite opérer entre les lignes pour donner à la matrice des formes spéciales.

Mais dans ce cas, il vous suffit de stocker vos éléments dans une matrice et de valider la matrice avant d'ajouter une ligne (une combinaison d'éléments).

Cette approche a l'avantage d'être la plus efficace, mais vous devrez gérer correctement la taille initiale et la stratégie de redimensionnement.

Mise à jour 2 :

A + B + C = X
B + C + D = Y

m[0][1] = B
m[1][0] = B

Cet exemple enfreint la règle matrix[i][j] != matrix[k][j] avec i != k

Vous ne pouvez donc pas utiliser les formules B + C + D = Y à cause de A + B + C = X.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X