Реально ли распаковать ZIP имея менее 30кБ ОЗУ?

From
Vovanius Uryvaeff (2:5020/175.2)
To
Roman =KRoN= Karshiev
Date
2002-11-19T18:28:29Z
Area
RU.ALGORITHMS
From: "Vovanius Uryvaeff" <micro-s@vniiofi.ru>

Tue Nov 19 2002 14:19, Roman =KRoN= Karshiev wrote to All:

 RKK> Сабж. Максимум heep'а - около 30кБ. По классическому алгоритму нужно не
 RKK> менее 40кБ. А ведь ещё и для самой программы что-то ещё надо. Неужто ZIP
 RKK> даже в теории с малой памятью не распаковать?

Разница смотрю невелика. Можно попробовать данные поплотнее утрамбовать.
А какой алгоритм у ZIPа? LZ-Huffman ? Попробуй таблицу поплотнее разместить,
например левую ветвь дерева хафмана храни в следующей ячейке (избывишся от
одного указателя). Используй битовые поля.
Например дерево хафмана следующего вида:
        ^0-->   *
              0/ \1
              /   \
     ^1-->   *     *
           0/ \1 0/ \1
   ^2-->   *   C D   E
         0/ \1
         A   B
Положи в память в виде:
 0   1   2   3   4   6   7   8   9
+---+---+---+---+---+---+---+---+---+
|^7 |^6 |^4 |'A'|'B'|'C'|^9 |'D'|'E'|
+---+---+---+---+---+---+---+---+---+
  \\_/\\_/\\_/  /   /    /\\_/  /
   \   \   \___/   /    /  \___/
    \   \_________/    /
     \________________/
^n - развилка
'A' - лист.
LEFT(x)=x+1;
RIGHT(x)=*x;
А определять - лист это или развилка можно по старшему биту (если ячейки
16-битные)
все равно он использоваться не будет(<32k)

И посильнее программу на подпрограммы порежь.

А что за машинка, если не секрет?

Send Email to vovanius2000<yxo>mail. ru

--- ifmail v.2.15dev5
 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)