Необходим алгоритм сжатия
Создана: 05 Апреля 2011 Втр 11:33:44.
Раздел: "Компьютерная безопасность, коды, доступы и т.д."
Сообщений в теме: 27, просмотров: 10527
-
Есть такая задача: строка символов длиной от 6 до 32 знаков, может состоять из букв a-z, цифр 0-9 и трех знаков -._(тире, нижний подчерк и точка). Необходимо перевести эту строку в числовую, то есть типа 096583932047 и максимально ее сжать по длине, но чтобы потом можно было обратными действиями восстановить начальную строку. Кто нибудь подскажет каким образом это возможно сделать?
-
Мне вспомнился [внешняя ссылка]. Хотя это не совсем сжатие.
-
Сжатие имеет смысл, когда объем информации достаточно большой, по крайней мере гораздо больше, чем алфавит дерева Хаффмана. В остальных случаях используются всякие мнемоники и тупое запоминание. Максимум, что тут можно сделать - перекодировать префиксным кодом каждый символ.
-
-
Можно, если придумать свою кодировку, где каждый символ закодировать числом от 0 до 39 (т.к. в исходном задании 40 символов). Каждый символ будет занимать максимум 6 бит. Если в один байт запихать эти 6 бит и еще 2 от следующего то получим какоето сжатие. А точнее на 25% уменьшится объем информации.
ЗЫ Надеюсь понятно написал:) -
Вроде понятно, но только алфавит состоит не из 40 а из 39 символов. Возникла другая идея. А если строку отображать не только цифрами но еще и знаком * и #. Получается можно разделить комбинацию на группы и сжать сильнее? Вобщем у меня задача следующая. Я на своей АТС хочу сделать звонки с мобильных на Skype. С клавиатуры мобильника невозможно набрать логин скайпа, поэтому необходимо что то типа калькулятора, в который вводишь логин скайпа а он выдает числовую последовательность. Человек дозванивается на номер шлюза и вводит эту последовательность, моя атс ее декодирует и соединяет с нужным абонентом скайпа.
-
Каждому абоненту, звонящему с мобильного, необходимо будет выдать номера абонентов скайпа (которые по сути являются зашифрованными логинами).
Не проще ли составить список абонентов скайпа, которым звонят люди с мобильных и заранее присвоить им какието номера. Например четырехзначные. И раздать их владельцам мобильных. ? -
нет не проще. это получается каждый раз чтобы прописать нового человека люди будут звонить мне, я буду прописывать, выдавать номер и перезапускать АТС (при условии, что я нахожусь у компа). Я хочу чтобы все автоматически работало, пусть даже зашифрованный код будет не меньше 10 цифр. Вобщем я полазил по интернету, походу сжать не получится, поэтому идея не выполнима:(
-
-
taurus_xxl писал(а) : просто перекодировать не подходит, нужно еще сжать ее. Например имеем строку mail.ru. После подстановки по таблице ASCII получаем 109;97;105;108;46;114;117. Это можно как то сжать, чтобы получить минимальное количество цифр?
Алгоритмом Хаффмана. Он как раз дает префиксные коды. -
Groudin писал :taurus_xxl писал(а) ... : просто перекодировать не подходит, нужно еще сжать ее. Например имеем строку mail.ru. После подстановки по таблице ASCII получаем 109;97;105;108;46;114;117. Это можно как то сжать, чтобы получить минимальное количество цифр?
Алгоритмом Хаффмана. Он как раз дает префиксные коды.
Насколько я знаю хаффман требует так же и передачу всего дерева. Как я это в цифрах передам? Или может я вас не так понял. Дайте ссылку на то что вы советуете. -
taurus_xxl писал(а) : Насколько я знаю хаффман требует так же и передачу всего дерева. Как я это в цифрах передам?
полно адаптивных вариантов -
а если просто завести базу данных и пусть чел через сайт вводит логины и смотрит какой ему номер присваивается, а атс уже логины по номеру из базы брать будет?
Еще как вариант - брать короткий хэш от логина, и его уже предавать в виде цифр, не думаю что для логинов будет большое количество коллизий, если вообще будут. (хотя все равно нужно хранить базу обратных преобразований). -
subver писал : а если просто завести базу данных и пусть чел через сайт вводит логины и смотрит какой ему номер присваивается, а атс уже логины по номеру из базы брать будет?
Еще как вариант - брать короткий хэш от логина, и его уже предавать в виде цифр, не думаю что для логинов будет большое количество коллизий, если вообще будут. (хотя все равно нужно хранить базу обратных преобразований).
не хочу открывать наружу доступ. желательно чтобы все работало через тональный набор на телефоне звонящего