Como han indicado otros carteles, no se puede tener una función que acorte cadenas arbitrarias, eso es matemáticamente imposible. Pero puede crear una función personalizada que funcione bien con su conjunto particular de cadenas.
Un enfoque ejemplo sería para calcular la frecuencia de carácter en el conjunto, a continuación, sólo codificar los caracteres con un prefix code de tal manera que las letras más frecuentes están codificados con prefijos cortos (es decir Huffman coding.)
El enfoque anterior hace no aproveche el hecho de que en lenguaje natural el siguiente carácter puede predecirse con bastante precisión de los anteriores, por lo que puede extender el algoritmo anterior para que, en lugar de codificar los caracteres de forma independiente, codifique el siguiente carácter en un n-gram. Esto, por supuesto, requiere una tabla de compresión más grande que el enfoque simple, ya que efectivamente tiene un código separado dependiendo del prefijo. Por ejemplo, si 'e' es muy frecuente después de 'th', 'e' después de 'th' está codificado con un prefijo muy corto. Si 'e' es muy poco frecuente después de 'ee', entonces puede codificarse con un prefijo muy largo en este caso. El algoritmo de decodificación obviamente necesita ver el prefijo descomprimido actualmente para verificar cómo decodificar el siguiente carácter.
Este enfoque general asume que las frecuencias no cambian, o al menos cambian lentamente. Si su conjunto de datos cambia, tendrá que volver a calcular las estadísticas y volver a codificar las cadenas.
¿Las cadenas deben tener una longitud fija? –
Si tiene una base de datos, entonces el proceso de reversión debería ser bastante fácil ... –
1 - Las cadenas no son de longitud fija. Longitud máxima = 200 caracteres 2 - Deseo evitar la llamada a la base de datos. Esa es la razón por la que quiero generar un algoritmo. Que se puede usar en DB para codificar las cadenas. Se puede usar el mismo algoritmo para decodificar y obtener valor real en mi aplicación web – Taher