2 개의 (양의) 정수를 하나의 새로운 정수로 매핑하는 함수를 찾고 있는데, 원래의 조합으로 되돌릴 수 있습니다. 이전에 질문이 제기되었습니다 (예 : Mapping two integers to one, in a unique and deterministic way). 차이점은 정수 중 하나가 매우 작은 상한에 바인딩된다는 것입니다 (예 : 50). 다른 정수는 언 바운드입니다.2 개의 정수를 하나에 매핑하기 (상한으로)
내가 해결하려고하는 것은 숫자 1 - 최대 int (하지만 주로 < 10.000.000)와 1-50 배열을 가지고 있다는 것입니다.
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)
는 지금은 각 번호가 원래의 배열에 가역 단일 새로운 배열, 이러한 N 배열을 결합하여 하나의 새로운 배열을 만들려고합니다. 그래서 배열을 가리키는 하나의 숫자와 배열의 실제 숫자를 나타내는 쌍을 만드는 것에 대해 생각했습니다.
Cantor Pairing Function과 같은 기본 기능을 사용하면 매우 빠른 숫자를 얻을 수 있으며 그 숫자를 가능한 작게 유지하려고합니다. 가장 큰 부분이 Int32 대신 Long에 적합하면 좋을 것입니다. 내 쌍의 숫자 중 하나가 50에 묶여 있기 때문에 가능해야한다고 생각하지만 방법을 알 수는 없습니다.
int가 한정되어 있기 때문에 양쪽 모두가 한정되어있을 때만 명확하게 처리 할 수 있습니다. – harold
* "BigInteger"보다 큽니다. (https://msdn.microsoft.com) /en-us/library/system.numerics.biginteger(v=vs.110).aspx)? – Sinatr
예를 들어, 한 부분이 1 - max int가되면, 여분의 비트 1 개만 채울 수 있습니다. – harold