Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Избыточность при кодировании состояния. 
:(
    Опции темы
semibug
Дата 30.4.2011, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

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



Имеем 256 коробок, в которых находятся карточки с числами из набора 0..255 (расбросаные по одной в каждую коробку, случайно).
Необходимо сохранить состояние (в какой коробке какая карточка) в меньшем нежели 256 байт объеме информации.



PM   Вверх
Lipetsk
Дата 30.4.2011, 16:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

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



легко в 255 байт!!!
256-ой получается из 255-ти
PM   Вверх
semibug
Дата 30.4.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

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



Хочется ещё меньше, по тому же принципу. т.е. к примеру в первой коробке может быть один из 256 вариантов , во второй коробке уже 255, в следующей 254 и т.д. Соответственно под каждую коробку выделять по байту - излишне.


PM   Вверх
Pavia
Дата 30.4.2011, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



semibug, 
Сжимать можно только те последовательности у которых есть за закономерности. А тут последовательность случайна.

Добавлено через 3 минуты и 50 секунд
А сори не подумал. Есть тут закономерность. Можно построить дерево и закодировать дерево путем обхода дерева. Выбо левой или правой вершины определяет единичка или нолик соответственно получится 256 бит.
PM MAIL   Вверх
_Y_
Дата 30.4.2011, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 8
Всего: 34



Lipetsk, ответ рулит!

Думаю можно сжать еще больше.

Самый простой вариант - любой алгоритм сжатия информации. Наверняка хоть чуть, а сожмет.

Или вот такой странный вариант (на лету придумываю - могу и наврать):

1. Представляем коробки как 256-элементный массив типа байт.
2. Далее начинаем паковать информацию в память. В первые 128 байт памяти загоняем номера коробок, содержащих карточки с номерами от 0 до 127. В каждый байт памяти по номеру коробки. Т.е. потратили Байт*128=1024бита памяти.
3. Убираем из массива коробки, номера которых уже сохранены в памяти. Остается массив из 128 коробок.
4. Т.к. максимальный номер элемента в оставшемся массиве коробок =127, для хранения номеров (после перенумерации) достаточно 7-бит на номер.
5. Записываем еще 64 номера в 7-битном формате, убираем учтенные коробки из массива. Потратили еще 7бит*64=448 бит.
6. Теперь в массиве осталось 64 коробки. 6-бит достаточно.
7. Регистрируем еще 32 коробки в 6-битном формате. Тратим еше 192 бита.
8. Убираем зарегистрированные. Регистриуем 16 коробок в 5-битном формате. Еще 80 бит.
9. Убираем зарегистрированные. Регистриуем 8 коробок в 4-битном формате. Еще 32 бита.
10. Убираем зарегистрированные. Регистриуем 4 коробоки в 3-битном формате. Еще 12 бит.
11. Регистриуем 2 коробоки в 2-битном формате. Еще 4 бита.
12. Регистриуем 1 коробоку в 1-битном формате. Еще 1 бит.
13. Оставшаяся коробка находится там, гду ей указано Lipetsk-ом.
14. Итого потратили 1024+448+192+80+32+12+4+1=1793, коее число бит лекго помещается в 225 байт, да еще и огромный хвост от последнего байта останется.










--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
semibug
Дата 30.4.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 27.3.2009

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



_Y_, cool, выглядит жизнеспособно.
Развивая мысль, пытаюсь определить теоретический предел - для 256 коробок в результате перестановок получаем 256! вариантов (8,578177753×10⁵⁰⁶), если я правильно помню математику.
Такое число укладывается в 211 байт.
Но с какого боку подойти, чтобы преобразовать исходные данные в эти 211 байт идей нет (
PM   Вверх
maxim1000
Дата 30.4.2011, 18:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



да просто посчитать номер перестановки и его закодировать в битах

номер можно посчитать, как число в специфической системе счисления - у которой основание меняется от разряда к разряду

i[0]+255*i[1]+255*254*i[2]+...
i[k] - номер карточки в коробке k, но с учётом пропусков уже использованых карточек

например, если i[0]=5, то i[1] будет соответствовать номеру карточки, если он меньше 5, и отличаться на 1, если он больше 5


--------------------
qqq
PM WWW   Вверх
esperanto
Дата 30.4.2011, 22:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

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



Достаточно пронумеровать в лексикографисеском порядке все разложения и вернуть номер разложения.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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