|
|
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
Есть большое дерево элементов. Известно что некоторые ветки этого дерева могут быть друг на друга очень похожи. Разница между двумя ветками например может для примера заключаться всего лишь в одной маленькой подветочке "где-то там в глубине". Есть ли какаято мат часть как такое дело лучше всего сжимать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2009, 20:18:26 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
Если это дерево при сериализации всегда упорядочивать по значениям и иерархии узлов и устранить зависимость сериализованного значения узла от положения в тексте, то любой lz- или lzw-based алгоритм сжатия будет показывать хорошие результаты. Например, вот такое дерево: {a 5 {b 2 {c 1 {d 0}} {{c 1 {d 0}}}} {b 2 {c 1 {d 0}} {{c 1 {d 0}}}} {b 2 {c 1 {d 0}} {{c 1 {d 0}}}} {b 2 {c 1 {d 0}} {{c 1 {d 0}}}} {b 2 {c 1 {d 0}} {{c 1 {e 0}}}}} , очевидно, неплохо сожмется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2009, 21:51:57 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
PC_2Есть большое дерево элементов. Известно что некоторые ветки этого дерева могут быть друг на друга очень похожи. Разница между двумя ветками например может для примера заключаться всего лишь в одной маленькой подветочке "где-то там в глубине". Есть ли какаято мат часть как такое дело лучше всего сжимать ? Если архивирование ставит своей целью уменьшить размер - то можно просто сериализовать дерево обходом в глубину и к полученному дампу применить классический LZW. Если ты хочешь получить какие-то дополнительные бонусы вроде возможности работать со сжатыми узлами дерева в онлайне, то надо подумать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 00:41:53 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
бонусы бонусы ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 01:00:22 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
PC_2Разница между двумя ветками например может для примера заключаться всего лишь в одной маленькой подветочке "где-то там в глубине". Можешь привести пример? Желательно на реальных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 01:20:04 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
PC_2, Выгрузить каждую ветку в текстовый файл и пройтись DIFF'ом. Одну взять за базу, а остальные хранить как дельту от базовой ветки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 01:33:11 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
Пример $ cat branch-a.txt [src Ветка А] ДОБАВИТЬ УЗЕЛ А НАЧАТЬ ВЕТКУ ДОБАВИТЬ УЗЕЛ А ДОБАВИТЬ УЗЕЛ Б ЗАКРЫТЬ ВЕТКУ ДОБАВИТЬ УЗЕЛ Б ДОБАВИТЬ УЗЕЛ В ДОБАВИТЬ УЗЕЛ Д [/src] $ cat branch-b.txt [src Ветка Б] ДОБАВИТЬ УЗЕЛ А НАЧАТЬ ВЕТКУ ДОБАВИТЬ УЗЕЛ А ДОБАВИТЬ УЗЕЛ Ё ЗАКРЫТЬ ВЕТКУ ДОБАВИТЬ УЗЕЛ Б ДОБАВИТЬ УЗЕЛ В ДОБАВИТЬ УЗЕЛ Д [/src] $ diff -e branch-a.txt branch-b.txt 5c ДОБАВИТЬ УЗЕЛ Ё . 1c [src Ветка Б] . $ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 01:42:09 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
что-то я даже в замешательстве. Взял XML в 48 мегабайт сжал его ВинРаром и получил после сжатия 1.1 мегабайта ... интересно что там за алгоритм, что жмет почти в 50 раз. Ведь там в каждой строчке например есть порядковый номер, 250 000 чисел, по 4-6 байт на каждое число получается метр, а ведь там в строчках еще куча разной информации ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 02:11:03 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
Rar использует lzss (скользящее окно переменнго размера, управляется ключом -mX) и какую-то оригинальную схему оптимального кодирования его выхода. Скорее всего, адаптивного Хаффмана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 02:19:37 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
PC_2что-то я даже в замешательстве. Взял XML в 48 мегабайт сжал его ВинРаром и получил после сжатия 1.1 мегабайта ... интересно что там за алгоритм, что жмет почти в 50 раз. Ведь там в каждой строчке например есть порядковый номер, 250 000 чисел, по 4-6 байт на каждое число получается метр, а ведь там в строчках еще куча разной информации ... это хмл такое, гм, такая хорошая вещь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 04:02:27 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
Вот! А если похожие ветки не выгружать целиком, а выгружать только дельту между ними, то размер ещё меньше будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 14:32:28 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
Алгоритм lzw занимается именно этим :) Алгоритм lzss занимается этим по большей части :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 14:38:02 |
|
||
|
Алгоритм архивирования древоподобных данных
|
|||
|---|---|---|---|
|
#18+
PC_2интересно что там за алгоритм, что жмет почти в 50 раз. Ведь там в каждой строчке например есть порядковый номер, 250 000 чисел, по 4-6 байт на каждое число получается метр, а ведь там в строчках еще куча разной информации ... Зависит от сжимаемых данных. Для текста и в 500 раз будет не предел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2009, 22:00:36 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35954358&tid=1344514]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
428ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 756ms |

| 0 / 0 |
