¿Hay alguna manera de comprimir una cadena en una cadena más pequeña con reversibilidad?

Estoy tratando de transmitir cadenas a través de la red de iridio, y el costo de enviar datos es bastante grande. Me pregunto si hay una manera de comprimir una cadena grande, por ejemplo: {"packet":01,"reporting time":1500, "altitude":6500,"latitude":0,"longitude": 0,"ballast":34,"parachute":0}

en una cadena mucho más pequeña, como: f5fk43d2 . El proceso debe ser reversible, de modo que los datos se puedan decodificar y leer en el otro extremo. ¿Es esto posible? De ser así, ¿cómo haría para hacer esto?

He intentado esta respuesta con jwr: acortar una cadena en Java, sin embargo, parece irreversible. Convierte una cadena grande en una más pequeña.

El proceso debe dar como resultado una cadena más pequeña que la original.

Cualquier ayuda es apreciada!

Respuesta 1

Considere las matemáticas de intentar convertir una cadena de caracteres X en una cadena de caracteres Y, de modo que X> Y (es decir, está tratando de acortar la longitud de la cadena).

Entonces, digamos que la cadena es alfanumérica; esto nos da 26 letras minúsculas posibles, 26 letras mayúsculas posibles y 10 números posibles que podemos usar (es decir, 62 posibilidades). Esto significa que para una cadena de caracteres X, tendríamos 62 ^ X cadenas posibles, y para una cadena de caracteres Y, tendríamos 62 ^ Y cadenas posibles.

Ahora, considere si tratamos de asignar todas nuestras cadenas de caracteres X a nuestras cadenas de caracteres Y. Dejemos que la función f (S) asigne una cadena S (una cadena de caracteres X) a una cadena de caracteres Y. Entonces, debido a que X> Y, necesariamente tendremos que asignar algunas cadenas de caracteres X a algunas de las mismas cadenas de caracteres Y. Considere el siguiente ejemplo sencillo:

X = 3. Y = 2. Entonces, tenemos 62 ^ 3 posibles cadenas de 3 caracteres (238,000) y 62 ^ 2 (3800) posibles cadenas de caracteres Y. Entonces, tenemos 234,000 más cadenas de 3 caracteres que cadenas de 2 caracteres.

Ahora, imagine que intentamos tener alguna función f (S) en la que intentamos convertir cada cadena de 3 caracteres en una cadena de 2 caracteres. Entonces, naturalmente tendríamos un problema cuando intentáramos convertir una cadena de 2 caracteres nuevamente en una cadena de 3 caracteres, porque esto significa que f (S) debe convertir algunas cadenas de 3 caracteres en la misma cadena (por lo que no pudimos ¡No sé a cuál asignar de nuevo!). Esto se debe a que el dominio de las cadenas de 2 caracteres es menor que el dominio de las cadenas de 3 caracteres (y ocurre porque f (S) no puede ser inyectiva, lo que significa que no hay un inverso válido).

Por lo tanto, no hay suficientes cadenas de 2 caracteres para posiblemente volver a asignar a cada cadena de 3 caracteres, y verá que esto se generaliza a todos los X> Y.

Es posible que pueda restringir algunos caracteres del dominio de sus cadenas más grandes, aunque exactamente como ha indicado el problema, esto no es posible.

Editar, porque siento que debería mencionar esto: hay algoritmos utilizados para comprimir cadenas de caracteres menores a cadenas más pequeñas de más caracteres. Dicho esto, recomendaría echar un vistazo a esto: un algoritmo de compresión eficiente para cadenas de texto cortas

Respuesta: 2

¿Podrías ayudarme con una cosa? Imagine que tengo un microservidor RESTful simple con un método GET que simplemente responde con una cadena aleatoria. Reúno todas las cadenas en un ConcurrentHashSet <...

¿Puedo usar una solicitud "PUT" con oauth2? He escrito una aplicación REST API, utilizando Java Servletlet. Cuando uso la solicitud "POST", recibo una respuesta exitosa con access_token. Pero, cuando uso "PUT" ...

Necesito ayuda con la configuración de un proyecto de primavera. Estoy ocupado leyendo el libro "Primavera en acción" y necesito probar algunos de los ejemplos. He mirado muchas páginas y ninguna parte es ...

Estoy haciendo un sistema de reserva de asientos de cine en JavaFX. Estoy usando botones como asientos. Quiero cambiar su color cuando se hace clic, lo que significa asiento seleccionado y revertir su color al color original cuando ...