ПредишенСледващото

@ Майкъл M, наистина не разбирам как да "изкриви" дървото, ако тя е по-сложно, отколкото във вашия пример. И това не е много ясно, което означава "първоначалната дълбочина и" отглеждане не расте, "" и как тази информация да реконструира дървото. Аз бях малко по-мисъл и се изкачи с това как да се пазят цялата информация в 478 байта, независимо от размера на входните данни по-късно пише в отговора си. - dzhioev 27 Дек '13 в 09:03

> 478 байта, независимо от размера на входните данни по-късно пише> в отговор на въпроса си забравяйте да напишете. Нека да ремонтирам всичко архиватор. - uzumaxy 27 Дек '13 в 13:12

Започвайки дълбочина - дълбочината на най-лявата листа. Първата промяна - разликата между дълбочината на втория лист и отляво на защитата на гостите. Wood еднозначно възстановена. Очакваме в стартовата дълбочината - да се остави достатъчно наляво. Добавяне на лист съгласно първия записан символ. Ако продължите да "расте" - си "брат" отива толкова дълбоко - ако не, добавете лист на същото ниво. И т.н. 478. Вероятно сте излезе с някакъв номер с малко маска на всички 256 знака. Вероятно, това е възможно да се играе зелено дърво така. Независимо 478> 2 бита * 255 + 256 байта - Майкъл М 27 Декември '13 в 13:12

Не е задължително спаси едно дърво. Можете просто да се съхранява броячи за всеки герой в началото на файла, както и възстановяване на дървото, за да dekodingom. Esli магазин броячи 8 байта, че ще отнеме 8B * 256 = 2KiB, че не е много.

UPD. Съжалявам, ако 2KiB, той може да се съхранява по-компактно броячи. Например, въведете следния формат за брояча: префикс + брояч. Представката е три-битово цяло число брояч размер в байтове а. примери:

  • Броячът е равен на 0. съхранявана в 000 (3 бита).
  • Schetkik равнява 00111011110 222. съхранявани в (11 бита).
  • Counter равнява на 1024. Не забравяйте в 0100000010000000000 (19 бита).

Т.е. размер на съхраняваните данни на брояч п е равно на CEIL (CEIL (log_2 (п)) / 8) * 8 + 3 бита.

UPD2. Аз дойдох с още един начин, който е, според мен, по-добре от предишната. За да започнете, ще опиша как изпълнението на алгоритъма за построяване на дървото, аз отивам да се използва:

Ако се вгледате внимателно в кода, можем да разберем, че за да се възстанови топология дърво dostatotochno ни в титулярния състав на герои и INSERT_INDEX възли за всяка от стъпките. Ние изчисляваме колко време трябва да е с памет.

За да съхраните оригиналния Първообразът нужда 255 байта (първия / последния знак не могат да се съхраняват и да се получи в процеса на елиминиране).

За отбелязване, че броят на повторения на алгоритъма е фиксиран (255) и по-тото итерация (преброяване от нула) INSERT_INDEX е в интервала [0, 255 - и), така че може по-късно повторения отделят по-малко битове за INSERT_INDEX съхранение. По-конкретно:

Т.е. hraneniya за вмъкване индекси трябва 127 * 8 + 64 * 7 + 32 * 6 + 16 * 5 + 8 * 4 + 4 * 3 + 2 * 2 = 1784 бита = 223 байта.

Общо получаване 255 + 223 = 478 байта, и този брой не зависи от размера на входните данни, за разлика от по-горе описания метод.

Подкрепете проекта - споделете линка, благодаря!