Je souhaite pré-calculer certaines valeurs pour chaque combinaison dans un ensemble de combinaisons. Par exemple, lors du choix de 3 nombres de 0 à 12 ans, je vais calculer une valeur pour chacun:Calcul du rang d'une combinaison?
>>> for n in choose(range(13), 3):
print n, foo(n)
(0, 1, 2) 78
(0, 1, 3) 4
(0, 1, 4) 64
(0, 1, 5) 33
(0, 1, 6) 20
(0, 1, 7) 64
(0, 1, 8) 13
(0, 1, 9) 24
(0, 1, 10) 85
(0, 1, 11) 13
etc...
Je veux stocker ces valeurs dans un tableau afin que compte tenu de la combinaison, je peux calculer et obtenir son la valeur. Par exemple:
>>> a = [78, 4, 64, 33]
>>> a[magic((0,1,2))]
78
Que serait magic
? Au début, je pensais juste le stocker sous forme de matrice en 3 dimensions de 13 x 13 x 13, donc je peux facilement l'indexer de cette façon. Bien que ce soit correct pour 13 choisir 3, cela aurait beaucoup trop de frais pour quelque chose comme 13 choisir 7.
Je ne veux pas utiliser un dict parce que finalement ce code sera en C, et un tableau serait beaucoup plus efficace de toute façon. MISE À JOUR: J'ai aussi un problème similaire, mais en utilisant des combinaisons avec des répétitions, donc toutes les réponses sur la façon d'obtenir le rang de ceux-ci seraient très appréciées =). MISE À JOUR: Pour être clair, j'essaie de conserver de l'espace. Chacune de ces combinaisons indexe en réalité quelque chose qui prend beaucoup de place, disons 2 kilo-octets. Si je devais utiliser un tableau 13x13x13, ce serait 4 mégaoctets, dont je n'ai besoin que de 572 kilo-octets en utilisant (13 choisir 3).
Dans les permutations, les combinaisons et les partitions, le terme de la littérature est «rank» plutôt que «index». Recherchez "algorithme de combinaison de rang". :) Ceci est une très bonne page: http://home.hccnet.nl/david.dirkse/math/rank/ranking.html –
Quand vous dites "je ne veux pas utiliser un dict" ... le fait-il? signifie que vous ne voulez pas utiliser une table de hachage? –
@belisarius: oui, désolé pour la terminologie python – Claudiu