Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > как сжать данный вектор


Автор: sstudent 21.5.2007, 09:37
Здравствуйте! 
Есть битовый вектор, соотношение 1 к 0 примерно 200 к 1.
Очень жду помощи!

Автор: Sartorius 21.5.2007, 09:59
Могу предложить такой компрессор:
 0xxxx - в сжатой последовательности xxx нулей подряд
 1xxxx- соответственно тоже для 1-ц

т.е 111111111111111 00000000 1 -> 1111001000 10001

ЗЫ поиграй с размером длинны блока, что бы добиться нормальной степени сжатия

Автор: maxim1000 21.5.2007, 12:15
Цитата(Sartorius @  21.5.2007,  09:59 Найти цитируемый пост)
0xxxx - в сжатой последовательности xxx нулей подряд

думаю, в данном случае можно для нулей такого не делать - просто 0 - 0, а 1xxx - серия единиц

P.S.
ещё можно рассмотреть вариант арифметического кодирования...

Автор: asdasd 15.6.2007, 07:47
можно ли сжать вектор из 200 симвалов, в которым не один симвал не павторяется

Автор: esperant0 15.6.2007, 08:15
Цитата(asdasd @ 15.6.2007,  07:47)
можно ли сжать вектор из 200 симвалов, в которым не один симвал не павторяется

Любой вектор или какой нибудь?


Любой нельзя. 

А определенный  можно в один бит уложить

Автор: asdasd 15.6.2007, 08:21
Любой вектор 

Автор: Sartorius 15.6.2007, 11:19
можно

Автор: esperant0 15.6.2007, 19:22
Цитата(Sartorius @ 15.6.2007,  11:19)
можно

любой вектор нельзя сжать.

Автор: asdasd 19.6.2007, 08:39
если точнее то это не любой вектор
Цитата

 в которым не один символ не павторяется


Цитата

можно 
 smile 

Цитата

А определенный  можно в один бит уложить

определенный можно в нуль бит уложить, если точно знать что находится в векторе

Автор: codelord 22.6.2007, 15:52
если так 
было : 00000000011100000000011111001100111100000000000111111
стало : 9,3,9,5,2,2,2,4,11,6

Автор: esperant0 22.6.2007, 17:23
Цитата(codelord @ 22.6.2007,  15:52)
если так 
было : 00000000011100000000011111001100111100000000000111111
стало : 9,3,9,5,2,2,2,4,11,6

если так 

было : 00000000011100000000011111001100111100000000000111111



стало 1

Добавлено через 39 секунд
Цитата(asdasd @ 19.6.2007,  08:39)
определенный можно в нуль бит уложить, если точно знать что находится в векторе

в ноль нельзя

Автор: ivashkanet 25.6.2007, 11:14
Цитата(esperant0 @  22.6.2007,  17:23 Найти цитируемый пост)
в ноль нельзя 

А я считаю, так же как и asdasd, что можно и в ноль:
Сжатие целесообразно только для передачи данных. Так вот если вектор заранее известен, то и передавать ничего не надо -- 0 байт.
Но это офтоп.

Автор: esperant0 25.6.2007, 20:59
Цитата(ivashkanet @ 25.6.2007,  11:14)
Цитата(esperant0 @  22.6.2007,  17:23 Найти цитируемый пост)
в ноль нельзя 

А я считаю, так же как и asdasd, что можно и в ноль:
Сжатие целесообразно только для передачи данных. Так вот если вектор заранее известен, то и передавать ничего не надо -- 0 байт.
Но это офтоп.

да. 

Хорошо


Вот тебе два задание


Закодируй передачу 10 заранее известных векторов



Закодирую передачу 30 заранее известных векторов


Разумеется первая и вторая задачи имеют разные решения. 



Автор: ivashkanet 25.6.2007, 21:39
Цитата(esperant0 @  25.6.2007,  20:59 Найти цитируемый пост)
Вот тебе два задание

О, класс. А у тебя третьего до кучи нет? Как-то два задания для меня мало  smile 

esperant0, берем твои же слова и твои же задания: 
Цитата(esperant0 @  15.6.2007,  08:15 Найти цитируемый пост)
А определенный  можно в один бит уложить
 
