Рассмотрим математику попыток преобразовать некоторую строку символов X в строку символов Y, так что X> Y (то есть вы пытаетесь сократить длину строки).
Тогда, скажем, строка является буквенно-цифровой;это дает нам 26 возможных строчных букв, 26 возможных заглавных букв и 10 возможных цифр, которые мы можем использовать (то есть 62 варианта).Это означает, что для X-символьной строки у нас будет 62 ^ X возможных строк, а для Y-символьной строки у нас будет 62 ^ Y возможных строк.
Теперь рассмотрим, попробуем ли мы сопоставить все наши строки X-символов с нашими строками Y-символов.Давайте позволим функции f (S) отобразить строку S (X-символьную строку) в Y-символьную строку.Тогда, поскольку X> Y, мы обязательно должны отобразить некоторые строки X-символов на некоторые из тех же строк Y-символов.Рассмотрим следующий простой пример:
X = 3. Y = 2. Тогда у нас есть 62 ^ 3 возможных 3-символьных строки (238 000) и 62 ^ 2 (3800) возможных Y-символьных строк.Затем мы имеем на 234 000 больше трехсимвольных строк, чем двухсимвольных.
Теперь представьте, что мы попытались создать некоторую функцию f (S), в которой мы пытались превратить каждую 3-символьную строку в 2-символьную строку.Тогда у нас, естественно, возникнет проблема, когда мы попытаемся преобразовать 2-символьную строку обратно в 3-символьную строку, потому что это означает, что f (S) должен преобразовать некоторые 3-символьные строки в одну строку (поэтому мы не моглине знаю, на какую карту вернуться!).Это связано с тем, что область 2-символьных строк меньше, чем область 3-символьных строк (и происходит потому, что f (S) не может быть инъективной, т. Е. Нет действительного обратного).
Таким образом, существует2-символьных строк недостаточно для сопоставления с каждой 3-символьной строкой, и вы обнаружите, что это обобщает все X> Y.
Возможно, вы можете ограничить некоторые символы из области вашегобольшие строки, хотя в точности, как вы заявили о проблеме, это невозможно.
Редактировать, потому что я чувствую, что должен упомянуть об этом: существуют алгоритмы, используемые для сжатия строк меньших символов в меньшие строки болееперсонажи.Учитывая сказанное, я бы рекомендовал взглянуть на это: Эффективный алгоритм сжатия коротких текстовых строк