Je cherche une fonction qui mappe deux entiers (positifs) en un seul nouvel entier, qui peut être inversé à la combinaison d'origine. La question a déjà été posée, par exemple Mapping two integers to one, in a unique and deterministic way. La différence est que l'un des entiers est lié à une borne supérieure qui est assez petite, par exemple 50. L'autre entier est non lié. Ce que j'essaie de résoudre est que j'ai et 1-50 tableaux avec des nombres 1 - max int (mais surtout < 10.000.000).Mappage de deux entiers à un (avec une borne supérieure)
array1 {1,2,3,4,5,6,7..N)
array2 {1,2,3,4,5,6,7..N)
array50 {1,2,3,4,5,6,7..N)
Maintenant, je veux créer un nouveau tableau qui combine ces tableaux N à un seul nouveau tableau, où chaque numéro est reversible au tableau d'origine. J'ai donc pensé à créer des paires, un nombre pointant vers le tableau et un vers le nombre réel dans le tableau. Si j'utilise les fonctions par défaut comme Cantor Pairing Function, je reçois des nombres énormes très rapidement, et j'essaie de garder ces nombres aussi petits que possible. Ce serait de préférence si la plus grande partie pouvait simplement contenir un Int32 au lieu d'un long. Je pense que cela devrait être possible parce que l'un des nombres de ma paire est limité à 50, mais je n'arrive pas à comprendre comment.
Cela ne peut clairement être fait que si les deux sont bornés, parce que 'int' est bornée – harold
*" Je reçois des nombres énormes très rapidement "* - plus grand que [' BigInteger'] (https://msdn.microsoft.com /en-us/library/system.numerics.biginteger(v=vs.110).aspx)? – Sinatr
Par exemple, si une partie passe de 1 à max int, alors seulement 1 bit supplémentaire peut être introduit. – harold