Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сжатие дробных чисел 
:(
    Опции темы
MastEdm
Дата 14.8.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

Репутация: нет
Всего: 2



Может кто встречался с алгоритмом сжатия дробных чисел? Постановка задачи примерно такая. Нам идёт набор чисел типа float. Нужно уметь писать их в файл и соответственно читать. Причём требования по скорости такие, что читать нужно очень быстро, а писать - ну как придётся. Причём писать нужно каждое пришедшее число. Какие будут идеи?
PM MAIL   Вверх
Sartorius
Дата 14.8.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



 Работать с потоком Float - ов как с потоком бит. smile  Сжимать соответствующими алгоритмами (Шеннон-Фано и т.п.)
PM MAIL ICQ   Вверх
MastEdm
Дата 15.8.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

Репутация: нет
Всего: 2



Не подойдёт. Нужно уметь писать каждое пришедшее число в независимости от предыдущих чисел. Максимум если только от предыдущего. А на 32 битах особо не развернёшься. Сейчас использую свой алгоритм работы с битиками, но там страшный код. Хочется что-то ещё посмотреть.

Основной акцент должен быть сделан на битовую структуру флота. Нужно учесть, что чаще всего в последовательности встречаются числа 0.15, 0.2, 0,25, то есть в них много нулей в битах

Это сообщение отредактировал(а) MastEdm - 15.8.2007, 16:37
PM MAIL   Вверх
skyboy
Дата 15.8.2007, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



Цитата(MastEdm @  15.8.2007,  15:02 Найти цитируемый пост)
то чаще всего в последовательности встречаются числа 0.15, 0.2, 0,25

а вообще, каково вероятностное распределение значений? может, стОит использовать словарный алгоритм для значений, которые встречаются чаще других?
например, первый бит значения соотвествует флагу "словарное значение"/"уникальное значение" и если флаг установлен - последующее будет соотвествовать порядковому номеру числа в словаре, а если не установлен, то последующие биты будут соотвествовать числу.
кроме того, если числа одного порядка, то стоило бы проводить нормализацию, и тогда можно было бы избавиться от мантиссы...
PM MAIL   Вверх
JackYF
Дата 15.8.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(MastEdm @  15.8.2007,  16:02 Найти цитируемый пост)
Нужно учесть, что чаще всего в последовательности встречаются числа 0.15, 0.2, 0,25, то есть в них много нулей в битах

хм... в бинарном представлении будет всё немного хуже при переводе из десятичного.
Если нужна скорость - я бы писал напрямую. Без преобразований. 4 байта - не так уж и много.

А при архивации скорость чтения будет страдать.

Это сообщение отредактировал(а) JackYF - 15.8.2007, 18:45


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MastEdm
Дата 15.8.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

Репутация: нет
Всего: 2



JackYF, напрямую сжирается много времени на чтение / запись. 
PM MAIL   Вверх
Sartorius
Дата 16.8.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



MastEdm, а покажи как у тебя ввод-вывод реализован. Может ты там fprintf используешь или вообще потоки...  smile 
PM MAIL ICQ   Вверх
MastEdm
Дата 16.8.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

Репутация: нет
Всего: 2



Ввод / вывод open / read для std::fstream
PM MAIL   Вверх
JackYF
Дата 16.8.2007, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: нет
Всего: 162



Цитата(Sartorius @  16.8.2007,  13:24 Найти цитируемый пост)
потоки...  smile  

Цитата(MastEdm @  16.8.2007,  14:39 Найти цитируемый пост)
std::fstream 


таки потоки. Ну раз read, то это не слишком критично. Кстати, а поиграться с буферизацией/антибуферизацией? FILE* там всякие...

Если для каждого числа тебе нужно записать 4 байта (всего лишь), а ты хочешь заархивить это (во что? в байт, в два, в три? - ведь тебе же надо, чтобы оно было независимо). Куда уже дальше? Что может быть быстрее, чем прямая запись в файл четырех байт без преобразований?

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

Кстати, а ты уверен, что именно чтение из файла - узкое место в программе?



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
MastEdm
Дата 17.8.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Master
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.12.2005
Где: Москва, МГИУ

Репутация: нет
Всего: 2



Решение нашёл, правда не в сжатии. Буду читать не по одному числу, а сразу большим буфером и потом с ним работать.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.