|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrew Ezhguroff 2:5020/400 24 Oct 2001 05:26:11 To : Andrew Aksyonoff Subject : Re: Оптимальный метод хранения дерева Hu ffma n'а [3/3] -------------------------------------------------------------------------------- Привет! "Andrew Aksyonoff" <Andrew.Aksyonoff@p2.f29.n5036.z2.fidonet.org> сообщил(а) нам: > E> А на счет скорости -- так тут все ясно: кодировать быстрее при помощи > E> таблицы, а декодировать -- при помощи дерева. Разве нет? :-) > Ааааааааааааааась? А как тебе такой код (dgetbit возвращает значение 1 бита)? // Структура - узел дерева typedef struct Tree{ struct Tree *Nodes[2]; // Указатели на дочерние узлы int Code; /* <0 - узел (имеет ровно двух потомков); >=0 - лист (потомков не имеет, в Code находится код символа) */ }; int huff_decode(struct Tree *h) { do{ h=h->Nodes[dgetbit()]; }while(h->Code<0); return h->Code; } Тоже самое, но еще короче: int huff_decode(struct Tree *h) { while((h=h->Nodes[dgetbit()])->Code<0); return h->Code; } Если dgetbit сделать inline, то получится очень быстро (с твоей dgetbits фокус может не пройти - inline не любят циклов). С уважением, Андрей. --- ifmail v.2.15dev5 * Origin: COMSTAR Telecommunications (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.algorithms/121689fd7e101.html, оценка из 5, голосов 10
|