Nisbi olaraq sadə məlumat sıxlaşdırma metodu fayl üçün "Huffman ağacları" qurmaq və onu sıxlaşdırmaq və sonra açmaq üçün istifadə olunur. Əksər hallarda, binary (ikilik) Huffman ağacları istifadə olunur (yəni, hər düyün ya yarpaqdır, ya da tam iki alt-düyünü var). Lakin, istənilən sayda alt-ağacı olan Huffman ağacları da qurmaq olar (məsələn, üçüncü - tərnər və ümumi halda -lik ağaclar).
müxtəlif simvollardan ibarət fayl üçün Huffman ağacının yarpağı var. Kökdən konkret simvolu təyin edən yarpağa gedən yol onun kodlaşdırmasını müəyyən edir; hər bir addımda (, , ..., N-1 ola bilər) kodlaşdırma simvolu verilir. Tez-tez rast gəlinən simvolları kökə yaxın, az rast gəlinənləri isə kökdən uzaq yerləşdirməklə, arzu edilən sıxlaşdırma əldə edilir. Dəqiq desək, belə ağac yalnız o zaman Huffman ağacıdır ki, kodlaşdırmanın nəticəsində verilmiş faylın kodlaşdırılması üçün minimal sayda -lik simvoldan istifadə edilir.
Bu məsələdə yalnız o ağaclara baxılır ki, hər bir düyün ya daxili düyün, ya da simvol kodlaşdıran yarpaqdır; simvolu kodlaşdırmayan yarpaq yoxdur.
Aşağıdakı şəkildə nümunə üçün üçüncü dərəcəli (tərnər) Huffman ağacı verilib. 'a' və 'e' simvolları tək bir üçüncü dərəcəli simvolla kodlaşdırılır; 's' və 'p' az rast gəlinən simvollar iki üçüncü dərəcəli simvolla kodlaşdırılır; ən az rast gəlinən 'x', 'q' və 'y' simvolları isə hər biri üç üçüncü dərəcəli simvolla kodlaşdırılır.

Əlbəttə ki, biz daha sonra -lik simvollar siyahısını geri açmaq istədikdə, hansı ağacdan istifadə olunduğunu bilməliyik. Bu, bir neçə üsulla mümkündür. Bu məsələdə biz növbəti üsuldan istifadə edirik: verilən simvollar ardıcıllığı əvvəlcədən, faylda leksikoqrafik qaydada başlıqda ardıcıl kodlaşdırılır.
daxil simvollarının sayı, (Huffman ağacının arlığı) və başlıq verilib. Mənbə simvollarının kodlaşdırılmış ardıcıllarını bərpa edin.
Girişdə bir tam ədəd verilir — testlərin sayı. Sonra test üçün hər test ard-arda sətrdə verilir:
Fayldakı müxtəlif simvolların sayı (2 \leq Z \leq 20);
Huffman ağacının dərəcəsi (arılığı) (2 \leq N \leq 10);
Alınan mesajın başlığını verən sətir. Hər bir simvol [0, N-1] aralığında olan rəqəmdir. Bu sətrdə -dən az simvol var.
Qeyd: Nadir də olsa, başlıq bir neçə deşifrə variantı verə bilər (məsələn, başlıq '010011101100' üçün Z = 5, N = 2). Zəmanət verilir ki, hər test üçün dəqiq bir cavab var.
Hər test üçün sətr çap edin, hər biri simvolun artan qaydada (-dan Z-1-ə kimi) deşifrasiyasını göstərir. Format belədir: orijinal->kodlama; burada orijinal [0, Z-1] aralığında onluq ədəddir, kodlama isə bu simvol üçün kodlaşdırma rəqəmləridir (hər rəqəm və ).
Nümunə 1