¿Cuál es el mejor algoritmo que toma dos enteros positivos $a,b$ y devuelve un número entero positivo $c$ tal que todos $c$ ' $(a,b)$ se distingue de $(b,a)$ donde el mejor significa que la longitud de $c$ ¿en términos de dígitos es el más corto posible, por término medio?
Esto implica que podemos calcular $a,b$ de $c$ con el mismo algoritmo. (invirtiéndolo)
Si tenemos un límite $x$ tal que $a,b\le x$ alors $f(a,b)$ tiene $x^2$ valores únicos, lo que significa que nuestro $c$ debe tomar valores de $[1,x^2]$ para tener la menor cantidad de dígitos, lo que puede lograrse con la siguiente función:
$$f(a,b)=(a-1)x+b$$
Si $x$ no existe, ¿cuál es entonces el algoritmo óptimo?
(Para que tenga sentido qué algoritmo es el más corto, estaba comparando la longitud del $c$ con la suma de las longitudes de $a,b$ y calculando la media, que es más precisa cuantos más valores consideremos).
Hasta ahora tenía dos ideas;
$(1)$ Factorización
Tome los factores de $a$ y $b$ . Ahora puede utilizar la segunda secuencia más larga de $0$ s como separador entre factores, y la secuencia más larga de $0$ s como separador entre los factores de los dos números.
Por ejemplo: $f(123,1007)=(3\times41 ),( 19\times53)=30410019053$
Por ejemplo: $f(30,1006)=(2\times3\times5),(2\times503)=2003005000200503$
Pero esto puede optimizarse, para casos como $f(2^{64},3^{64})$ e incluso así, parece que son demasiados dígitos extra.
$(2)$ Ceros finales
Toma $a$ , invierte sus dígitos y pon un dígito aleatorio delante del primer dígito. De este modo, el resultado no tendrá ceros al final. A continuación, utilice la secuencia más larga de $0$ s como separador de $b$ .
Ejemplo: $f(123,456)=93210456$
Ejemplo: $f(123,10100)=932100010100$
Ejemplo: $f(420,314)=902400314$
Esto también tiene margen de optimización si analizamos casos concretos y añadimos normas más específicas. Pero parece que ni siquiera entonces será óptimo.
Supongo que la solución óptima pasaría por estudiar un par o más de casos por separado.