![]() |
|
|
![]()
|
|
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: нет Всего: 2 |
Может кто встречался с алгоритмом сжатия дробных чисел? Постановка задачи примерно такая. Нам идёт набор чисел типа float. Нужно уметь писать их в файл и соответственно читать. Причём требования по скорости такие, что читать нужно очень быстро, а писать - ну как придётся. Причём писать нужно каждое пришедшее число. Какие будут идеи?
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
Работать с потоком Float - ов как с потоком бит.
|
|||
|
||||
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: нет Всего: 2 |
Не подойдёт. Нужно уметь писать каждое пришедшее число в независимости от предыдущих чисел. Максимум если только от предыдущего. А на 32 битах особо не развернёшься. Сейчас использую свой алгоритм работы с битиками, но там страшный код. Хочется что-то ещё посмотреть.
Основной акцент должен быть сделан на битовую структуру флота. Нужно учесть, что чаще всего в последовательности встречаются числа 0.15, 0.2, 0,25, то есть в них много нулей в битах Это сообщение отредактировал(а) MastEdm - 15.8.2007, 16:37 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
а вообще, каково вероятностное распределение значений? может, стОит использовать словарный алгоритм для значений, которые встречаются чаще других? например, первый бит значения соотвествует флагу "словарное значение"/"уникальное значение" и если флаг установлен - последующее будет соотвествовать порядковому номеру числа в словаре, а если не установлен, то последующие биты будут соотвествовать числу. кроме того, если числа одного порядка, то стоило бы проводить нормализацию, и тогда можно было бы избавиться от мантиссы... |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
хм... в бинарном представлении будет всё немного хуже при переводе из десятичного. Если нужна скорость - я бы писал напрямую. Без преобразований. 4 байта - не так уж и много. А при архивации скорость чтения будет страдать. Это сообщение отредактировал(а) JackYF - 15.8.2007, 18:45 |
|||
|
||||
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: нет Всего: 2 |
JackYF, напрямую сжирается много времени на чтение / запись.
|
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
MastEdm, а покажи как у тебя ввод-вывод реализован. Может ты там fprintf используешь или вообще потоки...
|
|||
|
||||
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: нет Всего: 2 |
Ввод / вывод open / read для std::fstream
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
таки потоки. Ну раз read, то это не слишком критично. Кстати, а поиграться с буферизацией/антибуферизацией? FILE* там всякие... Если для каждого числа тебе нужно записать 4 байта (всего лишь), а ты хочешь заархивить это (во что? в байт, в два, в три? - ведь тебе же надо, чтобы оно было независимо). Куда уже дальше? Что может быть быстрее, чем прямая запись в файл четырех байт без преобразований? При архивации, имхо, ты потратишь в десятки раз больше процессорного времени, чем при обычной записи. Кстати, а ты уверен, что именно чтение из файла - узкое место в программе? |
|||
|
||||
| MastEdm |
|
|||
![]() Master ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.12.2005 Где: Москва, МГИУ Репутация: нет Всего: 2 |
Решение нашёл, правда не в сжатии. Буду читать не по одному числу, а сразу большим буфером и потом с ним работать.
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |