1 votos

Funciones de emparejamiento eficaces

La función estándar de emparejamiento de Cantor $J:\Bbb N \times \Bbb N \to \Bbb N$ que enumera los antidiagonales es eficiente en el sentido de que asigna $(m,n)$ en orden creciente por $m+n$ (de modo que esto puede ser visto como la "métrica de complejidad" que es minimizada por esta función de emparejamiento). Pero funciona muy mal cuando una entrada es mucho mayor que la otra; por ejemplo $J(0,n)=O(n^2)$ lo que significa que utilizar la función de emparejamiento de forma desequilibrada para tuplas superiores, es decir $J(x_1, J(x_2,\dots, J(x_{n-1},x_n)))$ conduce a un crecimiento exponencial $O(k^{2n})$ cuando $x_n=k$ y los otros se fijan en, digamos, $0$ .

El análisis de la entropía de la información sugiere que para almacenar dos números $m,n$ debería requerir aproximadamente $\log_2 m+\log_2n$ bits para almacenar, y una función de emparejamiento con esta propiedad mostraría un crecimiento lineal, no exponencial, en situaciones de emparejamiento desequilibrado.

¿Existe una función de emparejamiento tal que $\ell(J(m,n))\le\ell(m)+\ell(n)+O(\log\log(m+n))$ donde $\ell(x)=\lfloor\log_2x\rfloor+1\approx \log_2 x$ ? (No es necesario que sea biyectiva, sólo inyectiva, si eso lo hace más fácil.) Una estrategia de codificación es leer $\bar m,\bar n\in\{0,1\}^*$ como cadenas binarias, y luego formar la expresión $\bar m\,\$ \,\bar n $ as a string in the alphabet $ \{0,1, \$\}$ y codificar en ternario. Pero esto produce $\ell(J(m,n))=\log_23(\ell(m)+\ell(n)+1)$ que está desfasado por un factor $\log_23$ de lo óptimo.

(Puntos extra si puedes dar una función de emparejamiento óptima que utilice sólo operaciones algebraicas estándar sin recurrir a trucos de bits como éste).

1voto

JiminyCricket Puntos 143

Codificar el número $k=\ell(m)$ de bits en $m$ como sigue: Codificar un bit de $k$ y, a continuación, un bit para indicar si hay más; en caso afirmativo, dos bits más de $k$ y, a continuación, uno para indicar si hay más; en caso afirmativo, cuatro bits más de $k$ etc., utilizando $O(\ell(k))$ y así $O(\log\log m)$ bits; a continuación, añada $m$ y $n$ .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X