Info Guide
#10
30 апреля 2007 |
|
Inferno - Ошибки в предыдущих номерах.
Info Guide #8: В схеме "цвет на точку" в цепи 7,внизу, пропущен резистор. Вот как должно быть: eff7bit0 ───>├──┐ c30 in (8/D15)─>├─┼─> c30 out (1/D14 only) ▒ │ ┴ GND Ошибку нашёл ZET-9, за что ему большое спасибо. Info Guide #7: Ошибка в описании способа урезания де─ рева до 15 ярусов. Было написано: "Ищем самую длинную длину,которая вооб─ ще есть. Допустим,что такой длине (назовём её N+1 ) соответствует C символов. Это не─ хорошо; эти символы надо опустить на уро─ вень (ярус) ниже (на N-й ) за счёт подня─ тия символов длиной N-1 (поднимаем тоже на N-й уровень).На каждые 2 опущенных символа длиной N+1 (а их число C, козе понятно, чётно) приходится 1 поднятый символ длиной N-1. Это было бы прекрасно,если бы символы длиной N-1 всегда можно было найти. Однако их иногда не хватает (может и вообще не быть), поэтому приходится довольствоваться поднятием символов длиной N-2 (поднимаем на N-1-й уровень):на каждый такой поднятый символ приходится 4 опущенных символа дли─ ны N+1. Если нет N-2, берём N-3 - на каж─ дый такой поднятый приходится 8 опущенных N+1. И так далее.В конце концов,после нес─ кольких операций по опусканию символов ма─ ксимальной длины, длин >15 не остаётся." Однако иногда они всё-таки остаются. Чтобы избежать этого,следует делать не как написано в IG#7, а вот так: 1. Находим N+1 = самый глубокий ярус, имеющийся в дереве. 2. Находим первый непустой ярус X є N-1. 3. Убираем в нём 1 литерал, взамен добавляем 2 литерала на ярусе X+1 (т.е. вместо литерала делаем "разветвление" в ярусе X ). 4. Добавляем 1 литерал на ярусе N, но убираем 2 литерала на ярусе N+1 (т.е. заменяем "разветвление" в ярусе N на литерал). Этот процесс следует производить до тех пор, пока N+1 не станет є 15. Исправлено в ZXRar и mRIP. Info Guide #7: Степень сжатия простого Lazy Evaluation можно улучшить (несколько замедлив) следу─ ющим образом. В IG#7 написано: "Суть стратегии в том,что,найдя ссылку, мы её не сразу вносим в поток, а сперва пробуем посмотреть, что получится, если мы закодируем текущий символ как символ, а ссылку будем искать со следующего байта. Сравнивая две найденные оптимальные ссылки (одна от текущего указателя, другая - от следующего байта), принимаем решение,какая из них выгоднее." Так вот, если оказалось,что вторая ссы─ лка выгоднее, не следует сразу кодировать текущий символ + эту ссылку. Надо символ закодировать, а далее сдвинуть указатель текущего адреса и СНОВА перейти на поиск ссылки с адреса+1. И т.д. Так сделано на─ чиная с ZXRar v0.30, и это дало неплохие результаты. Info Guide #7: Ускорить сжатие повторяющихся байт мож─ но следующим образом (и это тоже сделано в новых версиях ZXRar ): если при поиске от текущей позиции addr найдена ссылка с дли─ ной Є 8 (число подобрано опытным путём),то не делаем поиск от позиции addr+1, т.е. не выполняем Lazy Evaluation. При этом проиг─ рыш по размеру упакованного файла - всего 0.1%. Я пробовал ещё один метод (добавляется в самой процедуре поиска), основанный на проверке смещения на равенство -1. Но пока не удалось его отладить (см. исходник ZXRar ). Info Guide #6: Ошибки в статье про ШИМ рассмотрены в статье "Бипер" (раздел "Музыка" ). Alone Coder
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября