| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Кодирование информации |
| Автор: асд1 17.7.2013, 17:36 |
| Здравствуйте. К примеру, у меня есть 3 000 000 цветов, занесенных в текстовый файл. Например, #000000, #023022 и.т.д... (Конечно без решетки) Как мне представить каждый цвет двумя или, самое большее, тремя символами? Чтобы, например, компьютер видел "%1" и понимал, что это #000000? |
| Автор: Mirkes 17.7.2013, 21:28 |
| Вообще-то, множество предусматриваемых вами кодов слабовато. Если взять 256 символов и три знакоместа, получим 16 млн. Вроде хватает, то текст будет содержать всякую лабуду типа "№;%" - это один код, пробел кстати тоже использован. Можно узнать, в чем суть задачи? Если в экономии места, то пишите бинарный файл, как раз три байта на цвет и получится. Причем не придется тратиться на разделители. |
| Автор: _Y_ 18.7.2013, 07:58 |
| Подсчет ИМХО простой. Для записи N вариантов (цветов в вашем случае) M символами полуается, что каждый символ должен нести количество информации равное корню M-ной степени из N (дробный результат округлять к большему). То есть, чтобы закодировать 3 миллиона комбинаций двумя символами нужно, чтобы каждый символ имел 1733 вариантов. Для трех-символьной кодировки надо уже только 145 комбинаций на символ. Поскольку интересует именно двоичное представление, то в первом случае придется использовать по 2 байтa на символ, а во втором по 1 байту (что, собствено и делается обычно). Поскльку двухбайтная запись позволяет записать 65536 вариантов, избыточность здесь уж слишком велика. Поэтому можно, конечно, ограничиться меньшим количеством бит на символ. Достаточно 11 бит (2048 вариантов). Но в этом случае придется писать вестьма комберзонный код записи файла - каждый байт придется обрабатывать по-разному в зависимости от его номера в файле. Поэтому удобрее всего будет 12 битная кодировака (4096 вариантов на символ). В этом случае на экране у Вас будут двусимвольные обозначения, а в файле обычные трехсимвольные. ЗЫ: По-любому значков для разных цветов придется изобретать немеряно (рекомендую китайские иероглифы |