J'essaie de créer une liste de toutes les combinaisons de réponses possibles à un quiz à choix multiples. Il y a 30 questions dans le quiz, avec 4 réponses possibles: [«d'accord», «pas d'accord», «ni l'un ni l'autre», «sauter»]. Le ...

0
RJ Adriaansen 17 mars 2021 à 00:49

1 réponse

Meilleure réponse

Utilisez-vous python2?

Le itertool.product de Python3 ne devrait pas faire exploser votre RAM. Ce devrait être juste un générateur.

Votre code devrait fonctionner tel quel, il fonctionnera cependant pendant un certain temps (et comme d'autres l'ont souligné, "un certain temps" signifie une durée que vous n'aimeriez pas attendre avec la puissance de calcul de votre ordinateur. Si je ne l'ai pas fait " t calculer mal, et si votre ordinateur peut gérer 1 million de combinaisons par seconde, vous avez dû attendre environ 36 mille ans)

In [21]: 4**30 / 10**6 / 60 / 60 / 24 / 365                                                                                         
Out[21]: 36558.901084692

Veuillez exécuter le code suivant avec python 3:

choices = ['agree', 'disagree', 'neither', 'skip']
for i, answer in enumerate(itertools.product(choices, repeat=30)):
    pass
print(i)

Utilisez votre moniteur de processus et vous devriez voir que votre processus ne nécessite pas beaucoup de mémoire, mais juste beaucoup de CPU.

Une solution de force brute consistant à n'avoir que des réponses avec un maximum de 15 valeurs de saut serait d'obtenir toutes les possibilités et de rejeter celles qui en ont plus.

Une autre consisterait à créer d'abord toutes les réponses, qui ne contiennent que ['agree', 'disagree', 'neither'], Ensuite, toutes les réponses avec exactement 1 'skip', avec saut à toutes les positions possibles alors toutes les réponses avec exactement 2 'skip' s, avec des sauts à toutes les positions indiscernables possibles. ...

2
KlausF 16 mars 2021 à 22:37