Форум программистов, компьютерный форум CyberForum.ru

результат сжатия изображения2 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ результат сжатия изображения. http://www.cyberforum.ru/cpp/thread213539.html
Черно-белое квадратное изображение размером 10 x 10 задано матрицей цветов отдельных пикселов. Придумать более компактный способ хранения для данного изображения. Объяснить способ и показать результат сжатия изображения. 20, 20, 20, 20, 20, 20, 25, 25, 30, 30 20, 20, 20, 20, 20, 25, 25, 30, 30, 30 20, 20, 20, 20, 25, 25, 25, 30, 30, 30 20, 20, 20, 25, 25, 25, 30, 30, 30, 30 20, 20, 20, 25,...
C++ Многочлен с комплексными коэффициентами http://s48.***********/i119/1012/ff/3804d42fa8dd.jpg (задание) http://s016.***********/i336/1012/42/abf2fdb51df4.jpg (доп.материал) Вот порешала , но так и не пришла к результату, вот моя программка: исправте или напишите новую программку (на языке С) , буду очень вам благодарна #include <stdio.h> #include <conio.h> #include <iostream.h> #include <iomanip.h> http://www.cyberforum.ru/cpp/thread213521.html
Заполнение динамического массива числами от -50 до 50! C++
Плиз помогите Заполненить динамический массив числами от -50 до 50!буду очень признателен
Написать жадный алгоритм формирования сдачи с 1 рубля минимальным количеством монет при покупки товара ценой X копеек C++
Раньше были монеты достоинством 1, 2, 3, 5, 10, 15, 20 и 50 копеек. Написать жадный алгоритм формирования сдачи с 1 рубля минимальным количеством монет при покупки товара ценой X копеек. X < 100.
C++ Оператор выбора http://www.cyberforum.ru/cpp/thread213418.html
Всем преет!!!! Нужна такая программа которая предоставляла права выбора т.е например: - есть два яблока красное и зеленое - какое вы хотите взять? пользователь выбирает красное - эта инфа сохраняется в массив - после пользователь вводит какого размера он хочет выбрать это яблоко - например в диаметре 5 см, после какой он предпочетает сорт(также сам вводит), вес и т д. После чего вся инфа...
C++ Перебор элементов массива Нужна помощь в переборе элементов массива на нахождение максимального периметра выделить из массива 6 точек, которые содержат максимальный периметр. Вот формула: P += sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)); P += sqrt((X3-X2)*(X3-X2)+(Y3-Y2)*(Y3-Y2)); P += sqrt((X1-X3)*(X1-X3)+(Y1-Y3)*(Y1-Y3)); подробнее

Показать сообщение отдельно
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
17.12.2010, 22:51     результат сжатия изображения2
Можно перекодировать.
В массиве имеются всего три значения. Три значения можно выразить всего в двух битах.
Примем
00 - 20
01 - 25
10 - 30
Максимальное количество повторений -- 22. Это число влезает в пять бит. Итого, для записи повторяющейся последовательности чисел потребуется семь бит. Первые пять бит обозначают количество повторяющихся значений, вторые два бита -- какое конкретно значение повторяется.
Например 00010 00 - два раза число двадцать.
Кодируем в биты. Для удобства чтения расставлены пробелы между количеством и значением.
00010 00 00010 01 00100 10
00010 00 00010 01 00100 10
00001 00 00001 01 00110 10
00010 00 00110 10
00010 00 00110 10
00010 00 10110 10

Результат - 105 бит влезет в 14 байт, что приблизительно 21.8% от исходного.

Добавлено через 1 минуту
При чем тут С++?

Добавлено через 18 минут
Можно лучше.
Поскольку известно, что в массиве числа идут в определенном порядке, можно заменить указанием количества определенных символов. Поскольку максимальное количество символов в строке - 8, каждое значение может быть закодировано в 4 бита.
0010 0010 0100 -- два 20, два 25 и четыре 30.

Получится:
0010 0010 0100
0010 0010 0100
0001 0001 0110
0000 0010 0110
0000 0010 0110
0000 0010 0110
0000 0000 1000
0000 0000 1000
Получили 96 бит = 12 байт = 18.75% от исходного.
От нулей тоже можно избавиться, еще сильнее уменьшив размер.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru