Il est bien connu que l'identité de Pascal peut être utilisé pour coder une combinaison de k éléments de n en nombre 0-(n \choose k) - 1
(nous allons appeler ce numéro un indice de combinaison ) en utilisant un combinatorial number system. En supposant un temps constant pour les opérations arithmétiques, cet algorithme prend le temps O (n). & dagger;Existe-t-il un meilleur algorithme pour affecter des nombres à des combinaisons?
Je une application où k «n et un algorithme en O (n ) Il est infaisable. Y at-il un algorithme pour attribuer bijective un nombre compris entre 0 et (n \choose k) - 1
à une combinaison de k éléments de n dont l'exécution est d'ordre O (k ) ou similaire? L'algorithme n'a pas besoin de calculer le même mappage que le système de numéro combinatoire, cependant, l'inverse doit être calculable dans une complexité de temps similaire.
& dagger; Plus précisément, l'algorithme calculant la combinaison à partir de l'index de combinaison s'exécute en O (n). Le calcul de l'index de combinaison à partir de la combinaison fonctionne en O (k) si vous précalculez les coefficients binomiaux.
Avez-vous besoin de mapper ceci spécifiquement à un nombre entre la gamme «dense» entre 0 et (n \ choose k) - 1? Si vous pouviez vous détendre à une gamme plus éparse, il serait facile de trouver quelque chose w (n). –
@AmiTavory La carte doit être dense pour mon but. – fuz
Qu'en est-il du pré-traitement? Si c'est OK, quelles seraient les contraintes de temps/d'espace? –