Алгоритм сжатия/разжатия...

[slon]

Guest
Алгоритм сжатия/разжатия...

Столкнулся с такой проблемой:

существует некая система по контролю за backup`ами - backup manager. Он отслеживает кто, когда, откуда, куда и как часто должна производится архивация данных.

При создании backup`a на CD этот самый manager генерирует некий Serial Number вида: id backup + source storegae ip + source id + user id + backup date .

Получается цифровое значение достаточно внушительной длинны. Вопрос в том как можно этот самый уникальный serial number "сжать" (заархивировать...) до более маленько значения, но чтобы потом можнобыло проделать и обратную процедуру???

меня больше интересует алгоритм такого действия, чем конкретный код, но если вдруг ктонить делал чтонить похожее буду признателен...

P.S. естественно речь идет о PHP
 

su1d

Старожил PHPClubа
похоже, что у тебя там только циферки да минусики (т.е. не полный набор символов)..
посмотри на алг-м Шеннона (Shennon? поправьте меня, если ошибаюсь).. по-моему он как раз для такого пройдёт..
 

rsn

Guest
Если я правильн понял, то Serial Number состоит из одних цифр (может еще из точек).
То есть вместо 256 символов ты используешь 10(11, можно до 16 для нижеприведенного алгоритма) .
Из 8 бит утебя зря пропадают 4. Используй битовые операции чтобы хранить две цифры в одном байте, и ты сожмешь Serial number вдвое.
 

rsn

Guest
Да я в курсе, поэтому на авторство не претендую:)
 

rudik

Developer
А есть ссылочки на тему сжатия данных?
Если не тяжело закиньте.
 

Kuzya

Guest
Можно попробовать систему исчисления с основанием 26 или больше. ZZZZZ(26) = 308915775(10)
 

rudik

Developer
Все это понятно, читал алгоритм Шенона ну допустим у меня получились значения буквы A 10, B 101, C 1010. А вот как их дальше сохранять? Ведь к примеру получится последовательность 10 101 1010, а ее можно прочитать по-разному как ABC или как ABAA.

Суть вопроса заключается в том как сохранять эти данные?
Может там еще генерируется специальный символ-разделитель или как?
 

Barlone

Guest
Автор оригинала: rudik
Все это понятно, читал алгоритм Шенона ну допустим у меня получились значения буквы A 10, B 101, C 1010. А вот как их дальше сохранять? Ведь к примеру получится последовательность 10 101 1010, а ее можно прочитать по-разному как ABC или как ABAA.
Плохо читал. Таких значений не получится. Может получиться например A 10; B 110; C 1110. Сжатые данные могут быть интерпретированы однозначно и никаких специальных разделителей не требуется. Читай описание алгоритма еще раз внимательней.
 
Сверху