Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   компрессия данных (частный случай) (http://www.flasher.ru/forum/showthread.php?t=76102)

Double 26.02.2006 19:48

компрессия данных (частный случай)
 
Дано: ~270К числовых данных с разделителями (числа от 0 до 180 с точностью до 6 знака)
Найти: метод представления данных, при котором вся эта инфа будет меньше весить (без потерь).

Что приходит в голову: myNumber.toString(36) - переводим числа в строки и получаем около 125К данных (предварительно myNumber избавили от точки умножением на 10^6). уже неплохо, но всегда хочется бОльшего.

Просьба1: алгоритмы Хафмана, Лемпеля-Зива-Велча и подобные не предлагать. Хочется оперировать чем-нить банальным, как toString например (потому и раздел для треда выбран про флеш).
Просьба2: высказывать мнения, не обязательно готовые решения.

PS. а может быть больше уже не схитришь?..

Usnul 27.02.2006 00:50

напиши функцию замены стринга и замени "10^" на "e", это тебе сократит размер еще на 30-40%

K.A.T.A.F.A.L.K.E.R 27.02.2006 01:26

Разделяй число на группы по 2 цифры (например, 12214182488 раздели как "12" "21" "14" "18" "24" "88"), гаждую такую группу представляй в виде одного символа - как, например, fromCharCode(12). Склеивай, пересылай :) По идее, сжатие в два раза :D

K.A.T.A.F.A.L.K.E.R 27.02.2006 01:30

Цитата:

Сообщение от Double
Что приходит в голову: myNumber.toString(36) - переводим числа в строки и получаем около 125К данных

Судя по всему, боян вышел... Сжатие в два раза, похоже, уже имеется...

Double 27.02.2006 08:57

Usnul, ну избавление от плавающей точки делаю в программе-генераторе нового формата данных, там экономия не столь важна :)
KATAFALKER, совет дельный, но имеем шанс получить код какого-либо непечатаемого символа, или символа-разделителя, что недопустимо. Сделал проще - взял сотню символов и конвертнул из десятичной в 100-ричную (суть та же, что и в твоём посте, только граблей нет с неприятными символами). 102К и новая проблема - теперь у клиента тормоза с распаковкой (процент сжатия тут для частного случая, можно ведь данные и нулями набить). Похоже надо пробовать пересесть на бинарные операции, но есть слабое подозрение, что они не сильно ускорят просчёт. Кто-нить пытался оптимизировать громоздкие вычисления флешевыми бинарными методами?

И ещё мысль: от точки я неверно избавляюсь! хорошо, если я прессую число 9.999999, но плохо, если у меня 9 (после умножения получаем 9000000 - 6 лишних знаков). надо целую и дробную часть паковать раздельно!

__i 27.02.2006 15:26

ну незнаю в тему или нет, но можеше часть перед запятой прадставлять в виде символа, количество символов которое можно закодировать в 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.


Часовой пояс GMT +4, время: 05:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.