Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > как сжать данный вектор |
Автор: 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 |
думаю, в данном случае можно для нулей такого не делать - просто 0 - 0, а 1xxx - серия единиц P.S. ещё можно рассмотреть вариант арифметического кодирования... |
Автор: asdasd 15.6.2007, 07:47 |
можно ли сжать вектор из 200 симвалов, в которым не один симвал не павторяется |
Автор: esperant0 15.6.2007, 08:15 | ||
Любой вектор или какой нибудь? Любой нельзя. А определенный можно в один бит уложить |
Автор: asdasd 15.6.2007, 08:21 |
Любой вектор |
Автор: Sartorius 15.6.2007, 11:19 |
можно |
Автор: esperant0 15.6.2007, 19:22 | ||
любой вектор нельзя сжать. |
Автор: asdasd 19.6.2007, 08:39 | ||||||
если точнее то это не любой вектор
![]()
определенный можно в нуль бит уложить, если точно знать что находится в векторе |
Автор: codelord 22.6.2007, 15:52 |
если так было : 00000000011100000000011111001100111100000000000111111 стало : 9,3,9,5,2,2,2,4,11,6 |
Автор: esperant0 22.6.2007, 17:23 | ||||
если так было : 00000000011100000000011111001100111100000000000111111 стало 1 Добавлено через 39 секунд
в ноль нельзя |
Автор: ivashkanet 25.6.2007, 11:14 |
А я считаю, так же как и asdasd, что можно и в ноль: Сжатие целесообразно только для передачи данных. Так вот если вектор заранее известен, то и передавать ничего не надо -- 0 байт. Но это офтоп. |
Автор: esperant0 25.6.2007, 20:59 | ||
да. Хорошо Вот тебе два задание Закодируй передачу 10 заранее известных векторов Закодирую передачу 30 заранее известных векторов Разумеется первая и вторая задачи имеют разные решения. |
Автор: esperant0 25.6.2007, 21:56 | ||||
А ну понятно теорию кодирования под себя перекраиваете. Можно. Но пользоваться ей будуте сами. И так вы придлажили код. Я утверждаю что он не консистентный ибо в вашем коде Нельзя передать сообщение длиной х. В моем коде можно. Если хотите спорить то вместо сарказма вооружитесь теорией информацией иначе все будет впустую |
Автор: asdasd 26.6.2007, 07:50 | ||
и как узнать что 1 не: 00000000011100000000011111001100111100000000001111110, и не 10000000001100000000011111001100111100000000000111111, и не 00010000011100000000001111001100111100000000000111111, а имено 00000000011100000000011111001100111100000000000111111 |
Автор: ivashkanet 26.6.2007, 08:37 | ||||
А, ну понятно, с темы спрыгиваете. ЭТО ЧИСТО ТЕОРЕТИЧЕСКОЕ РАССУЖДЕНИЕ Пользоваться даже я этим не буду. Но это ничего не значит. Ваше утверждение оно опровергает.
Можно. Хоть 200Гб. Только вот само слово передача стоит взять в кавычки. Так как в этом случае ничего реально не передается. Только вот я не понял. Это делается в 10 или 30 строке кода?
А у вас теория информации в каждом посту так и видна. P.S. Вы так и не решили более легкую задачу, чем вы предоставили мне, хотя утверждали, что она решаема. Добавлено через 8 минут и 24 секунды Короче, нужна реальная задача со всеми спецификациями. А то теоретизирования наши ни к чему не приводят. В любом случае, чтобы информацию можно было стабильно сжать нужна избыточность. Без нее ничего определенного не получится. Даже отличный алгоритм Sartorius-а даст сбой на таком векторе, например: 01010101010101010101010101010101010101010101. И вместо компрессии, мы получим увеличения объема данных. P.S. Хотя он отлично работает для поставленной задачи: (тут наблюдается избыточность единиц) |