Цитата(esperant0 @  25.6.2007,  20:59 Найти цитируемый пост)
Закодируй передачу 10 заранее известных векторовЗакодирую передачу 30 заранее известных векторов

Скомбинируешь?
Я даже ее напишу:
Есть три (упрощаем задачу) зарание известных вектора. Закодируй их передачу используя только один бит. 


У нас только один, единственный вектор. Вот его мы в ноль бит и кодируем!

Автор: esperant0 25.6.2007, 21:56
Цитата(ivashkanet @ 25.6.2007,  21:39)
Цитата(esperant0 @  25.6.2007,  20:59 Найти цитируемый пост)
Вот тебе два задание

О, класс. А у тебя третьего до кучи нет? Как-то два задания для меня мало  smile 

esperant0, берем твои же слова и твои же задания: 
Цитата(esperant0 @  15.6.2007,  08:15 Найти цитируемый пост)
А определенный  можно в один бит уложить
 
Цитата(esperant0 @  25.6.2007,  20:59 Найти цитируемый пост)
Закодируй передачу 10 заранее известных векторовЗакодирую передачу 30 заранее известных векторов

Скомбинируешь?
Я даже ее напишу:
Есть три (упрощаем задачу) зарание известных вектора. Закодируй их передачу используя только один бит. 


У нас только один, единственный вектор. Вот его мы в ноль бит и кодируем!

А ну понятно теорию кодирования под себя перекраиваете. 


Можно. Но пользоваться ей будуте сами.


И так вы придлажили код.


Я утверждаю что он не консистентный ибо в вашем коде

Нельзя передать сообщение длиной х.


В моем коде можно.


Если хотите спорить то вместо сарказма вооружитесь теорией информацией иначе все будет впустую

Автор: asdasd 26.6.2007, 07:50
Цитата

если так 

было : 00000000011100000000011111001100111100000000000111111

стало 1

и как узнать что 1 не: 00000000011100000000011111001100111100000000001111110,
и не 10000000001100000000011111001100111100000000000111111,
и не 00010000011100000000001111001100111100000000000111111,
а имено  00000000011100000000011111001100111100000000000111111

Автор: ivashkanet 26.6.2007, 08:37
Цитата(esperant0 @  25.6.2007,  21:56 Найти цитируемый пост)
А ну понятно теорию кодирования под себя перекраиваете. 

А, ну понятно, с темы спрыгиваете.
Цитата(esperant0 @  25.6.2007,  21:56 Найти цитируемый пост)
Можно. Но пользоваться ей будуте сами.

ЭТО ЧИСТО ТЕОРЕТИЧЕСКОЕ РАССУЖДЕНИЕ Пользоваться даже я этим не буду. Но это ничего не значит. Ваше утверждение оно опровергает.
Цитата(esperant0 @  25.6.2007,  21:56 Найти цитируемый пост)
Я утверждаю что он не консистентный ибо в вашем коде
Нельзя передать сообщение длиной х.

Можно. Хоть 200Гб. Только вот само слово передача стоит взять в кавычки. Так как в этом случае ничего реально не передается.
Цитата(esperant0 @  25.6.2007,  21:56 Найти цитируемый пост)
В моем коде можно.

Только вот я не понял. Это делается в 10 или 30 строке кода?
Цитата(esperant0 @  25.6.2007,  21:56 Найти цитируемый пост)
Если хотите спорить то вместо сарказма вооружитесь теорией информацией иначе все будет впустую 

А у вас теория информации в каждом посту так и видна.


P.S. Вы так и не решили более легкую задачу, чем вы предоставили мне, хотя утверждали, что она решаема.

Добавлено через 8 минут и 24 секунды
Короче, нужна реальная задача со всеми спецификациями. А то теоретизирования наши ни к чему не приводят.

В любом случае, чтобы информацию можно было стабильно сжать нужна избыточность.
Без нее ничего определенного не получится. Даже отличный алгоритм Sartorius-а даст сбой на таком векторе, например: 01010101010101010101010101010101010101010101.
И вместо компрессии, мы получим увеличения объема данных.


P.S. Хотя он отлично работает для поставленной задачи: 
Цитата(sstudent @  21.5.2007,  09:37 Найти цитируемый пост)
Есть битовый вектор, соотношение 1 к 0 примерно 200 к 1.
 (тут наблюдается избыточность единиц)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)