|
|
|||||
Регистрация: Mar 2001
Сообщений: 1,147
|
компрессия данных (частный случай)
Дано: ~270К числовых данных с разделителями (числа от 0 до 180 с точностью до 6 знака)
Найти: метод представления данных, при котором вся эта инфа будет меньше весить (без потерь). Что приходит в голову: myNumber.toString(36) - переводим числа в строки и получаем около 125К данных (предварительно myNumber избавили от точки умножением на 10^6). уже неплохо, но всегда хочется бОльшего. Просьба1: алгоритмы Хафмана, Лемпеля-Зива-Велча и подобные не предлагать. Хочется оперировать чем-нить банальным, как toString например (потому и раздел для треда выбран про флеш). Просьба2: высказывать мнения, не обязательно готовые решения. PS. а может быть больше уже не схитришь?..
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит. |
|
|||||
напиши функцию замены стринга и замени "10^" на "e", это тебе сократит размер еще на 30-40%
__________________
I'm only happy when it rains. Waka Laka |
|
|||||
Разделяй число на группы по 2 цифры (например, 12214182488 раздели как "12" "21" "14" "18" "24" "88"), гаждую такую группу представляй в виде одного символа - как, например, fromCharCode(12). Склеивай, пересылай По идее, сжатие в два раза
__________________
...я люблю людей!.. |
|
|||||
Цитата:
__________________
...я люблю людей!.. |
|
|||||
Регистрация: Mar 2001
Сообщений: 1,147
|
Usnul, ну избавление от плавающей точки делаю в программе-генераторе нового формата данных, там экономия не столь важна
KATAFALKER, совет дельный, но имеем шанс получить код какого-либо непечатаемого символа, или символа-разделителя, что недопустимо. Сделал проще - взял сотню символов и конвертнул из десятичной в 100-ричную (суть та же, что и в твоём посте, только граблей нет с неприятными символами). 102К и новая проблема - теперь у клиента тормоза с распаковкой (процент сжатия тут для частного случая, можно ведь данные и нулями набить). Похоже надо пробовать пересесть на бинарные операции, но есть слабое подозрение, что они не сильно ускорят просчёт. Кто-нить пытался оптимизировать громоздкие вычисления флешевыми бинарными методами? И ещё мысль: от точки я неверно избавляюсь! хорошо, если я прессую число 9.999999, но плохо, если у меня 9 (после умножения получаем 9000000 - 6 лишних знаков). надо целую и дробную часть паковать раздельно!
__________________
Кто говорит, тот не знает. Кто знает, тот не говорит. |
|
|||||
ну незнаю в тему или нет, но можеше часть перед запятой прадставлять в виде символа, количество символов которое можно закодировать в 1 байте = 256, т.е. твои 180 как раз влазят.
Теперь относительно умножения на 10^6 - если у тя все дробные части числа содержат по 6 символов то это нормально а если какаято часть то плохо Смотри как те такой способ (правда гемор %)) ) Целую часть конвертишь как я те сказал вместо числа 123, лепишь символ с его кодом, после него пишешь дробную часть, если она == 6 символам то нормально, если меньше то лепишь в конец строки какой -то разделитель. ща попробую закодировать этим способом строку : 85.99999 , 77.040000, 55.125000, 44.123456 - 33 символа получиться: U999999M04»7125»,123465 - 23 символа вроде %) U - символ с номером 85, M c номером 77 и тд..... » - разделитель, символ с номером 187 типа чтоб номер разделителя был больше 180. Последний раз редактировалось __i; 27.02.2006 в 15:41. |
Часовой пояс GMT +4, время: 00:48. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|