Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/9152
Full metadata record
DC FieldValueLanguage
dc.contributor.advisorПівень, Олександр Борисович-
dc.contributor.authorШульга, Олександр Володимирович-
dc.date.accessioned2026-03-26T20:28:40Z-
dc.date.available2026-03-26T20:28:40Z-
dc.date.issued2023-12-26-
dc.identifier.urihttps://er.chdtu.edu.ua/handle/ChSTU/9152-
dc.description.abstractАНОТАЦІЯ Шульга Олександр Володимирович, кваліфікаційна робота магістра на тему "Дослідження стиснення інформації без спотворення даних методом Хаффмана для ситуації нехватки пам'яті" . Напрям підготовки 121 "Інженерія програмного забезпечення», ЧДТУ, Черкаси, 2023. В даній кваліфікаційній роботі магістра проводиться дослідження процесу стиснення інформації, способів виконання задачі, необхідних інструментів та засобів, можливостей покращення ефективності процесу, та точності отриманих результатів. Розроблюється система що за допомогою використання програмних агентів, алгоритмів перетворення буде виконувати процес стиснення інформації, застосовуючи метод Хаффмана для зменшення обсягу Інформації в системі, де вона зберігається. Обсяг роботи - 114 сторінок, вона містить 4 розділи , 69 ілюстрацій 5 таблиць, 23 джерела в переліку посилань, 4 додатки . Використані проrрамні засоби - Git, Draw Іо , ІВМ Rational Rosе , Vіsual Studio Code, JSmooth.uk_UA
dc.description.abstractANNOTАTIONS Shulha Olcksandr Volodymyrovych, master's thesis on the topic: "Study of information compression, without data distortion using the Huffman method for а situation of Іоw memory." Field of study 121 "Software Engineering" Cnerkassу State Тechлological University, Cherkasy 2023. In this master's thesis, the process of information compression is investigated, including methods for task execution, necessary tools, and means, possibilities for improving the efficiency of the process, and the accuracy of the obtained results. А system 1s developed that, usшg software agents and transformation algorithms, will perfoпn the information compression process, applying the The Huffman method to reduce the volume of information stored in the system. Тhе scope of the work is 114 pages, including 4 chapters, 69 illustrations, 5 tables, 23 sources іл the bibliography, and 4 appendices. Software tools used: Git, Draw Iо, ІВМ Rational Rose, Visual Studio Code, JSmooth.uk_UA
dc.language.isoukuk_UA
dc.subjectМетод Хаффманаuk_UA
dc.subjectнехватка пам'яті в системах обробки данихuk_UA
dc.subjectоптимізація використання пам'яті,uk_UA
dc.subjectалгоритми стисненняuk_UA
dc.subjectробота з обмеженими обсягами пам'ятіuk_UA
dc.subjectHuffman Methoduk_UA
dc.subjectMemory Shortage in Data Processing Systemsuk_UA
dc.subjectMemory Usage Optimizationuk_UA
dc.subjectCompression Algorithmsuk_UA
dc.subjectWorking with Limited Memory Volumesuk_UA
dc.titleДослідження стиснення інформації без спотворення даних методом ХафФмана для сиn аuії нехватки пам'ятіuk_UA
dc.typeMaster Thesisuk_UA
Appears in Collections:121 Інженерія програмного забезпечення (Інженерія програмного забезпечення)



Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
'l)tTY 232225.02R 111 
МІІ II ТЕІ' ·тво О ' ВІТИ І ІІЛ УКИ УКРЛЇІІИ 
'ІЕРКЛ І:>КИЙ )tЕР)КЛВІ ІИЙ ТЕХІ ІОJІОІ ' ІЧІ ІИЙ УІ ІІВЕРСИТЕТ 
Ф~11<ут,тст і11форм~щіі,і11их тсх1101юrій і систем 
Ксн/ю;~рн 11ро1 ·рам1101·0 :.шбсз11счс111ш ш1том~:пизовш1их систем 
ЛОЯСНІОВАЛЬНА ЗАПИСКА 
до І<валіфікаційно'і роботи 
«магістра» 
освітній ріnень 
на тему: Дослідження стиснення інформації без спотворення даних методом 
Хаффмана для ситуації нехватки пам'яті 
Виконав: студент 2 курсу, групи МПЗ-2204 
Напряму підготовки: 
121 "Інженерія програмного забезпечення" 
(шифр і назва напряму підготовки) 
Студент Шульга О. В. 
(прізвище та ініціали) 
Керівник Півень О. Б. 
(прізвище та ініціали) 
Рецензент Захарова М. В. 
(прізвище та ініціали) 
Черкаси 2023 
1 
Відска новано за допомогою Ca mScanner 
ЧІ.' 1KrtChIOІ\i С 1ЖІШІІІІіі ТСХІІОЛ ОГЇ'ІІІИіі 
ІЮІ\НС 11 оі1\Іс11ущ11111я ІІІІЩ() J '() 11 Uli 1 1 :\J1J,ll()І О 1аКJІ:\ 
Фа~-у!н, n:т ЇІН!Q11:\НЩЇІіІІІІХ П.'ХІІОJ ЮГЇіі і СІІСТСМ 
Knф~·~1ra 11 1щ )І\\ІІЮГо 1абс111с•1с1111я шпт.11п11 ·ю11а1111х с11стсм 
о~вітнііі рінсш, 
(п~•нію 1-11 ЇСП, 121 "І11жс11срія 1щоr-рам1юго 1абс111счс1111я" 
О"·вітня щюrрама Інженерія ПJ10Іl)!\:\ІІЮГ() зnбс1пС'ІСІІІІЯ 
ДЖУЮ 
сдри ПЗАС, професор 
олуб С.В. 
-----2~оку 
ЗАВДАННЯ 
НА КВАЛІФІКАЦІЙНУ РОБОТУ СТУДЕНТУ 
Шульга Олександр Володимирович _____ _______  
(nр1з•11щс. ;,. ,. no бaniro•i) 
І.Тема проеп) (роботи) "Дослідження стиснення інформації без спотворення даних 
методом ХафФмана для сиn аuії нехватки пам'яті " 
Керівник проеh.-ту (роботи) Півень Олександр Борисович доцент, к.ф.-м.н. 
(прізвище, ім'я , по батькові, науковий ступінь, вчене звання) 
Затверджені наказом Черкаського державного технологічного університету вщ 
«Об» жовтня 2023 року № 267 /04 
2. Строк подання СТ)дентом проекту (роботи) ____~ О~б~.~12=-:,.2=-=3~----------
3. Вхідні дані до проекrу (роботи) кодування інформації, метод Хаффмана, VS Code, мова 
шюгра.,f\rвання Ja,,a 
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити) 
Розділ 1.Існvючі методи та засоби розв 'язання поставлених завдань 
Розділ 2.Теоретичні та експериментальні дослідження 
Розділ 3 .Впровадження резvльтатів досліджень у практику проектування програмного 
забезпечення інфорJмаційних систем 
Розділ 4.Розробка та теспвання програмного забезпечення 
5. Перелік графічного матеріалу (з точним зазначенням обов'язкових креслень, плакатів) 
Слайд І - Тема роботи. Слайд 2 - Вступ. Слайд З - Дослідження. Слайд 4 - Архітектурне 
проектування. Слайд 5 - Проектування програмного комплексу. Слайд 6 - Засоби реалізації, 
Слайд 7 - Тестування системи, Слайд 8 - Інтерфейс системи. Слайд 9 - Висновки, Слайд 10 -
Дякvю за увагу. 
Відсканоеа но за допомогою CamScanner 
11 ,,1•,,sншt, 1111111:,щн ,, а ,,,, -ащ, 
1'11 ,;, І:, ·,ак 1:нши 
litJIIC,f/11,'l rAll'I а 
ISH І:АН 
7,)І;J:, а 1т1ш•1і ': ,т11.щ111я ___( М 1и;рсс11я_?Д,2l,1J_,_ _______________  
І<ЛJІІ~Н/1,ЛІ'ІІИЙ ІІJІЛН 
C'f(){1K 
)(1 
11~ 1 1:а (;,:111і1: нроск·,у (рпГJти) /:J.f Y(JH,:tl/J/Я (;/ аІІі І: 
-1/11 IIr,:.1 11., 
І/f)(){;І,П dи/п111) 
І І /останонка 1,ща•,і ()6 ,(1),2()23 JI,1 1 -К.{-JІ¾;, 
2 Піютонка '3анд.ання 13,()9.2()23 р --. 
•ИІU)/'·~'  
3 Погодження 'Шщання 2(),()9.2()23 Ник.r1н;:. 
4 Зашсрджсння 1а,щ,ання 27.()9,2023 Нииrщ;_ 
Оснтша стадJя -
J Підбір матсріалін 04.10.2023 Никон; 
2 Аналі·J шляхін ни рішення поставленої 1адачі J J .J0.2023 Виr..о,~ 
3 Ро1рахунок основних парамс-,рів робо·,и І 8.10.2023 Викон; 
4 Вибір кінце1юrо .варіанту проектного рішення 25. І 0.2023 Викон~ 
5 Оформлення первісної редакції роботи 0J .J J .2023 Викона; 
Закюо•ша с·rадія 
] Узгодження прийнятих nроекп,их рішею, 1 08.11.2023 Викона; 
керівником 
2 Оформлення nояснюват,ної '~а.писки роботи в 15. І J .2023 Виконю 
кінцевій редакції 
з Попередній захист 22.1 J .2023 Викона: 
4 Затвердження роботи 29.11.2023 Викона: 
5 Рецензування роботи 06.12.2023 Виконш 
6 Захист роботи 25.12.2023 Викона~ 
, л 
Студент Шульга О. В. 
~~f/ИС) (і11іціали та г1рі1вищс) 
-
Керівник nроекту(роботи) 'UL:- Півень О. Б. 
. ' . 
(тдпис) (111щ1али та пр1звищс) 
8ідсканова110 за допомогою CamScanner 
ЗМІ< l' 
l l ЕРЕ, l l 1' ) .і \ l О В І 111 Х 11 О З 11 АЧ Е 11 h ............................................... ·. ..... · ··  .. · · ··  (1 
lJC ... 1"~" 11 ........................................................................................................................ 7 
1 1С'НУЮЧ1 ~lЕТОДН ТА ЗАСОІ1ІІ РОЗВ.ИЗАІІІВІ 110 ГАНJ1ЕНІІХ 
J ...\ B ..- \НЬ .................................................................................................................. 9 
l .~ П\.~m.ltORK,1 iU.\{1\ti •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• l 
2 TfOPETHЧHl ТА Е'h:СПЕРІН\ІЕНТАЛЬНl ДОСЛ ІДЖЕННЯ ............. 16 
--1 Тt :'. Op~T\\\.tHЇ ДОС'. .Т ІЩЖt'ННЯ ••••••••••••••••••••••••••••••••••••••••••••••••••••••·•••••••••••·•••••••••• 1 
-·- Еь.-с.пер11~1е,н~1.т1ьні досJ1ідження ••.•.•......•••....••.•..••....•....•.....•...................... - 1 
.3 ВПРОВ.-\ДЖЕННЯ РЕЗУJlЬТАТШ ДОСЛІДЖЕНЬ) ПРА~ТІІК~ 
ПРОЕЬ."ТУВАННЯ ПРОГРАl\ІНОГО ЗАБЕЗПЕЧЕННЯ 
ШФОРl\LЩІЙІІ1LХ CIICTEl\I ......................................................................... 27 
З .1 ~Іоде..1 .юваlІ.ня предметної області .....•..•......•..••.....•......•..•......•.....•............ -
3.1.1 Предметна область моделювання. Nlодель предl\1етної області. 
Словюп;: предметної області .......................................................................... - 7 
3. l ._ Е11ементн моделювання предметної області .......................... ............. 3 О 
3 .1.3 Робоча область моделювання ......................................... ...................... 3 О 
..:,, ·?- ф . 
ор:11.1ування та анЗJІ1з в1u'1or ...................................................................... ..:,, 1 
3.2.1 Формування вимог до програмного забезпечення. Первинні і 
детальні вимоги. Вимоги замовника і розробника. Функціональні та не 
функціональні ВЮІОГИ . ................................. . ....... . ............................... . .......... .:, _ 
..:,,  ·?- ·'-) ф . . .,4 
ор мування вимог за допомогою д~агра~.,ш прецедентш ................... .:, 
3.2.3 Проектування логічної струь..'Тури програмного кш,mлексу .............. Зб 
З .2.3 .1 Діаrршfа класів ................................................................................ З б 
З .2.3 .2 Діаграма пакетів ................................................................ .............. З 9 
З.З.Архітектурне проектування .......................... ............................................. 40 
З .З. І Діаграма компонентів ................................................... ......................... 40 
ЧДТУ 232225.028 ПЗ 
Лист № JIOll.'VMeкra Пі mw Пата 
юб. Шvльrа О.В" 1 ~ f Літ. 
Дослідження стиснення інформації без Лнстів 
1ник Півень О.Б. л.":, І:"!, І НІ н~ 
спотворення даних методом Хаффмана 
для сmуації нехватки пам'яті ФІТІС, 
ІІПD. Півень О.Б. {(,ffJ!( 
Пояснювальна записка Кафедра ПЗАС, МПЗ-2204 
[ПІ . 
В ідскановано за допомогою CamScanner 
3.3.2 Розгортання проfl)а.,шої систе. ш на апаратних засобах. Діагра~1а 
розгортання ............. ... ..... ........ ... .... .. ... ........... ............. .. ....... .. ........... ....... ... ..... 4 2 
З.З.З Моделювання пове.J.інки систе~ш .... .. ........................ ........... .. ........ .... .43 
3 .З .З .1 Діагра.,1а ді~1ьності ..... .. ... ... ...... .. .... .. ..... .. ........ .. .... ........ .. ........ ....... 43 
3.3.3.2 Діагра.,1а послідовності ............. ........... ......... ... .... .. ... ... .... .. .. .. .. .. ..... 47 
З.З.З.З Діагра~ш ко~rунікаuії ..... .. ............................................ ......... ... ..... ... 51 
3.3.3.4 Діагра~1а скінченного авто:чату ..................................................... 55 
4 РОЗРОБКА ТА ТЕСГУВАННЯ ПРОГРА1'1ВОГО ЗАЬЕЗПЕЧЕІllІЯ.61 
4.1 Розробка програ.,mого ко~mлексу ............................................................. 61 
4 • 1•  1 Обrрунтуван.н я вибор'-1 
J з асоо,1_.. в реа.п.· 1заш·1- ........................................... . 61 
4.1.2 Опис структурної ( фун:кuіональної) cxe~rn ... ..... .... .......................... ... 63 
4.1.3 Опис логічної схе~ш систе~rn ................................................................ 66 
4.1.4 Розробка бази даних .... ........................................ ... ......................... ....... 67 
4.1.5 Розробка інтерфейсу користувача ......... ............................ ................... 67 
4.1.6 Опис розробки програ.,ших ко~mонентів ........ .................................... 70 
4.2 Т ещвання систе~rn ..................................................................................... 72 
4.2.1 Модульне ТеСТ)rвання ............ .. ............................... ................ .. .... .......... 73 
4.2.2 Інтеграuійве тестування ............................................. .......................... . 74 
4.2.3 Систе}.ІНе тес-rування .............................................. ..... ... .... ................... 75 
4.2.4 Приmіальне тестування ......................................................................... 80 
4.3.Приклади впровадженого пporpa~rnoro комплексу .... ............................. 80 
висновки ......................................................................................................... 86 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ........................................................ 88 
Додаток А ............................................................................................................... 90 
Додаток Б ................................................................................................................ 92 
Додаток В ............................................................................................................. 102 
Додаток Г .............................................................................................................. 109 
ЧДТУ 232225.028 ПЗ 5 
ст № до~,.·уменrа Пішшс Дата 
Відскановано за допомогою CamScanner 
ЛІІО1 ЛІ(ІЇ 
ІІІ ~ . 1,1 11 О ,с ' tї1НJ1J Н() щ,щ 111 < RІІ'І . , ti ') і 'М tііін 
1 ~- 1~ · " ){рс 1 1і )1'І ' t'ІНІ rtlfCff ІfІІЯ j нії (,є-1 Cfl( 
С ІП . ш 1ії 11схна1 ' lf щ, ' я1і •·. Jf aп ян пі, f( н -~, 121 " f (І 
І1J'('Іl'· 11ю1 о 1аfіс щсчсн11я" 1 Ч JП , ЧсJ к:~ н 20 
U юшііі кн. іфікаuіНнііt rоботі ,ar ~стра нроно нп, я 
проuс у lli нення інформанії спо 0611 виконання· н1 
інструменти та 1асо611 юж ннос1 і покра ruення феюнвн ті пр Ll су r 
точносп отр,~маних rезультатів. 
Розроблю ться система що за допомогою внк рнстання пр гра , rюr , 
аrенпв, алгоритмів перетворення буде виконувати процес стиснення 
інформації застосовуючи метод Хаффмана для зменшення обсягу 
інформації в системі де вона зберігається. 
Обсяг роботи - 114 сторінок, вона містить 4 розділи , 69 ілюстра ці й 5 
таблиць, 23 джерела в переліку посилань, 4 додатки . 
Використані проrрамні засоби - Git, Draw Іо , ІВМ Rational Ro е , Уі ual 
Studio Code, JSmooth. 
Ключові слова 
Метод Хаффмана, нехватка пам'яті в системах обробки аних 
оптим1зац~я використання пам'яті, алгоритми стиснення, робота з 
обмеженими обсягами пам'яті. 
Відсконовано за допомогою CamSconner 
ANNOT А TIONS 
Shulha Olck andr Volodymyrovych, ma tcr' thcsi оп the topic: "Study of 
infont1ation compression ,vithout data distortion u ing the Huffman method for а 
situation of Іо,v memory." Field of study 121 "Software Engineering" Cnerka у 
State Т echлological University, Cherkasy 2023. 
Іп this master's thesis, tbe process of infont1ation compression 1s 
investigated, including methods for task execution, necessary tools and means 
possibilities for improving the efficiency of the process, and the accuracy of the 
obtained results. 
А system 1s developed that, usшg software agents and transformation 
algorithms, will perfoпn the information compression process, applying the 
Huffman method to reduce the volume of infonnation stored in the system. 
Тhе scope of the work is 114 pages, including 4 chapters, 69 illustrations, 5 
tables, 23 sources іл the bibliography, and 4 appendices. 
Software tools used: Git, Draw Іо, ІВМ Rational Rose, Visual Studio Code, 
JSmooth. 
Keywords: Huffman Method, Memory Sbortage in Data Processing 
Systems, Memory Usage Optimization, Compression Algorithms, Working with 
Limited Memory Volumes. 
Відскановано за доnомогою CamScanner 
Ч)(ТУ 232225.028 ПЗ 
IIEPEJIII{ УМОВІІИХ ПОЗНАЧЕНЬ 
ВМ - (ВіІ Мшшgс,-) Мс11сджср біті о; 
l ll•G - К(щср Хаффмана; 
Н rІJ - Дс,ю;~ср Хаффма11а; 
ММ - (Мс11101·у Ma11age1") Менеджер пам'яті; 
CDP - (Сошргеssіоп апd Decoшpression Process) Процес стиснення та 
розстиснення, 
FIO - (File lпput/Output) Введення/виведення файлів; 
UI - (Use,· lnteгface) Інтерфейс користувача; 
СР - (Coinpression Paraшeters) Параметри стиснення; 
ПЗ - Програмне забезпечення; 
U.ML - Uпified Modeliпg Language (Уніфікована Мова Моделювання); 
6 
Відскановано за допомогою CamScanner 
Ч/tТ 3222 .02S І П 
ОСТУП 
Внвчrння то опт11 11 ашя мстоюв стиснення ланих окр · ча 
Хr~фф~,. нового. n.rшшасться актуальною проблемою в сфері оfіробкн 
інфорщщії. 
Аh."'Т)·а~,ьність те~111 полягає у необхідності оптимізації використання 
пам'яті в умовах обмежених ресурсів, шо вкрай актуально у cyt1ac1I0.'-1Y 
інфор~1аuійному середовищі. Зростання обсягів інформації, шо 1беріrапься 
та пере.1ається внмагає розробки методів ефективного стиснення , як1 
забезпечать оптнмальннй баланс між обсягом даних та якістю їхнього 
представ..1ення . Вивчення ефективності методу Хаффмана стає ключови ,1 
аспекто:ч в розвІПК) технологій обробки та оптимізації інформації. 
Зв'язок з науковими програмами, планами, темами: обрана те~а 
дослщження пов 'язана 1з науковою програмою напряму шдrотовки 
'Інженерія програ.,mого забезпечення", оскільки проводиться дослідження, 
прое1'.-тування та створення програмного комплексу для виконання 
поставлеmrх задач. 
:мета дослідження - удосконалення проuесу застосування методу 
Хаффмана в умовах обмеженої пам'яті в різних сферах застосування, таких 
як зберігання даних чи передавання інформаuії. 
Завдання (задача) дослідження - розробка експериментального 
середовища, проведення експериментів, оптимізація методу, порівняння з 
іншими метода.\m стиснення та формушовання рекомендацій для його 
ефекгивного використання в умовах обмеженої пам'яті. Дослідження має на 
меті розширити розуміння та покращити використання методу Хафф,1ана у 
сценаріях, де обмежені ресурси пам'яті, зокрема для досягнення оптимальної 
ефективності стиснення даних. 
Об' ЄІ\.ї дослідження - метод Хаффмана для стиснення інфор,1аuії в 
умовах обмеженої пам'яті. 
7 
Відскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
Предмет дослідження - процес стиснення інформації за допомогою 
методу Хаффмана в умовах нехватки пам'яті. 
Методи досліджень: для досягнення поставленої мети застосовано такі 
методи: аналіз літератури, реалізацію та експериментальне тестування 
алгоритму Хаффмана в умовах обмежених ресурсів пам'яті, визначення 
ефективності та аналіз результатів. 
Наукова новизна отриманих результатів: удосконалено метод 
розв'язання задачі стиснення інформації методом Хаффмана, оптимізованого 
для роботи в умовах обмеженої пам'яті, що може мати практичне значення в 
області оптимізації збереження та передачі інформації. Покращення 
полягають у вдосконалеІП:Іі вибору структур даних та алгоритмів для 
ефективнішої роботи з обмеженими ресурсами пам'яті, а також у розробці 
зручного програмного забезпечення з розширеним переліком функцій 
пов'язаних з кодуванням та декодуванням даних. 
Практичне значення отриманих результатів: полягає в можливості 
застосування розробленого методу стиснення інформації в умовах обмеженої 
пам'яті в різних галузях інформаційних технологій. 
Особистий внесок автора: Розроблено програмне забезпечення 
вирішення задачі оптимізації пам'яті з використанням методів стиснення 
текстової інформації. 
Результати досліджень було оприлюднено: По тем~ магістерської 
випускної роботи були опубліковані тези Шульга О. В. Тези доповіді на 
міжнародній науково-технічній конференції «COМPUTER SCIENCE, 
INFORМATION TECНNOLOGIES AND МANAGEMENT SYSTEMS 
YOUNG SCIENTISTS CONFERENCE» (22.12.2023, м. Івано-Франківськ) на 
тему «Переваги використання методу Хаффмана при стисненні текстових 
даних». 
8 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 І ІЗ 
І ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ JJОЗВ'ЯЗАННЯ ПОСТАВЛЕНИХ 
ЗАВДАНЬ 
Стиснення даних - це процес скорочення об'єму даних шляхш.1 
використання різних алгоритмів чи методів. Основна мета стиснення поnягає 
в економії місця для зберігання даних, зменшенні обсягу передачі даних 
через мережу чи прискоренні обробки даних. Ефективні методи стиснення 
зазвичай використовують певні патерни, алгоритми або моделі, яю 
дозволяють кодувати та зберігати інформацію меншим обсягом, а пот1 ~1 
відновлювати її в оригінальному вигляді. 
1.1 Методи розв'язання задач з стисненням даних 
Характерною особливістю більшості типів даних є їх надлишковість. 
Ступінь надлишковості даних залежить від типу даних. Наприклад, для 
відеоданих ступінь надлишковості в декілька разів більша ніж для графічних 
даних, а ступінь надлишковості графічних даних, у свою чергу, більша за 
ступінь надлишковості текстових даних. Іншим фактором, що впливає на 
ступінь надлишковості є прийнята система кодування. Прикладом систе~1 
кодування можуть бути звичайні мови спілкування, які є ні чим іншим, як 
системами кодування понять та ідей для висловлення думок. Так, 
встановлено, що кодування текстових даних за допомогою засобів 
української мови дає в середньому надлишковість на 20-25% більшу шж 
кодування аналогічних даних засобами англійської мови. 
Для людини надлишковість даних часто пов'язана з якістю інформації, 
оскільки надлишковість, як правило, покращує зрозумілість та сприйняття 
інформації. Однак, коли мова йде про зберігання та передачу інформації 
засобами комп'ютерної техніки, то надлишковість відіграє негативну роль, 
оскільки вона приводить до зростання вартосп зберігання та передачі 
інформації. Особливо актуальною є ця проблема у випадку необхідності 
обробки величезних обсягів інформації при незначних об'ємах носіїв даних. 
у зв'язку з цим постійно виникає проблема позбавлення надлишковості або 
9 
Відскановано за доnомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
стиснення даних. Коли методи стиснення даних застосовуються до готових 
файлів, то часто замість терміну "стиснення даних" вживають термін 
"архівування даних", стиснений варіант даних називають архівом, а 
програмні засоби, що реал1зують методи стиснення називаються 
архіваторами [ 1]. 
Методи розв'язання задач зі стисненням даних можуть бути поділені на 
кілька основних напрямків. Розглянемо кілька ключових методів: 
1 Метод Хаффмана: Це алгоритм без втрат, який використовує 
. . 
префіксні коди для представлення символів. Символам, яю часпше 
зустрічаються, відводиться менше бітового представлення, що дозволяє 
зменшити загальний обсяг даних. 
2 Метод LZ (Lempel-Ziv): Група алгоритмів, що включає LZ77 і LZ78, 
які базуються на безвтратному стисненні. Вони використовують словникові 
методи для заміни повторюваних фрагментів тексту більш короткими 
токенами. 
З Алгоритми RLE (Run-Length Encoding): Ці алгоритми засновані на 
ідеї кодування повторюваних послідовностей. Наприклад, RLE представляє 
послідовності однакових символів як один символ, повторений певну 
. . . 
КІЛЬКІСТЬ разш. 
4 Метод адаптивного стиснення: Використовується для адаптації до 
змін у властивостях вхідних даних. Один із прикладів - алгоритм Buттows­
Wheeler Transform (BWT), який переставляє символи для збільшення 
кількості повторюваних фрагментів. 
5 Метод втратного стиснення: Такі як JPEG для стиснення зображень 
чи МРЗ для аудіо. Ці методи втрачають певну кількість інформації, але 
забезпечують велике стиснення. 
6 Квантування: Використовується в стисненю аудю та зображень. 
Заключається в редукції кількості бітів для представлення сигналу чи 
кольору. 
10 
ВІдскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
7 Лрхіuатори: Оикористовуюп> різні алгорнт~и стиснення д...1 я 
створення arxiniв, 11априкла11., ZIP, RЛR, та інші. 
При вирішс1111і задач стиснення даних можуть виникати різні пробле~fИ , 
яю варто враховувати: 
вибір оптимального методу: Різні методи стиснення підходять для 
різних типів даних та сценаріїв використання. Важливо обрати метод, який 
оптимально вирішує конкретну задачу. 
- втрата якості: У випадку втратного стиснення може виникнути 
проблема з втратою якості даних. Наприклад, стиснення зображень часто 
призводить до втрати деякої роздільної здатності чи деталізації. 
- великі ресурси для стискання/розпакування: Деякі методи 
стиснення можуть вимагати значних обчислювальних ресурсів для операuій 
стискання та розпакування. Це може бути проблемою для обладнання з 
обмеженими ресурсами, таких як мобільні пристрої. 
- адаптивність до тишв даних: Деякі методи можуть бути менш 
ефективними для певних типів даних. Важливо враховувати адаптивюсть 
обраного методу до характеристик конкретних даних. 
- великі витрати часу на стискання: В деяких випадках операuії 
стискання можуть вимагати значних часових витрат, що :може бути 
неприйнятним для додатків, де час є критичним фактором. 
- потреба у стандартизації: У випадку обміну стиснени~u-1 даниl\ш 
між різними системами важливо враховувати стандартизацію, оскільки різні 
програми можуть використовувати різні формати стиснення. 
- уфективність на різних типах даних: Ефективність метод) 
стиснення може варіювати в залежності від конкретних характеристик даних, 
і є важливим обирати метод, який працює ефективно на різних типа,х вмісту. 
- зберігання метаданих: Деякі методи стиснення можуть впливати на 
зберігання метаданих (наприклад, імен файлів або додаткової інформації), що 
l l 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
може бути проблемою, якщо ця інформація є важливою для подальшого 
використання даних. 
Вирішення цих проблем вимагає ретельного аналізу конкретних вимог 
та умов, в яких буде використовуватися стиснення даних. 
Один з перших алгоритмів ефективного кодування інформації був 
запропонований 1952 року Девідом Хаффманом. Ідея алгоритму така: знаючи 
ймовірності появи символів у повідомленні, можна описати процедуру 
побудови кодів змінної довжини, що складаються з цілої кількості бітів. 
Символам з більшою ймовірністю ставляться у відповідність коротші коди. 
Коди Хаффмана володіють властивістю префіксності (т обто жодне кодове 
слово не є префіксом іншого), що дозволяє однозначно їх декодувати [2]. 
Метод Хаффмана - це один з найефективніших алгоритмів без втрат 
стиснення даних. Його головна ідея полягає в тому, щоб кожен символ 
кодувався уюкальним бітовим кодом, причому код для більш часто 
зустрічаючих символів був коротший, а для менш часто зустрічаючих -
довший. Порівняємо метод Хаффмана з іншим методом, таким як метод RLE 
(Run-Length Encoding). RLE використовується для стиснення повторюваних 
послідовностей символів. Наприклад, послідовність "АААААА" може бути 
стиснута до "6А". Ось декілька ключових відмінностей: 
Тип даних: 
- Хаффман: використовується для стиснення будь-якого типу даних, 
але найчастіше для текстової інформації. 
- RLE: ефективний для стиснення даних з багатьма повтореннями 
символів, таких як графіка або зображення. 
Принцип роботи : 
- Хаффман: більш часто зустрічаючі символи кодуються коротшими 
бітовими кодами, забезпечуючи загальне стиснення. 
12 
Відскановано за допомогою CamScanner 
'І)~ТУ 2:\2225 .02 Х І П 
f~ fJ :: ІІИІ<оrи "ІОІІУ< 1/0CJ Іi;tOJІIIO <.: ' J j ІJ(ІІІ'І()r/011а11и Х СИМ ІІО JІ іІІ , І<ОJІУІО'ІИ 
їх як кіл,,кі t:'11, ІІОІІ ' ІОрЇІІ НІ сам t: 11MIIOJI . 
ту11і111, с· , ІіСІ/СІІШJ: 
- Хаффмш,: 1а1ви 1 1 а й ІШJtаС Gim,111c с·, ис11с1111я , осоfіливо ;щя 
текстових щших 'J 11срішюмір11им ро111<щілом симнолін. 
l{L~: сфсктиш,ий тіл1~1<и л.ля 11св11их ·1и11ів да11их може 11а1щ1шти 
хороше СТИСІІСt-ІІІЯ у ОИПЗ/~ках 110/ПОрюваних 1/ОСJJЇJ(ОШІОСТСЙ. 
Алгоритм побудови ;~ерсва Хаффмана мас кіт,ка крокін: 
Створення листків для кожного символу: 
- для кожного ун1каль11ого символу у вихідних даних 
створюються листки з частотами входження цього символу. 
2 Створення проміжних вузлів: 
вибираються два листки (або вузли) з найменшими частотами. 
об'єднуються в новий вузол, який стає дочірнім вузлом для 
обраних листків (або вузлів). 
новий вузол отримує суму їхніх частот. 
З Повторення кроків 2-3 до отримання дерева: 
процес об'єднання триває до тих пір, поки всі листки (або вузли) 
не об'єднаються в один кореневий вузол. 
4 Визначення бітового коду: 
- листки дерева представляють унікальні символи та їхні частоти. 
переходячи від кореня до кожного листка, визначається бітовий 
код для символу. 
- листи, які знаходяться ліворуч, отримують біт О, а ті, що справа -
біт 1. 
Цей процес гарантує, що символи з меншою частотою матимуть більш 
короткі коди, що призводить до оптимального стиснення для часто вживаних 
символів. 
Відскановано за допомогою Ca mScanner 
Рнсунок l.l - Прнклад побудованого дерева Хаффмана 
Викорнстання методу Хаффмана для ст11снення даних має деюлька 
переваг: 
Ефе1'.-тнвність стнснення: 
Метод Хаффмана забезпечує високий рівень стиснення, особливо для 
даних, в яких є нерівномірність у частотах входження символів. Часто 
вживані символи отримують короткі бітові коди , що призводить до високого 
ступеня компресії. 
2 Втрата інформації: 
Метод Хаффмана використовуєся для безвтратного стиснення даних. 
Це означає, що шсля стиснення та розпакування дані зберігають свою 
вихідну точність і не втрачають інформації. 
З Простота імплементації: 
Алгоритм Хаффмана є досить простим для реалізації та розуміння. Він 
має лакоючну структуру, що робить його популярним в аплікаціях з 
обмеженими ресурсами. 
14 
Відскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
4 Л;щ11п-11111іст11: 
М~тод Х11ффмшш можt, бути застосований до різноманітних тишв 
дш1их і сфс~<· 1 ·ив1ю 11рис· 1 ·осtщу1щгис1J до їхньої структури. Це дозволяє 
DИІ<ористову1знти і~о, ·о в рі зних обJІастях, вю1ючаючи текстові, аудіо та відео 
днні. 
5 Можшшіст11 ни1<ориста11ю1 для стиснення потокових даних: 
Метод Хаффмана може бути використаний для стиснення потокових 
даних, таких JІІ< аудіо або відео, де обробка даних відбувається 
неперерв,ю[З]. 
Ці переваги роблять метод Хаффмана популярним в р1зних 
застосунках, в1шючаючи комп'ютерні мережі, сховища даних та інші області, 
де важлива ефективність використання простору або пропускної здатності. 
Метод Хаффмана є ефе1,тивним інструментом для стиснення текстових 
даних, оскільки він забезпечує оптимальне використання бітового простору, 
знижуючи розмір даних без втрати інформації. Цей алгоритм створює 
оптимальні коди для символів з урахуванням їхньої частоти входження, що 
дозволяє зменшити загальний обсяг зберігання даних, що особливо важливо 
при передачі чи зберіганні великих обсягів текстової інформації. 
Звичайні тексти мають значний обсяг даних через використання 
багатьох символів для представлення інформації. Метод Хаффмана є 
ефективним алгоритмом стиснення даних, що дозволяє зменшити розмір 
файлів без втрати інформації. Основна перевага цього методу полягає у 
здатності створювати оптимальні коди для символів на основі їхньої частоти 
входження. Такий підхід дозволяє виділити менше бітового простору для 
частіших символів і більше для рідкісних, що призводить до унікального 
кодування для кожного символу з урахуванням його важливості в тексті. 
Цей алгоритм забезпечує оптимальність кодів, що означає, що вш 
здатен досягти найкращого можливого стиснення для заданої частоти 
символів у тексті. Оптимальність кодування Хаффмана полягає в тому, що 
символи, які зустрічаються частіше, кодуються коротшими бітовими 
15 
В ідскановано за допомогою Ca mSca nner 
ЧДТУ 232225.028 ПЗ 
послідовностями, тоді як менш часті символи мають більші послідовності. Це 
призводить до створення ефективних кодів, які допомагають зменшити 
загальний обсяг зберігання даних. 
Крім того, метод Хаффмана є безвтратним, що означає, що після 
стиснення та подальшого розкодування даних не виникає втрати інформації. 
Це робить його важливим інструментом для архівування, передачі та 
зберігання текстової інформації, забезпечуючи компроміс між ефективністю 
стиснення і збереженням вихідної якості даних. 
Отже, метод Хаффмана, завдяки своїй здатност1 створювати 
оптимальні коди для символів на основі їхньої частоти входження, є 
ефективним і надійним інструментом для стиснення текстових даних, що 
дозволяє економити простір зберігання та полегшує обробку та передачу 
інформації[ 13]. 
1.2 Постановка задачі 
Моя програма матиме на меті зменшення обсягу текстової інформації 
за допомогою методу Хаффмана. Тобто, це означає що система буде 
проводити кодування інформації за допомогою дерева Хаффмана. 
Можливості системи можна описати наступним чином: 
1 Інтерфейс кодування та декодування: Ця програма надає 
можливість вводити текст для кодування або закодований текст для 
декодування. За допомогою кнопок користувач може виконати обрані 
операції. 
2 Кодування тексту: Коли текст вводиться, програма створює дерево 
Huffman для створення кодів для кожного символу у тексті. Кодований текст 
та відповідні Huffman-кoди виводяться на екран. 
З Декодування тексту: При введенні закодованого тексту програма 
використовує Huffman-дepeвo для декодування тексту і виводить його на 
екран. 
4 Завантаження та збереження даних: Користувач може 
завантажувати тексти з файлу та зберігати закодовані дані у файл. 
16 
В ідскановано за допомогою CamScanner 
чnrY 2з2225.02s , г 
=' Ві ·\уа 1t.н11Н інтсрфсііс: І1рогрnма мас графі•~ний інтерфейс 
}l.\1J'1tC' Т)"Hnчa, Щ() спрощ) с взосмолію з нею. 
Отж~. основне завдання цієї програми полягає в створенні алгоритму 
H\ttnшш ля кОд) вання та декодування тексту, а також в реалізацїї 
11mфічноrо інтерфейс) корнстувача для зручного використання цих 
МОЖЛІІ во~rеі'і. 
Внснов1'11 до першого розділу 
Перед розробкою програмного забезпечення був проведений анашз 
наукових досліджень та альтернативних методів стиснення даних. Виявлено, 
що проблема що була виявлена в ході аналізу наукових досліджень та 
альтернативних 1'-1етодів стиснення даних, полягає в обмеженій ефективності 
стиснення для певних типів даних. Деякі методи стиснення можуть бути 
неефеп11вюrми для великих обсягів даних чи файлів з високим рівнем 
випадковості. 
Ця проблема створює труднощі в досягненні оптимальних рішень щодо 
стиснення, особливо для даних, де немає чітко визначених закономірностей 
або є обмежена повторюваність певних елементів. 
Ця проблема також вказує на потребу у вдосконаленні або розробці 
нових методів стиснення, які були б більш універсальними та ефективними 
для широкого спектру даних та обставин. 
м:оя система буде вирішувати проблему зручного та швидкого 
стиснення текстових даних, що було описано в розділі. 
17 
Відс кановано за допомогою CamScanner 
1 f/ПУ .1 2225 .02Н f П 
2 TEOPETl,f 81111 ТЛ ЕКСІ1І(: РИМЕІІТЛJ1f,ІІІ /{ОСJІІ/1,ЖЕННЯ 
2.1 Tro1)c111•1111 дое.11іткс1111и 
Лт~орн ·1 м Хнффмn11а , О/(ІІИМ із нnйсфсктинніrних мстолін 6c1RТpaпror-o 
ст11снс1шя дшшх. Ос1юо11а ідея 11оляrа в тому, щоб присноїти коротший код 
с11м1юлnм , що зустрічаються частіше, і лоnший код тим , які зустрічаються 
рідше. Кожен символ представляється унікальним кодом (бітовою 
послідовністю), коди не перетинаються, що дозволяє однозначно 
розкодувати вихідні дані. 
Алгоритм Хаффмана найбільше вигідний для файлів з нерівномірним 
розподілом символів, де деякі символи зустрічаються частіше за інші. 
Головна перевага полягає в тому, що стиснення є безвтратним, тобто 
можливо повністю відновити оригінальні дані після їх стиснення та 
розкодування. 
Алгоритм вимагає проведення частотного аналізу вихідних даних, щоб 
визначити частоти кожного символу перед побудовою кодового дерева. 
Побудова бінарного дерева Хаффмана потребує впорядкування символів за 
їхніми частотами, що може вимагати додаткових обчислень. 
Алгоритм Хаффмана широко використовується для зберігання та 
передачі даних в комп'ютерних системах, особливо у випадках, коли важлива 
економія простору або пропускної здатності каналу передачі даних. 
Формула для середньої довжини коду в методі Хаффмана: 
L = 1 
І:; 1 Р(хі ) · !(хі ) 
Де: 
• l ( х1 ) - довжина коду для символу Х-і у коду Хаффмана. (2.1) 
Формула Ентропії: 
1 
Н(Х) - - І:; 1 Р(х;) · lug2 P(xi) 
Де: 
• Н(Х)-ентропія випадкової величини Х. 
• Р(х;) - ймовірність виникнення символу Хі . (2.2) 
18 
Відска нова но за допомогою Ca mScanner 
чдТУ 2з222sJ,2& rп 
(2.3) 
W формули виrористовуються для ана.1ізу ефективності стиснення 
методо.~ Хаффмана та порівняння йоrо 1 і ншю,т ме-rода~,ш стиснення. 
JивгмічнІ! пр»:ЕОfНЮІ 
mроппш. &:a;r.E бі."'DШ 
ІІрнщип ро60'ІИ 
'2-l,""J IJ -:.у 1:.рі~1.1~ч.о~ 
СІІМЕ\О;Іа.Ч 
Е(}еППЕИІШ ДіП ІЄХС'ІОВJП 
Це• ІНВНЇ•:ІЬ ;1,анш з нf?ів.нс:мір1JОЮ 
часrо-rою СІ'І!ІІВОШ3. 
Рсr.зроfлеmж ~ 
~еяя. 
eqeкnzнoro виюр11с:21ШL 
просrору 
)бме:женсrо просrору. 
Ос.06~1Ео еф еп:1ВНШЇ дп.и 
Типидаюа 
Т!ЕСТОDП~ 
Часrо з1:1корисtсвуєnся у 
rекс:овнхпроцесо~:ц 
Засrосувавяи 
мере:.щ :єо:мпре-сіі аудіо 
ia відео ф ашrів. 
Рисунок 2.1 - Переваги алгоритму Хаффмана 
Побудова бінарного дерева Хаффмана: 
Частотна таблиця: Ашоритм Хаффмана розпочинається з побудови 
частотної таблиці для символів у вхідних даних. Ця таблиця містить кількість 
входжень кожного символу. 
19 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
Рисунок 2.2 - Початкові дані для побудови дерева Хаффмана 
Створення листків: Для кожного символу створюється листок дерева зі 
значенням частоти цього символу. 
Створення внутрішніх вузлів: Пари листків (або внутрішніх вузлів) 
об'єднуються у новий вузол, який має сумарну частоту своїх дочірніх вузлів. 
Пріоритет черги: Ці кроки виконуються до тих пір, поки не залишиться 
тільки один вузол в черзі з пріоритетом [12]. 
100 101 110 111 
Рисунок 2.3 - Результат роботи алгоритму Хаффмана 
20 
В ідскановано за допомогою Ca mSca nner 
Ч/(ТУ 232225.028 І ІЗ 
Ог,кс, О'Іримана інформ,щія дозволя сформулювати наступну гіпотс~у: 
при правильному використанні методу Хаффмана можна розробити 
ефективне ПЗ мя кодування та декодування текстової інформації поданою 
р11ними мовами. 
2.2 Експериментальні дослідження 
Після визначення загального алгоритму роботи було проведено певну 
кількість експериментальних досліджень, суть яких полягає у проходженні 
повного циклу роботи системи та визначення її ефективності, ефективності 
числових даних, виявлення недоліків та можливих покращень. 
Дослідження роботи програми було проведено в декілька етапів для 
перевірки роботи системи з різними даними та з різним обсягом 
інформації(lО, 50 та 100 символів): 
2.2.1 Перевірка на англійській мові 
Я ввів короткий текст англійською мовою, переконався, що програма 
вірно кодує та декодує його. Потім ввів більший обсяг тексту, щоб 
переконатися, що програма ефективно обробляє його. 
10 символів 
Текст для кодування: "Тhе quick Ь" 
50 символів 
Текст для кодування: "The quick brown fox jumps over the lazy dog. Т" 
1О О символів 
Текст для кодування: "The quick brown fox jumps over the lazy dog. The 
quick brown fox jumps over the lazy dog. Th" 
2.2.2 Перевірка на українській мові 
Після цього я ввів короткий текст українською мовою та переконався, 
що програма коректно кодує та декодує його. Потім спробував більший обсяг 
21 
Відс1<ановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
тексту українською мовою, щоб переконатися, що програма обробляє його 
швидко та ефективно. 
10 символів 
Текст для кодування: "На городі ч" 
50 символів 
Текст для кодування: "На городі чад в'ється, змій тихо смики" 
І ОО символів 
Текст для кодування: "На городі чад в'ється, змій тихо смикне. Це -
речення з різних мов, які змішані. На городі чад в'ється, змій тихо смикне. Це 
- речення з різних мов, які змішані." 
2.2.3 Перевірка на китайській мові 
10 символів 
Текст для кодування: 
50 символів 
Текст для кодування: 
11t:kii Єt-J ~ ism1 m~t~ 7 tп fPJ о ~ • -f~ ,g '61' ~щ ~! і Єt-J -sJ =r о 11 
1О О символів 
Текст для кодування: 
"~ііЄt-J~іsШW.~7~~0~•-~'2!'6"1'1ЩШі~~то~~~ 
~isШ\~~~~7-~tJo ~~-f~'2!-а1'ІЩ~!і Єt-J~то 11 
2.2.4 Перевірка змішаного тексту 
На четвертому етапі я ввів текст, що складався з символів різних мов, 
та переконався, що програма може коректно обробити цей змішаний текст. 
10 символів 
Текст для кодування: 
"Hello, t~•" 
22 
Відскановано за допомогою CamScanner 
'І)~ТУ 2)2225.028 І ІЗ 
SQ СІ1М1'()JІЇВ 
Текст дш1 ко;\)'1ш111н1: 
"t~~~~~Ш~~~іі& 7 M~fiJ O НсІІо, tl1is is п rніх of E11glisl1 and Chincsc 
textl" 
Змішвнип текст, що містить китайс1,кі символи, латинс1,кі букви та 
спеціальний символ. 
1О О символів 
Текст для кодування: "t~iжlY-J~fgIOHШ~t~ 71'ИfP:Jo НеІІо, this is а mix 
of Englisl1 and Cl1i11ese textl Here are sоше special cl1aracters: @#$%л&*" 
Змішаний текст із китайськими символами, латинськими буквами та 
набором спеціальних символів. 
2.2.5 Перевірка спеціальних символів 
Після цього ввів текст з числами, спеціальними символами та 
символами пунктуації. Переконався, що програма коректно стискає та 
декодує текст із спеціальними символами. 
10 символів 
Текст для кодування: "@#$%л&*()" 
50 символів 
Текст для кодування: "!@#$%л&*()_+ -=[]{}І;:',.<>?/" 
1О О символів 
Текст для кодування: 
"!@#$%л&*()_+=[] {}l;:',.<>?/0123456789abcdefghijklmnopqrstuvwxyzAВ 
CDEFGHIJКLМNOPQRSTUVWXYZ" 
2.2.6 Перевірка на великому обсязі тексту 
У останньому етапі ввів великий обсяг тексту( 1О ОО символів). 
Переконався, що програма ефективно працює з великим обсягом даних. 
23 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
t • Huffmon EncodinglDtcodong о х 
orem lpsum dolor sl\ аmеЇ consectetur aOlplscІng еІІІ VІ,a,;;us пес massa а nlDh fatoCIDus ІаСІnІа Cras lempus eral non nШ olulpal ііа~ po~u&re Іоr1о 
k>uls volutpal ptacerat esl ut convaIIIs n1aona Іooon,s Іd l,taecenas ас tellus trlsllQue, ІасІnІа Іе І Іs а , Jnterdum oolor. SuspenoIsse vutputate c,ьendum orcl 
nteger eget rtioncus dul Nunc susclplt аоІоr а\ ve t1t allquel а\ cursus sapten consequat Proln ul tpsum ас 11sus Іnt c raum etf1atur Vestlculum ta oreet v~Іrt 
"'ellentesque habitant n,orь t lrlstique senectus et ne\us et n1alesuada Іa n1es ас turpl s eoes tas. Sed ut magna risus Duls ve l arcu sit am€1Q uam luctuБ 5 0 
lo:u5ce ultnces enlm slt amet estvestibu\un1 volutpat Fusce et ord at magna convallls tnterdum tn поп nlsl Praesent consequat aaplbus nulla а elementur 
vtvamus trlsflque, metus Quls Іeuglattlncldunt, ellt llgula allquam est. Іd moncus eros Justo поп odlo Sed slt amet Іacus ln sem gravtaa Іadnla ,1tae ut nosl 
◄ І І 
Encode 11 Decode І Тіmе: 00:02.581 І Ctear 11 Load File 11 Save Encoded Data І 
Рисунок 2.4 - Приклад проведення експерименту з великою(} ООО) кількістю 
символів. До стиснення 
~ Huff1na11 Е 11с, 111 ,1 ·Deccd11 , ,1 о 
ncoded string: 
011001000110101001110100110101110111101100010001011101011100001110100010110100111011101000111110011100111101010011001011 І 
brtgtnal data siz.e in Ьits : 35216 bils 
Encoded data size in bits: 18714 bits 
◄ І ІІІ І Ї ► 
І Епсоdе 11 Decode І Ті~е: 00:~.5~ І Clear Jl ~о~~іІе \ І Save Encoded Data \ Coп1pressioп : 46,86~, 
Рисунок 2.5 - Приклад проведення експерименту з великою( 1О ОО) кількістю 
символів. Після стиснення 
24 
В ідс+<ановано за допомогою Ca mScanner 
чдn' _322-5.028 ПЗ 
Також шсля проведення код) вання щншх проrраІ'Ш стnорюr фnіін 
huffinan_keys.L"Xt з ключами символів для д~кодування. Цсіі ф11ііл сrворю т1,ся 
в паnш з основною програмою, а танож оновлюсться 11p1t зnмі11і кодооr11юї 
інформації в програмі. 
----
, Пrрrвір~а ва авr.1ійсьJ..:ій ~•ові ДО ІОД'f11'1ННІІ ПІСJІІІ ІІОД'f1ІАННІ 
КЇJ'ІЬІ(jm, ОtМВОJІЇ8 Ч.К BMltOHiHНJI, r обаІr в бІ••• oбatr в бІ••• "сtМ(НІ!ННJІ 
О,о2 ss 37 57,95 
10 
50 0,02 368 208 4),48 
100 0,02 736 415 4},61 
ПерrвJр1..-а ва ~-раівсьІdй ~1овІ 
10 0,02 8S 35 60,23 
50 0,02 304 167 4.5,07 
100 0,02 12SS 723 43,87 
l ne-prвip~a ва RВТайсьІdй ~rові 
10 0,02 104 49 52,S8 
50 0,02 216 126 41,67 
100 0,02 432 252 41,67 
JПrревір..:а з~1:іmавоrо re..:cl)-
10 0,02 п 27 62,5 
50 0,02 496 289 41, 73 
100 0,02 832 506 39,lS 
1 
Пере,вір1,;:а спепіа."ІЬВІП си~1во:1ів 
10 0,02 п 29 59,n 
50 0,02 232 142 3s, -r.з 
і 
' 100 0,02 720 592 17,78 
1 
J Пrpe-вipt.a на ве.1-вко~rу обсязі re..:cl)· 
1000 0,03 35216 18714 46,86 
Рисунок 2.5 - Результати експериментальних досліджень 
Інформацію можна подавати як у вигляді простої копії тексту або ж 
завантажувати файл натиснувши кнопку Load File. Рекомендую обмежитися 
файлами з розширеннями .tл1 та .doc для більш стабільної та шв1-щкої роботи 
програми. 
Після завершення кодування інфорJ\,tадії, результат кодування можна 
зберегти в файл з розширенням .txt. 
25 
Відскановано за допомогою Ca mScanner 
ЧДТУ _32 __ 5,о_ ПЗ 
В11с11овк11 до дp)1roro розділу 
Під час дослідження було проведено повторення повного цнкл) роботи 
програми з різн111'111 текстовнми дан11м11 та різнн~ш обсягамн інфор~1ації. 
Після виконання експериментів було зроблено наступні внсновкн: 
Ступінь стиснення методом Хаффмана може суттєво варіюваn1ся. 
Якщо вхідні дані мають різні частоти входження символів можливий 
високий рівень стиснення. Це стає можливим завдяки присвоєнню коротших 
кодів більш часто вживаним символам. Однак якщо всі символи 
зустрічаються з приблизно однаковою частотою або вхідний потік містить 
обмежений набір символів, ефективність стиснення може буrи меншою. 
Важливо також зазначити, що метод Хаффмана без використання 
додаткових методів компресії, таких як блокові або словникові методи може 
мати обмежені можливості стиснення, особливо для деяких типів даних. У 
випадку спеціальних символів чи великої кількості унікальних символів 
може виникнути збільшення розміру даних після стиснення через додатковий 
оверхед. 
Крім того, метод Хаффмана може втратити ефективність при роботі з 
великими або складними алфавітами. Наприклад, якщо алфавіт великий або 
символи мають нерівні частоти вживання, алгоритм Хаффмана :може стати 
менш ефективним у порівнянні з іншими методами стиснення даних. 
26 
В ідскановано за допомогою ComScanner 
ЧДТУ 232225.028 ПЗ 
3 ВПРОВАДЖЕННЯ РЕЗУЛІ>ТАТІПДОСЛІДЖЕНЬ У ПРАКТИКУ 
ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ 
ІНФОРМАЦІЙНИХ СИСТЕМ 
Основний етап будь-якого процесу проектування інформаційної 
системи полягає у моделюванні предметної області. Цей процес спрямований 
на створення повного та цілісного представлення моделі, яка відображатиме 
всі деталі функціонування майбутньої системи. У даному випадку модель 
предметної області є системою, що імітує структуру та/або функціонування 
предметної області, що досліджується, і є адекватною цій галузі. 
3.1 Моделювання предметної області 
Створення моделі предметної області напередодні дозволяє зекономити 
час у подальших етапах проектування та забезпечити вищу якість у кінці 
процесу. Цей підхід передбачає попередню ідентифікацію та вирішення 
проблем, уникнення помилок, що в подальшому запобігає зайвим витратам і 
потребі у повторному проектуванні. 
Зазвичай для моделей предметних областей встановmоються таю 
вимоги: 
формалізація для чіткого опису структури предметної області. 
зрозумілість, використання графічних елементш для полегшення 
розуміння моделі для замовників та розробників. 
- реалізація, забезпечення фізичної втілення моделі предметної 
області в інформаційній системі. 
- забезпечення оцінки ефективності реалізації модеш на основ~ 
конкретних методів та обчислюваних показників. 
27 
Відскановано за допомогою CamScanner 
; 1 'ІМ H'l'l,J/"111/пu  І'ИХ 
..., .. ' ІІНМО/ ' 'JU'ШИ 1НІЙ'  С'І ІІ<>r')JO(;' J l,CU система MO}\CJJC Й І яка 
OXOIJJJIO ' рі·ті ОСІІСК'/'И фу111щіо11у111111ш111rc1tMC'fffOЇ пблас·,і. 
З. І. І І Ірс1tмt.:т11н обл ас·,,. мо;tсmо1щ1111я. Mo;1cm. нрсдмстно'~' області. 
С,юоник 11рсдмстної області 
Модет, - це спрощений crrociб нрсдсташ,с,шя реат,ьнос·r і ·rобто 
представлення суr<упності об' є1<тів, наш<оJю чи за доrrомоrою яких ми будемо 
будувати нашу майбутню систему. 
Коли ми створюємо концептуальну модель, ми аналізуємо домен в 
цілому, тому не так важливо розділяти поточний і майбутній стани системи 
[І]. 
Сама модель предметної області може бути зображена візуальною 
схемою, прикладами коду або в деяких випадках письмовим описом 
проблеми. Важливо, щоб модель предметної області була доступною та 
зрозумілою кожному, хто бере участь у проекті. 
У більшості випадків модель предметної області ілюструється набором 
діаграм класів, що можуть відображати: об'єкти предметної області або 
концептуальні класи, асоціації між концептуальними класами, атрибути 
концептуальних класів. 
З .1.2 Елементи моделювання предметної області 
Для моделювання предметної області було вирішено використати мову 
UМL, як широко поширену та, в результаті, зрозумілою широкому колу 
користувачів. 
В мові UМL для використання в діаграмах існують З види умовних, 
візуальних позначень: різноманітні графічні символи, зв' язки (с трілки та 
лініі), текст. 
Найчастіше вживані елементи діаграм виглядають наступним чином: 
28 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
-ГрафІ••••••n с-11м1,.,,1 
- ·-
118',n• ,-..,.,."•~ІІТА 
-х-- - -
/І і flt.tІOП cн:u(,n ( ІН< І OJ") 
CJ Щ1рІ1111,• UIIKC>J"llc.>І СІІІІІН 
~ KC'>MC,IIT11J> 
о ППІСсrІ 
ІКn•ссІ 1<11nc 
1~ 1 об'ск-.· 
~ 1<ом no11e11·r 
LJ) uузол 
с ) дІ11л1.11Істr. 
( ) с-1-011 
- ~ ліні,, )f(Іf'ГГJІ, фокус упрnuліІІІІJІ 
@ ПOЧUTl<OUJ.fi-1 j KЇІll(CUІ,r-tt С-ГПІІ 
-<:>-- -<>- лo1~iч111,rt:t з'сд,tУJ_'\ач. розт-ялу>Ку1"11ч 
..L ..L .1. 
i ж i пnралсль11иR з'сд11уоn•-•• розrалу,куunч 
Рисунок 3.1 - Елементи мови UМL 
Найчастіше вживані типи зв 'язків, що використовуються у діаграмах 
виглядають наступним чином: 
Символ Значення 
parent child Асоціація 
-- ·---- ·· ···Use- · · · ······)> Залежність 
------------------------{:> Реалізація 
----<> Агрегація 
• Композиція 
dispatch nовідоr.,ленн.я 
retum 
<··----·-···-------------- Повернення 
-----Extends-----{> Узагальнення 
Рисунок З .2 - Зв' язки мови UМL 
29 
Відсканоеано за допомогою CamScanner 
Ч)\ТУ 232225 .028 11 
Bnpro зnувож11т11, 1цо J\ся1<і діаr рами маюп, свій 11срс ік унікальни х 
елементів що вжнвnються в тому чи і1111юму пші діаграм . 
3.1.3 Робоча облnсть моделювання 
Кмув~ня да1t,х Ро:1<од~ажя даннх 
Повернення да1t,х 
Рисунок З.З -Модель предметної області 
Модель предметної області для розроблюваного додатку (Рисунок З.З) 
відображує загальну структуру системи та класи, що будуть зустрічатися та 
взаємодіяти один з одним. Користувач взаємодіє з внутрішніми класам:и 
через інтерфейс програми, що в свою чергу приймає файл від користувача, 
після чого зчитує дані файлу, на основі отриманої інформації та команди від 
користувача відбувається процес кодування або розкодування даних, які 
будуть повернуп користувачу. Процес проходить послщовно, при 
можливост1 може пройти повторно якщо необхідне повторне стиснення 
даних. 
3.1.4 Словник предметної області 
Алгоритм стиснення даних: метод або процес зменшення обсягу 
даних з метою економії місця або ресурсів для зберігання та передачі. 
Кодування даних: процес перетворення даних із вихідної форми в 
30 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
шшу форму, зазвичай з меншим обсягом , за допомогою спеціальних 
алгоритмів. 
Декодування даних: процес відновлення вихідних даних з їх 
закодованого представлення. 
Стиснення без втрат: метод стиснення даних, який дозволяє 
відновити оригінальні дані без втрати інформації після декодування . 
Стиснення з втратами: метод стиснення даних, який може призвести 
до втрати частини інформації під час процесу кодування та декодування. 
Метод Хаффмана: алгоритм стиснення без втрат, який використовує 
частоти символів для побудови оптимального префіксного коду. 
Дерево Хаффмана: бінарне дерево, де кожен листок відповідає 
символу, а шлях до символу визначає його код. 
Частота символів: кількість входжень конкретного символу У 
ВИХІДНИХ даних. 
Префіксний код: код, де жоден код одного символу не є префіксом 
будь-якого іншого коду. 
Алгоритм створення дерева Хаффмана: процес побудови 
оптимального дерева Хаффмана на основі частот символів. 
3.2 Формування та аналіз вимог 
Вимога - це умова чи можливість, якій повинна відповідати система. 
Основна задача етапу визначення вимог - знайти, обговорити і зафіксувати, 
що дійсно вимагається від системи у зрозумілій формі як клієнтам, так і 
членам команди розробників. Ще вимогами, зазвичай, називають опис 
функцій та обмежень, що накладаються на створювану систему чи додаток. 
Варто відмітити, що вимоги відображають те, що система повинна 
робити а не способи виконання бажаних функцій. 
Вимоги можливо відобразити по-різному, з р1зних точок зору та у 
різній формі. Для опису вимог та процесів, що відбуваються під час розробки 
зазвичай застосовують Уніфіковану мову моделювання (UМL). Діаграми, 
31 
В іАскановано за допомогою CamScanner 
· н .:\' ' \,\\' ·у, ЧН 6 \ЩІ. ''\ '.:\ІН, \\\ : Ч;\\' \\ '\ , \ ) '\ Н , \\,І\Ч ' І t \\\ \ \ 11 \ 11, \\ , 
1.,..:,ні п ті · 1:·ннн · \ і~нт,,м м ·,тt- щ1 'і'""'' ч~уtt~нн · т, \'і ,нн, ні .1 ·11 . 
Ро:ч і:щ 'k.'I\'\.. · н;і ,1\\'\\ pit Щ '..:\,'\,Ш. .' \ 'НН Щ\Щ.Ч': \\,'\Ч\ННН \ \, \ \ \ ' \ ' Н\111\ 
або Б..НМl'ІГН ~1-.\.1:'ІБН\\~1\ "\,\ Щ\\Н. .' ПІ { Ч , 'Н\І 1\ , \ \ ·r1~11нн і \ЩЩ\\'1 1 \\ \ :\,' '\ І ' ;\ ' " \, 
б~mш і поч ~н з~t.,юRнн~1, і ф 'l'\І.,У ч· \-1.'~ ,., ,; '\ ·\ -~ Н\,\' . , .. , • ІІ\І. , - у, 1 ' 
.:,розуміпо на.віт1- ,1 \.:.щні, щ,, не.' р ;yмit· 1· \..1.''t у 1.·а:-.н,:-.1у Щ' ч,, · і \ 11 , ,~н ''" 
проеь..-тув..'1ння. Р,,бо,·у і~ та.1':нмн ~Н\Ю\ ,t\Ш н,вн~.,t1.,1·t- ф '\'\tyt~\НH~\t щ1\t,ч '.. \ \~, 
сnщїї ЩХ._)еК:ТУ&lНЮt \ШМ ,гн Бt2\( 6р, " \'k.-'\' \..\.' а '\ ЧЮ\Ю\\Ч,, \'\JН,'\І;\Н \ \lll\ '\ 
діагр&'-1. д~-n1лмlі R\\Ml)П\ ··об~х ЖУК.її\-~~ у І.'Нс.'\\\ ~\.!\1'НІ\\, 1.·,·1 У"''У\ ч~шіі1 r,'J'\I\. 
і вона біль.ш деu1.!1ізовані у nо~'іБшшні .:\о ш·рRнннн:\ Б1щщ-. Т,\\\н~, ' ,.,н t' 
анал1зом вимог. 
Також, ще одннм ющом ··обр, :Ji\."('HHS. БН\ЮГ t ~ід1. ()p:t -,-нн 
функціональннх та н~ функціональннх внмоr. 
Функціонапьні в.нмоrн оnнсують пов~дінку сн~wчн і функl\ії. qкі н1.ч\.1 
повинна внконуватн. Не фующіонапьні внмогн шшt' 11т1- ~о хар~\~1~рН\.'П\К 
системи та її взаємодії із зовнішнім середовнще~\. t фектнююс- l'i "'НІ.' г(•~ш \ .1 її 
безпеки. 
3.2.1 Формування в11моr до nporp&\lнoro заб~зпечення. llt'l'BHннi і 
детальні вимоги. Вимоги замовника і розробннка. Фующіонапь.ні 1,\ н~ 
функціональні вимоги. 
Вимоги замовника (первинні) 
ПЗ повинно забезпечнтн стиснення інформації за ра.,ун.,,к 
кодування/або повторного код) вання методоt1.,1 Хаффмана. якщо Ht'tюxqнo 
ПЗ має виконати розтиснення зюшдованої інформації до її nочtпковоf\) вн.:~_ · . 
Вимоги розробника (вторинні) 
користувач має змогу легко взаємод1ятн з програ.мою стнснення. 
використовуючи інтуїтивний інтерфейс· 
ВІдскановано за допомогою CamScan ner 
ЧДТУ 232225.028 ПЗ 
користувач повинен мати ЗМОГ) завантюкуватн файлн різних тнпів 
даних(тексти, зображення , аудіо , відео, тощо)· 
користувач має змогу змінювати параметри стиснення ; 
користувач має змогу швидко виконувати операції стиснення та 
розтиснення без суrтєви:х затримок; 
- система має надавати користувачу зрозумілі повідомлення щодо 
ходу операцій та про можливі проблеми. 
Фувкціона..rrьні в11моп1 
- система має можливість запускати експерименти зі стиснення даних 
методом Хаффмана за різних умов; 
- система повинна мати зручний користувацький інтерфейс для 
введення параметрів експерим.ентів та візуалізації результатів; 
- користувач повинен мати можливість змінювати параметри 
стиснення; 
- система має відображати результати експериментів, зокрема, 
ступінь стиснення та швидкість обробки; 
- представлення можливості експорту результатів у різні формати для 
подальшого аналізу; 
- система має мати l\южливість обробки різних тишв даних для 
оцінки універсальності методу Хаффмана; 
- забезпечення сумісності системи з різними операційними 
системами. 
Не функціональні вимоги 
В11мог11 до продукту 
Кінцевий продукт повинен мати вигляд .ехе файлу та мати можливість 
працювати на ОС Windows без встановлення додаткових :модулів чи 
бібліотек. 
Організаційні в11мог11 
Розробка системи проводиться на мов1 програмування Java з 
використанням бібліотек. 
33 
В ідс 1<ановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
Зовнішні вимоги 
Система не повинна розкривати будь-якої конфіденuійної інформації 
користувача чи використаних файлів, та не порушувати будь-яких законів 
1снуючого законодавства. 
3.2.2 Формування вимог за допомогою діаграми прецедентів 
Діа11>ама прецедентів або варіантів використання (Use Case) 
представляє собою візуальне зображення різноманітних сценаріїв взаємодії 
між акторами (користувачами) і прецедентами (випадками використання тої 
чи іншої функції системи), описує функціональні аспекти системи (бізнес 
логіку). Мета використання такої діаграми продемонструвати список акторів 
і показати який актор бере участь у кожному із прецедентів [4]. 
В результаті аналізу вимог було створено наступю діаграми 
використання, відповідно до основних процесів, що відбуватимуться в 
розробленій системі: 
·-----. ----. -------------
: Досnідж~ня aлrop1111.ty 
----·-·---·-·-··~ ХаjІфмана 
''  
ДОО1ід1t1к •. ........ ........... .. .. . . 
11111 ~anr;pm,yXaффv. .. 
: Спснежя : 
' ' 
---- ---- - - . - •• · · - - · ~ ДіІіИХ І 
-:. .. ........... .. . • 
,-- . ----------.. , -
: QП11t,1 ізаця : User Система (стиОіежя) 
· ··-------------· ~ паія~ ~ (lrcrn Стк:І<еЖJІ д.8ІЮІ) (frcrn Сn"сі <еЖІІ Аа<их) ' ' 
: •• •• • •••• • •••••І 
КІJ,Іп'ютер 
(tan ДІІ:n~НІІ &n!ОІ)ІNУХаффІ/. .. 
Рисунок 3.4 - Діаrрама «Глобальний пакет "Дослідження стиснення 
методом Хаффмана"» 
На вищезазначеній діаграмі (Рисунок 3.4) відображено загальний 
сценарій взаємодії дослідника з системою та користувача з системою. 
Дослідник виконує дослідження алгоритму Хаффмана, використовуючи 
34 
Відскановано за допомогою CamScanne1 
Ч)~ТУ -3222~.02К 11' 
KOl\tllIOTt~p )ІІОІі\ )Щ:ІЩ)JНІt' іІому 111\КШІУІШТІІ ОІІТІІМі·11щію ШІМJІТІ'  ШІЩС 
зо·.1ш,чс11нм шн·орнтмом. 
Користуннч 11111шр11стовуе розрuбщщу систему дш1 ст11с11с11ш1 д1ших. 
Доа~ід1t1к 811~01◄111111r1ор111му Хаффма1111 АІІІWІІ~ ефо~1111ності М,д11фікщіn оnrорнму 
Іttторнот росурс11 Прар11м11 дnn 0111r1Ізу 
в1,кор11еmжя пам'яті 
(fтcm Omttvlмцl• 11111·. , 
Рисунок 3.5 -Діаграма "Дослідження алгоритму Хаффмана" 
На вищезазначеній діаграмі (Рисунок 3.5) відображено наступне: 
- дослідник вивчає алгоритм Хаффмана: дослідник вивчає принципи 
роботи алгоритму Хаффмана для стиснення даних. 
- дослідник аналізує ефективність алгоритму: дослідник проводить 
аналіз ефективності алгоритму Хаффмана та робить висновки щодо його 
можливого використання. 
С11сте"1 (cn,c:нettt•) Зор А"ІІХ Сn,снеж• ІУдіо-дв .... Збt!роже.шя nеротворе"~О( да.щ1: 
l~ 
Снсие~• Іідtо-даw.1х Фор,.~а ВІ~ОР)' 
Фор,1аа11боІ')' t.tiC4" 3берtk8ННІІІ 
r,і:ця зборс,а<нR 
Рисунок З.б -Діаграма "Стиснення даних" 
На вищезазначеній діаграмі (Рисунок 3.6) відображено наступне: 
- користувач стискає текстові дані: користувач використовує систему 
стиснення для стиснення текстових даних. 
35 
Відскановано за допомогою CamScanner 
Ч) (l У 232225.02Х І П 
коrщс 1 у111 1 1 1 ' 'flt ' l([lf 1іу/1і о -л:111і : J((lrи · I ущII 1 никористону систему 
СПІСІІ С /1/ІМ /І)І Н с·11н.: 11 'ІІІІН 11удіо-;ш 11и х. 
кор11 с·1 у ва •1 с ·, ицщ· нінсо-тті : корис1ува 1 1 використону систс ty 
СТІ1С ІІС ІІІІМ JUI M с·1 НС ІІС ІІІІЯ ІІі /tС()·ЮШИХ . 
Доu,1д>11" дОС/\ІА)t'tж~ U,f~ll.,~i4M BAOO'бl';rle,.,J! natl~'!!!!;fO 
s.1., . ... n.-l11119tx с,ратtr,и !!WОР,'І:13Ж" дГ1' .,е.,Дj' )'.-,.t,t"~КI 
:r""\ f.,. !JOII, ~--- .,. "? .(~ '""") .'..А ЧW: tТІf.Н!!НН)І 
t 
7' 
.. ·- Прирам11 для анаП.)1/ 
п~ Сист.., , або nр,tтрй дm 2бер,г.~ння дан,v. Blt(l]p!f: l8ЖII nам·11~ 
Рисунок 3.7 Діаграма "Оптимізація пам'яті" 
На вищезазначеній діаграмі (Рисунок 3.7) відображено наступне: 
- дослідник досліджує оптимальні стратегії використання пам'яті: 
досшдник аналізує та експериментує з оптимальними стратегіями 
використання пам'яті. 
- дослідник аналізує використання пам'яті шд час стиснення: 
досшдник аналізує ефективність використання пам'яті під час стиснення 
даних. 
дослідник оптимізує використання пам'яті для методу Хаффмана: 
дослідник оптимізує використання пам'яті в контекст~ використання 
алгоритму Хаффмана. 
3.2.3 Проектування логічної структури програмного комплексу 
З .2.3 .1 Діаграми класів 
Діаграма класів визначає типи класів системи і різного роду статичні 
зв'язки, які існують між ними. На діаграмах класів зображуються також 
атрибути класів, операції класів та обмеження, які накладаються на зв'язок 
36 
Відскановано за допомогою CamScanner 
Ч)tТУ 232225.028 f ІЗ 
між класами. Клас r·о1юrтим слсмс111ом ліаграми щ10ко1ю якто 
організуються інші е11емснти, що або належать класам, або при m1ані до 
них[4]. 
Атрибути описують в11астивості об'єктів класу. Більшість об'сктів в 
класі отримують свою індивідуальність через відмінності в їх атрибутах і 
взаємозв'язки з іншими об'єктами. Однак існує можливість створити об'єкти з 
ідентичними значеннями атрибутів і взаємозв'язків. Тобто індивідуальність 
об'єктів визначається самим фактом їх існування, а не відмінностями в їх 
властивостях. Ім'я атрибута повинно бути унікально в межах класу. 
В результаті аналізу поставленої задачі було створено декілька діаграм 
класів, відповідно створених пакетів: класи HuffmanEncoder, HuffmanTree, 
HuffinanNode пакеrу Compression; класи MemoryManager, BitOutputStream, 
BitlntputStream пакету MemoryManagement. 
Hufinan Tree 
Huffinanfu:oder 
~ro!i: HilfmanNooe 
·;'-, 
__J 
/J 
HuffinanNooe 
Qxharacter: !tnng 
~equency: numOOI' 
~ftOiid: Hufrna,Node 
fi)rig,tOiid: Hufna,Nooe 
Рисунок 3.8 - Пакет "Compression" 
Encode ( data: string) цей метод приймає текстові дані і використовує 
алгоритм Хаффмана для стиснення тексту. Повертає стислу версію тексту у 
вигляді рядка. 
37 
Відскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
buildHuffiш111Trec (data: strit1g): void цей метод приймас текстові дані і 
будує дерево Хаффмана для використання при стисненні. 
BitOutputStream 
Men-oryManager ~outputSпeam: Outp.JtStream 
buffer: Ь~е 
~сарас~у 
BitlnputStream 
~inp.itStream: lnputStream 
Рисунок 3.9-Пакет "MemoryManagement" 
buffer: byte: - буфер для зберігання даних. 
capacity: - максимальна потужність буфера. 
write( data: string): записує стислі дані в буфер пам'яті. Якщо буфер 
переповнюється, виконує дії для звільнення пам'яті. 
38 
Відскановано за допомогою CamScanner 
" . взннй текст . 
н ~ , { і ті у вttіш 11і11 коюеfінер 
нн т'" nк . 
H('Yf ,,.з~нв байті в у потік. 
lг.;-1:tStreз.n : п rік ..J.1я зчитування бітів з зовнішнього 
lR 6. - з п rоку і повертзє його значення (О або І). 
-~~ЕВ &штів._ 
.:fi;:.t~Чs ~-стів нообхі:rnа, в перШ) черГ) , для організації елементів в 
бу.:~ь-яs-о: оз1mкою з :\Іетою спрощення струк"Т)7JШ і організапії 
агра..чз пагетів вшорпсговуються ) великих за poз}\ripai,m систе:\~ах 
••F пре.:r,стаюення ~пrnn за.~:ежностей :\ПЖ основними елеме~ш системи. 
Такі .ІЇ8Гр3-'\Ш .:юбре ві:шовідають загальноприйнятим правилам програмних 
tpyкryp. 
Пакет (package - це інстру~1ент групування, який дозволяє взяти будь­
~ конструкцію _, IL і об1єлнати її елементи в одиющі високого рівня. В 
основво:м) пакеm с..ужать для об'єднання класів в групи за пов'язаним 
функціона:ю~ чи схожою те:\юю. ) :\юделі UМL :кожен клас може входити 
.:mme .10 о.з;ного пакету. Пакети :можуть також входити до складу інших 
пакещ ТОМ) правш~а ієрархічmІХ структур зберігається. Пакети верхнього 
рівня JЮЗПадаються на підпакети зі своїми власними підпакетами, і так далі, 
до са.чоrо НИЗ} ієрархії. Пакет може містити водночас як під пакети так і 
класи (4]. 
39 
В ідсканоеано за допомогою CamScanner 
., . 11 '"' 
'f'J"'/1'1 ' •11 a i. ' •.-тr " " І • • , .. • ,..,, 
' •·t . .... ,J t ~, . 
І 
~І 
т 
...'. . .,.  ,, ,І,·.,,  J 
,., •.. , f , r ~• 
~ ' J f -1 1..-, ...... ,;. 
f 9• І< , +- • ,.,-, 
Рисунок З . І О - Г обал ьний па кет класів 
В цій системі (Рисунок З. І О) можна виділ ити 2 ос н вн , П L кети : 
Co111pressioп , що відповідає за стиснення інформації , поєдну в собі класи для 
побудови дерева Хаффмана та стиснення/розтиснен ня памят1; 
MemoryManagement, що відповідає за зберігання та обробку дани х , містить 
класи для запису даних у вигляді бітів та байтів. 
З.З.Архітектурне проектування 
З.З. І Діаграма компонентів 
Діаграма компонентів - це вид дшграми, що використовується для 
відображення та організації архітектурних компонентів у системі. Вона надає 
високорівневий погляд на розподіл та взаємодію компонентів у систем і або 
програмному забезпеченні. 
Діаграма компоненпв дозволяє створити фізичне відображення 
поточної моделі. Діаграма компонентів показує організацію й взаємозв'язок 
програмних компоненпв, представлених у вихідному коді, двійкових або 
виконуваних файлах [4 ]. 
Компонент (англ. Component) - це фізична частина системи. 
Компоненти, що представляють собою файли з вихідним кодом клас1в, 
40 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
бібліотеки, виконувані модулі і т.п., які повинні володіти узгодженим 
набором інтерфейсів та правил. 
Компоненти можуть мати такі стандартні стереотипи: 
«file» - файл з даними, крім таблиці; 
«executable» - програма, тобто виконуваний файл; 
«library» - бібліотека з даними; 
«source» - файл з вихідним текстом програми; 
«document» - інші файли (наприклад, файл довідки); 
«table» - таблиця бази даних. 
Діаграма компонентів для розроблюваної системи виглядає наступним 
чином: 
~- ----- - -- -- -- ---►~~ 
ПDJІJІЗНІІ{ МОІІіІtІЇ КеІІfважя 
сn.:нення аналізатор ПіtіЯТТІО 
Код~альнн 
к>'аффмана 
PeryлЯltlp 
сп1:нення 
Діа111осn1ка 'тµзвлння 
1азві11tсn. П~ІІЛКа<.11 1 
' ' 
' 
, '' , '  
''  CJ-------• С11сrема Опn1мізщія 
рохТІІІ:нежя 
' ,а анаrіз 
u Буфер 
ofr~ jjy Мод~ь ооедення­
в111едежя 
Рисунок З .11 - Діаграма компонентів для системи стиснення даних методом 
Хаффмана 
41 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.02R 111 
З.З.Z Po·Jrop·, ання нроrрамної сис1еми на апаратних '~асооах. Дjarpa~.,a 
розгортання 
Діаграма розгортання - це вид ДJаrрами, який викорисrовується iLlЯ 
моделювання організації фізичних компонентів (апаратного та проrра~шого 
забезпечення), які взаємодіють дЛЯ надання конкретного сервісу. Uя щагра~-ш 
вказує, як система або програмне забезпечення розгортається на апаратнш.fу 
обладнанні. 
Основні елементи діаграми розгортання включають: 
- вузли: представляють апаратне або програмне забезпечення, на 
якому виконується система. Вони можуть бути фізичними сервера);ІИ, 
віртуальними машинами або іншими апаратними чи програмними об'єкта~m. 
- артефакти: це файли, бібліотеки, конфігураційні файли або інші 
елементи програмного забезпечення, які розгортаються на вузлах. 
- зв'язки: показують, як вузли взаємодіють між собою, наприклад, як 
один вузол використовує сервіс, який надається іншим вузлом. 
- артефакти в пакунках: групують артефакти у пакунки, щоб легше 
організовувати та розуміти структуру розгортання. 
- екземпляри вузлів: вказують кількість екземплярів кожного вузла, 
які розгортаються. 
Діаграми розгортання використовуються для візуалізації фізичного 
розміщення компонентів, додатків та артефактів на апаратному обладнанні, 
що допомагає в процесі проектування, розгортання та управління системами. 
Діаграма розгортання для розроблюваної системи виглядає наступним 
чином: 
42 
В ідскановано за допомогою CamScanner 
,п 
о 
·· ·· · ···· · · ·о -
·:-
Рисунок 3.12 - Діагра..\fа розгортання 
З.З.З Моделювання поведінки сясте~rn 
З.З.З. І Діаrра..,1а діяльності 
Діаrр~1а ліяльності - в ~ , ВІЗ) а.~:ьне пре.1став.1ення граф.: 
діяльностей. Граф діяльностей є різновидо~1 граф) станів го.1овною . te-roю 
якого є візуалізаuія a.iropиnf) виконання операuій к.1асів [4]. Кожен став а 
тако. ry ВИПад:І\')' може позначати певну операцію якогось к.1асу систе~ш шо 
дає змоrу використовувати таІ\-у діаграму для опис) реакцій н_а внутрі.rпш 
з. они в системі 
Основні елементи діагра..,ІJІ діяльності вк.rпочають: 
- аJ..їИВносrі (Activity): представляють конкреmі дії або обробки яю 
відбуваються в системі 
рішення (Decision): використовується дл.я визначення у~юви або 
рішення в процесі. Зазвичай _1 ає дві або більше стрL1ок що вказують на 
можливі варіанти розвитІ\-у подій. 
- об'є1пи (Object): в~rкорнстовуються для пре.1став.1ення об'є11.тів яю 
взаємодіють у процесі. 
43 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
стршки (Control Flow): визначають потік управління між 
активностями. 
В результаті аналізу поставлених задач було створено декілька діаrрам 
діяльності для опису основних процесів, що проводяться в системі (Рисунок 
3.13, Рисунок 3.14, Рисунок 3.15). 
Д~і '48 ІІДПОІ~ ІОТ\, 8НМСІ'1іІІМ 
АіНі 16еріrї1ЮfЬС:Я 
•--· • 1 n;iu'irri або 
'-""'="і'=~ =·=·1~11_ _~  
За<інч"мR 
.,)<;,-- -------1 cnc•"'"' 
Рисунок 3.13 -Діаграма діяльності "Стиснення даних методом Хаффмана" 
Ця діаграма(Рисунок 3.13) описує послідовність дій, які потрібно 
виконати для стиснення даних за допомогою методу Хаффмана. Це включає 
аналіз та обробку вхідних даних, побудову дерева Хаффмана та стиснення: 
І Читання вихідних даних: на цьому етапі система читає вихідні дані, 
які потрібно стиснути. 
2 Побудова дерева Хаффмана: система виконує побудову дерева 
Хаффмана на основі вихідних даних. Це дерево будується з урахуванням 
частоти входження кожного символу в даю. 
3 Стиснення даних: за допомогою дерева Хаффмана система стискає 
вихідні дані, замінюючи послідовності символів на їхні бінарні коди. 
44 
Відска1-юва 1-1 0 за допомогою CamScanner 
'І)\ О .. J _ 5.0-Н І І ' і 
4 -~6'-'\ '-' ' \.'ІІІІЯ '-' fЩ'JIII X )\І\ІІШt: 'rнслі )\ІІІ І і ·,fi ·ріино І І 1СИ у ІІЮ тщі 
6,11 чню\ 'фаН .11у а,() і1111юt '\' формn1 , нля ,ю;щm,11ю1 ·0 1111коrн1ст11 11ю1 . 
B1A•1oon 111я д ерооо Хаффщ11а >1а ос11ооі 
І11ффІІІ 8І ІІ АСІ! '-'Omn бут11 nбу11ом1<1 n 
"")·n:1щя 111>11 mрш.1>11 СШСІІеtІІ І\8Іі 
C1\tC.H)1\IXI\RHІIX 
Побудоrо дорсt1а 
ХІІjІф~ІІНR (Іі11tо1nенчя) 
АВ ВІДС)ТНі 
ВіднооПL'ННR 
ОІ)ІПНІ ШІІХ Д8ІtІІХ 
За~.інчежя 
рсnсntснежя 
Рисунок З .14 - Діаграма діяльності "Розстиснення стиснених даних 
методом Хаффмана" 
Ця діаграма(Рисунок З .14) описує процес розстиснення стиснутих 
даних, які були стиснуті методом Хаффмана. Вона включає аналіз та обробку 
стиснутих даних та відновлення оригінальних даних: 
1 Читання стислих даних: система читає стислі дані, які були стиснуті 
методом Хаффмана. 
2 Розкодування стислих даних: використовуючи побудоване дерево 
Хаффмана, система розкодовує стислі дані, відновлюючи вихідні символи. 
З Збереження відновлених даних: відновлені дані зберігаються у 
вигляді вихідного файлу або іншого формату. 
45 
ВІдскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
Поцаток оnn,м із~І та 
анаn ізу 
Зб і р та ІІіаrіз дafttX про 
роботу мет~щу Хsффмана 
Перев і ІJ<а ефекn1вності 
пісnл ОПТІМЗЩІ 
Закнчежя опшмізаці 
та анаrізу 
Рисунок З .15 - Діаграма діяльності "Оптимізація та аналіз роботи 
методу Хаффмана" 
Ця діаграма (Рисунок 3.15) описує кроки, спрямовані на оптимізацію та 
аналіз ефективності методу Хаффмана. Вона включає збір та аналіз даних 
про роботу методу, ідентифікацію слабких місць та розробку оптимізацій для 
покращення роботи методу: 
1 Збір статистики: система збирає статистику щодо ефективності 
. . . 
стиснення та розстиснення даних, таю як розм1р вихщних та стислих даних. 
2 Аналіз результатів: здійснюється аналіз результатів стиснення та 
розстиснення для оцінки ефективності методу Хаффмана. 
З Оптимізація методу: на основі аналізу система вносить оптимізації 
до алгоритму Хаффмана з метою покращення його продуктивності. 
4 Збереження оптимізованого методу: оптимізований алгоритм 
зберігається для подальшого використання. 
46 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
3.3.3.2 Дjаrрама послідовності 
Діаграма послідовності відображає послідовність обмі ,~у 
повідомленнями між ролями, що імплементують поведінку системи. Зокrсмн, 
. . 
таю д~аграми відображають задіяні об'єкти та послідовність від11равне11их 
повщомлень. Діаграми послідовностей можна використовувати для 
уточнення діаграм прецедентів, більш детального опису логіки сценаріїв 
використання [4]. 
С11стема 
о о 
І 
І І 
І 
І 1: обирзє файли для стиснення І 
І 
о )~ 
2: завантаж}€ а1~ідні дані з в11брзних файлів 
х F 
З: аналізує в11хідні дані, пїqраховуючи частоtу кожного символу 
F 
4: побудовує дерзво Хаффмана на основі частот символів 
І 
F 
5: створює табпщю коді~ Х:зффмана для кожного символу 
F 
б: кодує вихідні дані , замінюючj1 симвопи їх бінарн111111 кодами Х:зффмана 
F 
І 
І 
7: збе~гає стислі ~ані у вигляді стислого файлу 
F 
І 
І 
х 
Рисунок З .16 - Послідовність стиснення даних методом Хаффмана 
47 
Відскановано sa допомогою CamScanner 
ЧДТУ 23222'.02~ ПЗ 
На виwеза1наЧеній illC:fJY4._V.i (Рисуно·· 3. l 6J г. ;~:--:о 
даних метопом Хаффман.1: 
Користуваq обиfУr,і-&" ,':1.".,',а~п.. .1И .:L-v-. СП! -...с ~-:т:·:.:;.-.~:-- На G-OY-:: . ·-• -
користувач має мож.1иність .,,и=орати. 0,= -о-, о .-,...,_,.....  · -._·.:) ·~ - ,;.. ..,,~ - --_, '~ - -
g . .,~,11.п С:::. ~  - .... ~v.i:.-= :..с...= -=- .v..  
стиснуm методо11 Хаффмана. 
2 Систем.а завантад·ує вих1.m1 лаю з szб~....--:zx ёеz::із. С 2-:-5е 
отримує доступ по обраних фзй.11в і :завантаж:,-є ~ , cr шп • ~-=з .=.:2 
подальшого аналізу. 
З Систе~1а аналізує ВИХІlІШ лащ ІШІраХОЗ}~  с2.uот:,- ·:ОАЕ -о 
символу. Вхідні дані ана.1.ізуються д:1я визначенш--~ с-.сі.Б~ разіз ··аж=~ 
символ зустрічається в тексті. Ue визначає чacrmy кn-,!,•.-•юто cm!ВO.J)·. 
4 Систе)dЗ побудовує дерево Хафф)ІаНЗ на осноаі ч.асrот сю.!30.rіз.. 3z 
допомогою частот, визначених на попере.:mьш,J)· крощ сис·п:Уг ~=ОЄ 
дерево Хаффмана, де сю.mоли з меншою частотою роз:шшую"ься б.~~ .:о 
кореня дерева. 
5 Система створює таблишо кодів Хафф}тна іПЯ кожного СЕ:Узо.:1у. 
Для кожного символу систе}1а створює бінарний ко.J Хгоо,,г:==г.. 
використовуючи створене дерево Хафф,1ана. 
6 Система кодує вихідні дані, зю.rінюючи сІШВО.ш їх бінарв::rо.ш 
кодами Хаффмана. За допомогою таблипі колів ХаффУ~ система за,rіь:-..")Є 
. - . ... - ~- -
символи вихщних даних на 1ХН1 еквшаленти у Виг.ІЯдl ошарНІLХ ко.:пв. 
7 Система зберігає стислі дані у виr:uші стис.їого фай:Jу. За.чі ть 
вихідних даних система зберігає отримані стислі дані у ново~· фай.~. 
Процес стиснення вкmочає в себе аналіз статистшш вхо.::rу та побу.1ову 
оптимальної струк-rури дерева Хаффмана. Оrже, застосування пьоrо 
алгоритму може ефективно зменшв1и роз~rір файлів, шо сприяє еконо\ІЇЇ 
простору для зберігання та передачі даних. 
Відскановано за допомогою CamScanner 
IJ 
n ''"'' ~\n AJ\!I • ~щ ' І н І!\ ~(: ] 
;t.ЯІ!~І ~~ 1; n!,· 11І ,\ІІІІ J .-1ІЧ'4ІtН•fі-, lj\1!1111\' 
[J·· 1 
З ~;ід~ш,,.. єд~1111 ~афф~•111•~. 1· 11~·1111\ 111111111\ 
[']<· І 
, 
~ - р.'1 ~'{\І\О~• Q'ЩJ1І ДІ!Н ІШ~І'\1І СМ!)''"'"' fі\(ІІІЩі\'! 11'1\І\~ \1фм ,1111 
І tУ  
5: ~б@рrо .-; 11ід1ю11111111~д:щ І )' 1111nщ11І ~щ..!JІІНV\1 ф11)11)• 
~F 
>( 
Рисунок 3.17 - Послідовність розстнснення даннх мt.по;,ом Хаффмшш 
На вищезазначеній діаграмі (Рнсунок 3.17) ноюпrшо 11po1i · с 
розтиснення даних: 
1 Користувач обирає стислий файл дня розстн нешн,. Корнстувntt 
обирає стислий файл, який бажає розстиснутн. 
2 Система завантажує стислі дані з вибраного фнйлу. ІІСТ~МО 
отримує доступ до стислого файла і завантажує його стислий вміст дю, 
подальшого розстиснення. 
3 Система відновлює дерево Хаффмана зі стислих даних. Щоб 
розкодувати стислі дані, система відновлює дерево Хаффмнна, яке було 
використано для стиснення даних. 
4 Система розкодовує стислі дані, використовуючи таблицю кодш 
Хаффмана. Використовуючи таблицю кодів Хаффl\•tана, система розкодовує 
стислі дані, замінюючи бінарні коди на відповідні символи. 
5 Система зберігає відновлені дані у вигляді вихідного файлу. Замість 
стислих даних система зберігає відновлені дані у новому файлі, які ідентичні 
вихідним даним. 
49 
Відскановано за допомогою Ca mScanner 
ЧДТУ 232225.028 ПЗ 
~ 
1: зб11111є сrат11етнk)' щццо стоснЛя та іХJЗСПІснення даних для різжх фа1лів 
І 
F 
2: аналізує резуль~аш сшснення , ~ючаюч~1 розмір вихідних та сп1rлих дан~1х 
F 
І 
З: в11значає , де можл11во застосув~11 оnп1мізаціі для покращення п~:юдукrивності 
F 
І 
4: застосовує оnтимізований метод Хаффмана для подальшого стиснення та рохшснення даних 
І 
F 
І 
~ 
Рисунок З .18 - Послідовність оптимізації та аналізу роботи методу 
Хаффмана 
На вищезазначеній діаграмі(Рисунок З .18) показано процес оптимізації 
та аналізу методу Хаффмана, які проводить дослідник в системі: 
1 Система збирає статистику щодо стиснення та розстиснення даних 
для різних файлів . Система аналізує результати стиснення та розстиснення 
даних для різних файлів і зберігає цю інформацію для подальшого аналізу. 
2 Система аналізує результати стиснення, включаючи розмір 
вихідних та стислих даних. Система порівнює розмір вихідних даних і 
50 
Відскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
стислих даних для визначення, наскільки ефективно метод Хаффмана працює 
в кожному конкретному випадку. 
З Система визначає, де можливо застосувати оптимізації для 
покращення продуктивності. На основі результатів аналізу система визначає, 
де може бути застосована оптимізація для поліпшення роботи методу 
Хаффмана. 
4 Система застосовує оптимізований метод Хаффмана для 
подальшого стиснення та розстиснення даних. Після визначення оптимізацій, 
система застосовує покращений метод Хаффмана для стиснення та 
розстиснення даних для максимізації продуктивності. 
З .З .З .З Діаграма комунікації 
Діаграма кооперацій (Collaboration Diagram) є одним із видів діаграм в 
мов1 моделювання UМL (Unified Modeling Language ). Також вона часто 
відома як діаграма співпраці. 
Основна мета діаграми кооперацій - відображення взаємодії об'єктів 
або класів, які беруть участь у виконанні певного сценарію чи функції. Ця 
діаграма вказує на обмін повідомленнями між об'єктами і призначена для 
показу, як об'єкти взаємодіють один з одним в рамках системи чи програми. 
Основні елементи діаграми кооперацій включають: 
- об'єкти (Object): вони представляють екземпляри класів або сам1 
класи, що беруть участь у взаємодії. 
- лінії життя (Lifeline): показують, як довго об'єкт (екземпляр класу) 
існує та бере участь у взаємодії. 
- повідомлення (Message): відображають виклик методу чи обмін 
інформацією між об'єктами. 
- асоціації (Association): з'єднують об'єкти, що беруть участь у 
взаємодії. 
Для системи було розроблено такі діаграми кооперацій: 
51 
В ідс ка новано за допомогою CamScanner 
4:n Е~ТёЄіЬС 
Сnt.:підані 
+-
З: nеретвор:н~ CTP,'F-1)1)1t в дан 
Рисунок З .19 - Діаграма кооперації для стиснення даних 
У цій діаrрамі(Рисунок 3.19) показана взаємод1я м1ж об'єь..-та..,ш та 
компонентами систе~m під час стиснеШІЯ даних методом Хаффмана: 
Користувач: ініціює процес стиснення, передаючи дані для стиснення. 
Система стиснення: приймає дані від користувача та ініціює стиснення. 
Взаємодіє з Деревом Хаффмана для створення стислого представлення 
даних. 
Дерево Хаффмана: використовується для створення стру1'.ї)'РН 
стиснення на основі алгоритму Хаффмана. 
Стислі дані: результат стиснення, який повертається користувачу. 
52 
Відска нова но за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
Користувач 1:і ніщ~ос п~ес ро:tn1снення 
~ Сисrема 
роз::шснежя 
~ 
2:П р1Іt~ає СТИСЛ ДЗІі 
13: ініціює рrосп1енежя 
розкодування СПІсrnх дано/ fсо ові апгорпму ХаффміІІа 
Ро~тислені дан ДеР3ВО 
Хаффмана 
Рисунок З .20 - Діаграма кооперації для розстиснення даних 
У цій діаграмі(Рисунок 3.20) показана взаємодія між об'єктами та 
компонентами системи під час розстиснення стислих даних методом 
Хаффмана: 
Користувач: ініціює процес розстиснення, передаючи стислі дані для 
розстиснення. 
Система розстиснення: приймає стислі дані від користувача та ініціює 
розстиснення . Взаємодіє з Деревом Хаффмана для розкодування даних. 
Дерево Хаффмана: використовується для розкодування стислих даних 
на основі алгоритму Хаффмана. 
Розстислені даю: результат розкодування, який повертається 
користувачу. 
53 
В ідскановано за допомогою Ca mScanner 
ч 
.. 
~ 
- ,:е,-_. з..,:::с; -
Pzc:,~o- 3_1 - ili.arpг.. r.a -·ооперапїї .::пя оmm.rі.запїї та 2.На.1.із~, робоrzз. !ето.:rу 
lli .:ІЇа.~~!а коопераnії (Рисунок 3.21 показує взаою.:шо ,,їж ООG."Тг.У2 
-а irD"YIIOneJTTcrn:и систе-шІ п.і.J: час оmm,ізаuїї та ана.~ роботи мето.Jу 
Користувач: за.ІІ)·схає проІІес ана.~і.з) та оппшізапїї мето..Jу Хафф"(а.:.а. 
Сксте.ма ана.їізу: виконує ан:а.їЇз робоm :мето.:~у Хаффмана та збирає 
необхіпні дані 
Методи ОП'ІЮ-rізапії: використовуються .п:~я ОІІ'ПL\lі.ЗаІlЇЇ роботи 
a:1ropmмy Хафф,!а.На. 
Резу:ІЬтати ана.113У: повертаються корисrуваЧ) л.~я по.Jа.-rьшого 
використання або вдо<.жона_1ення метод) Хаффмана. 
Ці ~ш спрошують відображення вза5юді.ї об'єктів із сис-теш~ , шо 
;~оnоУ.аГа.Є ~rіщ як об'єk-ти взаємодіють :~я досягнення певної мети ЧІl 
функпії. 
54 
Відскаt-ІОВаt·ІО за ДОПОМОГОЮ CamScanner 
ЧДТУ 232225.028 r 11 
З.З.З.4 дiarpa\f;:s скі11•1снного аrпо~,ату 
Діаrl)ама скі11чсн1rоrо автомату (rinitc State Machinc, FSM) с іншим 
видом діаграми в мові моделювання UML (Unified Modeling Language). Вона 
використовусться лля відображення різних станів , в яких може перебувати 
об'єкт, та переходів між цими станами відповідно до вхідних подій. 
Основні компоненти діаграми скінченного автомату включають: 
стан (State ): представляє конкретний стан, в якому може перебувати 
система або об'єкт. 
перехід (Transition): показує можливий перехід між двома стана~и 
відповідно до певної події. 
подія (Event): викликає перехід між станами. Це вхідний сигнал чи 
подія, яка впливає на систему. 
- дія (Action): вказує, яку д1ю слід виконати шд час або після 
переходу між станами. 
початковий стан (Initial State ): вказує на початковий стан системи. 
фінальний стан (Final State ): вказує на закінчення роботи системи. 
Діаграма скінченного автомату є ефективним інструментом для 
моделювання систем, що мають визначену послідовність станів та переходів 
між ними. Вона широко використовується для опису реакції системи на різні 
вхідні події та керування її станами. 
Об'оо roro111й до nр~11нятrя дашхдпя стиснення Стж:нежя дашх методсrА ХаІjфмана ст~tснения дан1ІХ методо11 
Хщіфмана завер.uеІЮ 
( за~ерwения сш:нежя 
надходжежя дЗіІІХ для оорооки 
Com~ete 
1нов-і да-11 н-е н-адХС-\!\~ЯТh 1 
сrа:увания ОПЕрЗLf сntнения 
Пе12хід дm нІJІоrо m ~бont 
Рисунок 3.22-Діаграма скінченного автомату для HuffmanEncoder 
1 Ready (Готовий): 
55 
Відсканова но за допомогою CamSc anner 
'1)(1 У 2J2225 .02 И І П 
- 1tО'Н\ТКОІНtіt C'JШ І KOJtCJ)II , 
- корн ·туnnч і11і1•іюс ко1~шн111я. 
- псрехі;\ до стnну Eпcodi11g (Кодування). 
2 Епсоdіпg (Кодування): 
- кодер виконус кодування нхідних даних методом Хаффмана. 
- після завершення кодування кодер переходить до стану Ready 
(Готовий). 
nooyдia де~а 
В\~ОЛДОДllЬОІ додrрева П~В~ЄТІ:СЯ дерооодпя гєрЕ9~t 13 mрекці Х~фмана зaвefA)J~i; 
І 
Н~)З)ДЖЄНІ§І НОВОrо СІ1МВОЛу ДЛЯ O~rc,5Klt І 
І 
І 
пrрехщ псля додсІ!ажя ьузла І 
Bu~dng _. ,--''---'L...-,. ~--=--..,__--. Com~ete 
Choc~rgTree услішна по~доваі дерева 
' 
перехщ у разі нео~~носп додавсііня ще вуJnів 
n~XR дrn Hte[o ~1ю~у rо5удови 
Рисунок 3.23 -Діаграма скінченного автомату для HuffmanTree 
1 Ready (Готовий): 
- початковий стан побудови дерева. 
- користувач ініціює побудову дерева. 
- перехід до стану BuildingTree (Побудова дерева). 
2 BuildingTree (Побудова дерева): 
- клас HuffmanTree виконує додавання вузлів до дерева. 
- після успішної побудови дерева перехід до стану Ready 
(Готовий). 
56 
Відскановано за допомогою CamSc anner 
ЧДТУ 232225.028 ПЗ 
n•і~т~ 
уа,іш110 
01\!\ІЛеtІВ 
зоооршсш1n робо111 ~•• 11.дсу~11ос 11 
Realy _дІ_І_ос'--аІ_еd____ НІЩЮА"(ОtІІІА ІІООІt)( І\ШJ10 • 
• утішне в11Діnежя nar,(яri 
відсутня вnьн1 
ОuЮІМеm . . . . . . n1rіять дnn 
ory 
внчерnанtt1 досту~о! пам'яті ОІЩіПОІІНЯ 
перехід ncnя звільнежя пам'яті із ciopuш іНШІІХ діnянок 01cтerd11 
Рисунок 3.24 - Діаграма скінченного автомату для MemoryManager 
1 Ready (Готовий): 
початковий стан менеджера пам'яті. 
ініціалізація менеджера пам'яті. 
перехід до стану AllocatingMemory (Виділення пам'яті). 
2 AllocatingMemory (Виділення пам'яті): 
клас MemoryManager виконує виділення пам'яті для об'єктів. 
після успішного виділення пам'яті перехід до стану Ready 
(Готовий). 
об'єкт зчитує біт з вхідного потоку 
нщ::~.ходження кома11д11 на зч1-,тування біт 
Ready ReadingВit 
успішне зч1-,тування 
об'єкт зчитує байт з вхідного потоку 
ReadingByte 
надходження команди на зчитування байта 
Рисунок 3.25 - Діаграма скінченного автомату для BitinputStream 
57 
Відскановано sa допомогою CamScanner 
ЧДТУ 232225.028 ІІЗ 
Ready (Готовий): 
- початковий стан BitlnputStream. 
- очікування команди на зчитування біта або байта з вхідного 
потоку. 
- перехід до стану ReadingВit (Зчитування біта) або ReadingВyte 
(Зчитування байта). 
2 ReadingВit (Зчитування біта): 
- клас BitlnputStream виконує зчитування одного біта з вхідного 
потоку. 
- після успішного зчитування біта перехщ до стану Ready 
(Готовий). 
З ReadingВyte (Зчитування байта): 
- клас BitlnputStream виконує зчитування одного байта з вхідного 
потоку. 
- після успішного зчитування байта перехщ до стану Ready 
(Готовий). 
о6єкт записує один біт у вихідн1,1й потік 
надходження кома1-Щ11 на запис біта 
Re~y WritingBit 
успішний запис 
об'єкт записує байту вихідн1,u1 потік 
WritingВyte 
н.щходження команди на запис байта 
Рисунок 3.26-Діаграма скінченного автомату для BitOutputStream 
58 
ВІдск.:~ноеано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
І Reгdy (Готовий): 
- початковий стан BitOutputStream. 
- очікування команли на запис біта або байта в вихідний потік. 
- перехід до стану \VritingВit (Запис біта) або WritingВyte (Запис 
байта). 
2 WritingВit (Запис біта): 
- клас BitOutputStream виконує запис одного біта в вихідний потік. 
- пkля успішного запису біта перехід до стану Ready (Готовий). 
З WritingВyte (Запис байта): 
- клас BitOutputStream виконує запис одного байта в вихідний 
потік. 
- після успішного запису байта перехід до стану Ready (Готовий). 
59 
Відскановано за допомогою CamScanner 
Bttrnoвt.:н .]О rprть0t"\) році.ч· 
Lз.ІЩ\.ІЗgt' • S ВН\\'t~rНсl\""ІБУВ3В .1ШГГ-l\ІН .J.lЯ ві · ~ .1.li .ЩІ\ \-Т\)Ч\ІІ?ІІ\І Я 
""ІНU('ПUІЙ. Щt, СТ\ 'УК:ТЬС R. rt"'HIIX 8СП('ПіВ nporr. \ІНОГ\) nr"'.:l,YI\Ty. ~ 
..:1 "'П ~оrок .J.ІЗ.fГЗ.\t БНК pHC'l1lHHR. S вн нач. в. як II т~щ1 бу;:~с: 
вн ~рнсrовуватнс різнн\ш • 1'.t{"'lr. ,ш. на.:~в_ючн ясне уяв.1ення пр 11 
функці Н3.."1ЬНість l1l \ЮЖ.11\ВОС'Ті. іа.[1'3.\11\ KlllCtB В\ІЗН ча.111 основні К.1ЗСІІ. 
їхні атрнбутн т-а \1сТ('І_:щ. що сrnнов.,я-ть основу прогрзJ.ІН. ДівгрзJш 
п ,щов.ності .J.озво.:1я:ш вЬобраз1пн взаою.1ії тn послі..:~овність оперзuііі ,,іж 
об'єкта..,ш в часі. на:~аючн чіп:е уяш ення пр те. як снст~,ш взаою:~іє нз 
різних етапах вш~онання. З внкорнстанням .1іаrра..ч діяльно ті я і люстрував 
етапп в1rкошUІ.ня програ.,ш. ві.J.ображаючн рішення тз \tожлнві аль тернrпнвm 
Ш.lЯХІІ. Діагра..'1п розгортання визначали апаратні засобн тз конфігураuії. на 
яких програ.'1а бу.:~е розгоргатнся. 
Or~e, ці .:riarpa.,ш mIL б,1лн невід'є..,шою частиною прое~-.ї)rвзння. 
сприяючи. ь..-ращо:му роз~ ").[інню стр~ -ь..,урв та функціональності програ.,шоrо 
про.:хупу, а також дозволяючи бі. ьш зручно моделювати та аналізуватп 
сиС"теМ) перед реалізацією програ..,ш. 
60 
Відскановано за допомогою CamScanner 
J t•ОЗІ'ОБКА ТЛ ТЕСТ~ НАННЯ 111"ОГРЛМІІОГО ЗАБЕЗПЕЧЕННЯ 
4.1.1 Обt'J.)унтування внбору засобів рсмізації 
Внбір Jaya для прое'h.-тування цього застос) нку був об ·мовл~ннП 
декількома факторамн. По-перше. моя знайомість з Ja,'n дозволнла мені 
шв1щко розробнтн функціональність проrрамн. Ця мова програмування ~iac 
велнку кількість інстр) ментів та бібліотек. що значно спростнло роботу 3 
різннмн аспекrамн прое1'.а). 
Для створення графічного інтерфейсу корнстувача (GUI) я в11кор11став 
бібліотеку S,,ritlg, яка є стандартною для розробки GUI в Java. Її простота ) 
використанні та 1'юж.тш.вості створення різноманітних елементів інтерфейс) 
сприяли швидкому створенню потрібних компонентів, таких як кнопки, поле 
для вводу тексту та мітки. 
Також, використання бібліотеки ja,ra.io для роботн з файла.,ш 
дозволило легко зчитувати та записувати дані з файлів а також працювати з 
потоками вводу та виводу. Це було корисно при збереженні закодованих 
даних та ключів Хаффмана у файл для подальшого використання. 
Структури даних, такі як HashМap та PriorityQueue з бібліотеки 
java.util, використовувалися для зберігання кодів Хаффмана та побудови 
дерева Хаффмана відповідно. Вони дозволяють ефективно працювати з 
колекціями даних, що було важливою складовою у реалізації алгор1п1'1)' 
стиснення даних. 
1 javax.s,ving: це набір інструментів для створення графічного 
інтерфейсу користувача (GШ) в Java. Використовується для створення вікон, 
кнопок, текстових полів та інших елементів інтерфейсу. 
2 java.a,vt.event: містить класи та інтерфейси для обробки подій 
використовуючи Abstract Window Toolkit (А WТ). ActionListener - це 
інтерфейс для обробки подій, спричинених діями користувача (натисканням 
кнопок, введенням тексту тощо). 
61 
В ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
3 java.io: ця бібліотека надає засоби для введення та виведення 
даних, таких як робота з файлами, потоками вводу-виводу та ссріалізація 
об'єктів. 
4 java.util: використовується для роботи з колекціями та утилітами , 
такими як Мар, PriorityQueue, що використовуються для зберігання даних 
та пріоритетної обробки. 
5 java.util.HashМap: реалізація колекції Мар, яка зберігає даю У 
вигляд~ ключ-значення, дозволяючи швидко отримувати доступ до даних за 
ключем. 
б java.util.PriorityQueue: це реашзац1я черги з пріоритетом, де 
елементи видаляються за пріоритетом. Використовується, наприклад, для 
побудови дерева Хаффмана. 
7 java.io.FileReader, java.io.BufferedReader, java.io.FileWriter: щ 
класи дозволяють читати та записувати дані в файл. 
8 javax.swing.JOptionPane: використовується для показу діалогових 
вікон з повідомленнями та попередженнями для користувача. 
9 j ava.awt.even t.ActionEvent, j ava.awt.event.ActionListener: 
використовується для обробки подій, спричинених діями користувача, 
наприклад, натисканням кнопок. 
10 java.awt.JFrame, j avax.swing.JPanel, javax.swing.JВutton, 
javax.swing.JLabel, javax.swing.JTextArea: елементи графічного інтерфейсу 
для побудови вікон, кнопок, етикеток та інших елементів. 
У се це разом сприяло створенню потужного та гнучкого програмного 
продукту, який може ефективно кодувати та декодувати дані за алгоритмом 
Хаффмана, а також має зручний інтерфейс для користувача. 
Середовищем проектування було обрано Visual Studio Code. Це легкий, 
але потужний редактор вихідних кодів, який працює на вашому настільному 
комп'ютері і доступний для Windows, macOS та Linux. Він має вбудовану 
підтримку для JavaScript, TypeScript та Node.js, а також має багатий 
62 
Відсканова 1-ю за допомогою CamScanner 
ЧДТ) 232--5.028 ПЗ 
't\'( 'Н '\'\.'МУ РО' НtНрень для інншх мов 11рогрnмуnn1шя тn середовнш 
''"" ,шшнм t1
'-'"11X я" ++, #1 .Іп,n, РуtІюп, РНР Go, .NET) [14]. 
Пер~1щ1·амн цьоt"О середовнща є: 
1 Розшнрюваність: має шнрокнfі внбір розш11рень для різних мов 
Щ)(.)\l)t\M) вання та інстр) ментів. Це дозволяє адаптувати середовище до 
~,шн~ nотре(і 
- Ефtкпшна робота з Git: інтегрований інтерфейс для роботи з Git 
пОJt~rшує ко~шндн) робоч та керування версіями проектів. 
З Зр) чннй ін~рфеІ\с користувача: привабливий та зручний інтерфейс 
с_прияє комфортній та nродуктнвній роботі. 
4 Співпраця з іншими інструментами: легко інтегрується з багатьма 
іншнмн інстр ментами розробки та засобами автоматизації. 
5 Багатофункціональність: має вбудовані інструменти для 
налагодження, відпадки, виконання та розгортання програм. 
б Ком'юніті та підтримка: є активне співтовариство користувачів та 
офіційна документація, що спрощує вирішення проблем та пошук відповідей 
на питання [14]. 
4.1.2 Опис структурної ( функціональної) схеми 
Створення та подальше відображення структурної та функціональної 
схем необхідне для розуміння розробником власне структури ПЗ, його 
програмних компонентів та зв'язків між ними. 
Структурна схема розроблюваного програмного забезпечення це схема, 
що зображує склад і взаємодію з управління елементів розроблюваного 
програмного забезпечення [15]. Вони необхідні насамперед для розуміння 
того навіщо взагалі той чи інший елемент програми, як він працює та як 
елементи взаємодіють між собою. 
Структурна схема для розроблюваної системи виглядає наступним 
чином: 
63 
Відскановано за допомогою CamScanner 
Ч!{ТУ 23222 .02Н 113 
l.ffep:,e іс 
ор,•ст /Еа"JЗ 
Тео 1 і ча1 дr; , --оо-ра• а м= 
2se..:.e з.а;ачта "!!-!~ 
ч;; те СТ)' cra,;_J- 3 
Пі,1,ПРОїра•.,а для npor:pa 1.1a м= ..: - :,о· ра• 3 .:г= 
створек.-н; 
УОДу-Еа ч:-1 ; .:ero~J ;;a- :.i -= 
КЛІQЧЇВ Cl' t..150.1i3 
дач, 
.:а "rr 
Пi,,,nporpa 1.1 a дп:;; 
зое режен>ffі 
даних 
Рисунок 4.1-Струкrурна схе~ш 
На вищезазначеній схе.мі можна побачити, шо користувач взаою.:rїє з 
елементами програми через інтерфейс, де представлені певні незалежні о.JНа 
від одної підсистеми, але деякі можуть почати роботу лише після почаn.·у 
роботи інших елементів, наприклад створення кmочів сmmолів відбувається 
одразу після кодування даних. 
Функціональна схема являє собою схему взаємодn ко~шоненnв 
програми з описом інформаційних потоків, складу даних в потоках 1 
вказівкою використовуваних файлів і пристроїв [16]. 
На відміну від вищеописаних структурних схем, функціональні схе~ш 
несуть в собі більше інформації. Окрім загального опису підсисте~1 та 1-х 
взаємозв 'язків на функціональних схемах т-акож відобрЮі\·уються додаткові 
елементи, наприклад, збереженні дані, шо позначають табшщі чи інші 
структури даних, пристрій, шо запам'ятовує дані які зберігаються в 
оперативній пам'яті чи магнітних дисках, документ, що позначає дані які 
виводяться на друк, ручне введення, що позначає ручне введення даюІХ з 
64 
В ідсканоsuно за допомогою CamScanner 
ЧДТУ 232225.02R І ІЗ 
клавіатури та дисплей, що 110 11а 1шс ,r\анні які nиnоляться на лисплсй 
комп' ютера. 
Функціональна схема для розроблюваної системи виглядає наступним 
чином: 
Інтерфейс 
користувача 
Термінал для Підпрограма длR 
введення тексту завантаження 
фа11лів 
айлу 
нтаженн 
роrраму 
ПіДnроrрама длR Підпрограма длR Підпрограма для 
створення кодування декодування 
ключів символів дан11х даних 
Підпрограма длR 
збереження 
даних 
символів 
закодован11м11 
даними 
Рисунок 4.2 - Функціональна схема 
На вищезазначеній схемі описано роботу системи вщ введення або 
завантаження даних до створення файлу з закодованими даними. Відповідно 
схемі користувач використовує інтерфейс для вибору даних, потім обирає 
одну з функцій представлених в програмі, а саме кодування або декодування 
даних. У випадку з кодуванням даних користувач отримає файл з ключами 
65 
Відскановано за допомогою CamScanner 
\ 11111 11 і1 1 11 чо ІІ!Н і ( 11 , 1(, І' І ,,, 
:н1 011 f 1 ;н, , • ?, 'І ' f 
, ,,, , 
1
"t' І ' 1 н· 1 ·111•1 10 е 1111Г1 1 ч ,, 
" , ' 11 1, · 
,,y 11v 11110 r . po1r1111y, !іІ/11~ . 
,1. 1J  ( ) 111н· ,сн і 1 11 1 0у · х • ., , 
" м 1, ' 11 / ' 'А И 
J Іш і•111 11 • rм·1 с • •~· • . • . • 
' 11 1 м І1 1111 fІІ 1 І'АІІІУ f!l j l фуІІ УІІІОІІ~ 'Jf , НСJІ J:j С.Т . r, •и 
0
,•._· х· "•· М ШІІ1 С (' ІІ ОС JІІ /І ()JІІІ ·1 ·1 І , / I ·I ,,·t  коrн с; 1 ува• 1 а 1111 1 В ·1• 1 И~НІ' . 11 
101о  1 1н і11111ш о сф к , у afio r,c•1ymi·ra ry. 
no 
створення файлу з ,,.______, І":ОдУвання ~----· створення дереаа 
ключами символів даних Хафф1.~а на 
декод,,ван:.~.я 
_ __д_ а_н_v._х __/  
збереження 
закодованих даних 
Рисунок 4.3 -Логічна схема 
66 
В Ідскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
Робота з програмою починається після запуску додатку і вибору даних 
для роботи: 
Якщо користувач має файл з даними в1н може завантажити його 8 
програму для подальшої роботи; 
Користувач також може . 
ввести даю напряму через термінал 
інтерфейсу; 
Далі користувач обирає функцію кодування своїх даних, після чого 'іх 
можна розкодувати до початкового стану або ж зберегги у файл. 
4.1.4 Розробка бази даних 
У моїй програмі не передбачено створення бази даних через деякі 
основні причини. 
Перш за все, алгоритм Хаффмана зазвичай використовується для 
тимчасового кодування та декодування даних без необхідності зберігання їх 
у постійній базі. Крім того, моя програма призначена для демонстрації 
алгоритму Хаффмана, тому вона має обмежений функціонал і не передбачає 
потреби у постійному зберіганні даних у базі. 
Я вважаю, що для цього конкретного проекту використання бази даних 
не є обов'язковим, оскільки мета полягає у роботі з алгоритмом стиснення 
даних. 
4.1.5 Розробка інтерфейсу користувача 
Інтерфейс системи розроблений за допомогою бібліотеки Java Swing. 
Java Swing є бібліотекою для розробки графічного інтерфейсу 
користувача (GШ) в мові програмування Java. Вона надає широкий набір 
компонентів і можливостей для створення різноманітних інтерфейсів, що 
спрощує процес розробки програм з віконним інтерфейсом. 
Swing вкmочає в себе компоненти для створення в1кон, кнопок, 
текстових полів, списків, таблиць, меmо, вкладок і багато інших елементів 
інтерфейсу. Ці компоненти можна налаштовувати, розміщувати на вікні і 
взаємодіяти з ними за допомогою подій[ 17]. 
67 
ВІдсканоеано за допомогою CamScanner 
"""''''''''''"'"'' 1s ,,.•,,,i 1 11 1
r • \ 11111 11111 \1 !1111111111111111 1, р111 • tІ/ІІІН 11 11р І 1 1 ІІ 1 1'1' ,  1111 111 
11
, , ·р:11\1і 1 11111м І111~р1\н•іІt·,щ, 111, \ 11~, ,у ,,. 1' ,, , 1 11111• 1,111111111 
11 11 111111111 1111 11 11111 1
сІІt'І 'МtІХ, ,·~,ю,х 11
' \\f ІщІщ,,н , 11111,•()S І І , І1111 х , І.Іо11Іі1111 1,11 м 1 11 11111рнt 1
11 11111 ,. 1' 
1
мнж.11111,щ•,~і\ J\.111 '''-'Ру111111111111111 •.~нщщ, І 1101,,,н\111,11111 ,1 1 11•щ111 І 1, І11111рф1 · ІІ• у,, , 
ТІ'"''ж J\ШІ \Н.'Ш1і · 11щІУ н·,щ•мщ,І\' ,1\ \оJщ,• ,
1 1111 , 1 ,,м . 
0J\ні,·ю ·, І'\)JІощ~ІІІ\ "'-'Р'-'11111 ' 11111,щ11н" 1 ·11111111 N,v\11p, 1· 111111, 1111·0111 1'
1 1111 1111 ' 
11~Р'-'1ю~ІІІ\ІІ)~Ті, Кщ\, 111н1щ•1111111\ ·1 11111 ,,рщ• 1 ·н111111м N,vl11p., м11,t( 1111 · 1 1 111у 1 • 111111 11 11 
бущ,-нкіі1 нщ~т,\юрмі. ж• 11 · · 1 ·111н111н,ч111 11Ін111111Ін11 1 1 ~н·р1 · І11 .l11v11 І< 1111111111 
lЗt\\І it'\)1\1\\~l\t (JI{ \ ~). 
:J:ШJ\НКІІ ")УJ\011111111м мш1 .11111ю~· , ·11м 11Іюр11м111 ,н 1111<0'{ ' 111•11 ' · 1 
ком1ю11~11тів, tl 'І'ІІІ<ОЖ 1щ· 111111рю1111щ1 ''І'і ' ІІІ НСІІІОМІІІ '(ІІІІ І\О)\( І' /1 0111/ Х , І ,н С,'ІІ ' І І І І 
ро· 111111 сш), 1
J11v11 ~"' i11g ·111m1111111 ·т1,l·.i 1щ1111м 1·1 • 1ру 1 11111х І 11011ут1р1111 х 1111 ,t,pl,, 
ДJІ)І стuор~11ш1 11)афіч11щ ·о і1п'-'рф Іkу I ор11 ·ту111Р111 1111ро1р11м11х 1111 .l11vi, , 
Ос1ю1111uю м~тою 11р11 "І 'ІІор 11і І 11т'-'рф 11 •у ,ут, · ,ро ,11·111 ІІс11 о 11ро "1І ІМ 
та зрозуміJ1нм дш, бущ,-)ІІ<ш ·о 1<орщ:ту1111 1 111. 
-~ -Hulln-1an E-ncod-lng/-Oc·cod-lng --·-------------~ 
11 / 
l Ёnс~о 11 Dccodo J Tlnio: І Cloor 11 Lоо1І 1110 J \ Sovo І ricodьd Unla 
Рисунок 4.4 - І11тсрфсйс 11ru1 ·raми 
ВІдскановано за допомогою CamScanner 
ЧДТу 232225.028 ПЗ 
Інтерфейс (Рисунок 4 4) б 
· по удований таким чином , щоб дати 
користувачеві зручний доступ до основних операцій програми. Кнопки 
дозволяють виконувати операції з кодування та декодування, очищати даю 
зава нтажувати та зберігати дані . 
Цей інтерфейс розроблений так, щоб бути простим і зрозумілим для 
J<Ористувача, надаючи йому доступ до основних функцій програми з одного 
вікна. 
Також при кодуванні тексту буде з' являтись повідомлення про 
створення файлу 3 ключами символів (Рисунок 4.5) та їх перелік (Рисунок 
4.6). 
Q) File With keys created: huffman_keys.txt 
Рисунок 4.5 - Створення файлу з ключами симвошв 
х 
5
!E01n1c1od0e1 d01 0tn1·n0~·11 10100 101 о 1 оо 111 11 1101001 11 011111011000110010 1010000001 1100 CD нunman Codes: 
: 0100 
rigln al азtа slz.e Іn мs 160 ons 
~ncode d Qal3 5 Іlе ІП 01\~ 72 OIIS с: 0101 
т: 011 
я : 11100 
в: 100 
д: 11110 
е: 101 
1: 11101 
л : 0010 
Іг.0011 
н : ооо 
о: 110 
п : 11111 
~ 
І Encode І \ Decode .І  Тіmе: /.  СІеа ; 11.  LOCІd F1Іе 11 save Encode<I Data І compress,on: 55,001-о 
Рисунок 4.6 - Повщ. омле ння ' що містить перешк КЛЮЧІВ СИМВОЛІВ 
69 
В ідскановано :за допомогою Cam Scan ner 
r 
ЧДТу 232225.028 І І З 
4.1.б Опис розробки nporp 
амних ком11011с1~тів 
ПроJl)амний компонент _ 
це структурна одиниця компо11е1пно­
jє1-tтованоrо програмного забезпе 
ор . чення, Що має чітко виражений інтерфейс , 
ий ПОВНІСТЮ описує його зале . . ~ 
яt< жност~ ВІД програмного оточення . Такни 
мnонент може бути незалежно . 
J(O nщключений до складу певної системи , чи 
алений з неї. Для кожного . . ~ 
вид компонент ~снує виділена множина операц,и 
( иrнатура), які може виконати . 
с користувач, наприклад: натиск кнопки, вв~д 
сту в формі, вибір одного чи · . 
теІ< деюлькох вар1антів із списку запропонованих 
і т.д. - такі дії називаються подіями[18] . 
4.1.6.1 Опис компонентів 
- JFrame: це головне вікно програми, що м1стить в собі всі інші 
компоненти і відображається користувачеві . Він надає контейнер для 
розміщення всіх інших елементів GUI. 
- JTextArea: елемент інтерфейсу, який дозволяє відображати та 
редагувати текст. Використовується для відображення енкодованоrо тексту 
та показу розм1ру початкових та закодованих даних. 
JВutton (Encode, Decode, Clear, Load File, Save Encoded Data): це 
кнопки, які реагують на події натискання користувача. Кожна кнопка 
відповідає за виконання певної дії, такої як енкодування, декодування, 
очищення тексту, завантаження файлу та збереження закодованих даних. 
- JLabel: це компонент, який відображає текстову інформацію. У 
моєму випадку використовується для відображення ступеня стиснення у 
відсотках. 
- Node: це клас, що використовується для створення вузлів у дереві 
Хаффмана. Він зберігає символ, частоту його входження в текст та 
вказівники на дочірні вузли. 
- Huffmanlnterface: це інтерфейс, який визначає методи для 
кодування, декодування та очищення тексту, які мають бути реалізовані 
класом. 
70 
Відскановано за допомогою CamScanпer 
ЧДТУ 232225.028 ПЗ 
_ SwingUtilities: це ут · u 
. ИЛІтнии клас, який забезпечує доступ до деяких 
нених метод1в для взаємоді"
J<OP 1  3 ф' 
гра 1чним інтерфейсом, зокрема виконання 
дій 8 потоці обробки подій Swing. 
4.1.6.2 Опис методів 
І HuffmanGUI: 
. .ti liz с 
- ІШ а е omponentsO: ініціалізує всі компоненти у вікні . 
- addComponentsToPaneIQ: розміщує компоненти у панелі та 
додає їх до вікна. 
- addActionsToButtonsQ: додає обробники подій до кнопок. 
- addComponentsToFrameQ: додає компоненти до вікна. 
- encodeText(String text): кодує введений текст методом 
Хаффмана та відображає закодований результат. 
- decodeText(Node root, String encodedString): декодує 
закодований текст, використовуючи дерево Хаффмана, та 
відображає розкодований результат. 
clearTextQ: очищує область введеного тексту та вс1 змінні, 
пов'язані із стисканням. 
- updateCompressionPercentageQ: оновлює відображення ступеня 
стиснення у вщсотках. 
- printHuffmanCodes(Мap<Character, String> huffmanCode): 
виводить у консоль таблицю кодів Хаффмана для кожного 
символу. 
_ buildНuffmanTree(String text): будує дерево Хаффмана на 
основі вхідного тексту. 
_ openFileQ: відкриває файл і відображає його вміст у текстовій 
області. 
_ saveToFile(String data): зберігає закодоваю даю у вибраний 
файл. 
2 Node: 
71 
ВІдска1-1овано за допомогою CamScanner 
r 
ЧДТУ 232225.028 ПЗ 
- Node( char сЬ int f 
' · req): конструктор, що приймає символ та його 
частоту. 
- Node( char сЬ, int fr e 
~ q, Node left, Node right): конструктор, шо 
приимає символ ча 
' стоту та посилання на лівий та правий вузли. 
з Huffmanlnterface: 
- encodeText(String text)· 
· метод для кодування тексту. 
- decodeText(Node 
root, String encodedString): метод для 
декодування закодованого тексту. 
- clearTextQ: метод для очи 
Щення тексту. 
4.2 Тестування системи 
Тестування програмного забезпечення - це: 
- процес дослідження ПЗ з метою отримання інформації про якість 
продукту; 
- процес перевірки відповідності заявлених до продукту вимог та 
реально реалізованої функціональності, що відбувається ІІШЯХОМ 
спостереження за його роботою в штучно створених ситуаціях та на 
обмеженому наборі тестів, вибраних визначеним чином; 
- оцінка системи для того, щоб знайти розбіжності між тим, якою 
система повинна бути і тим, якою вона є. 
В широкому сенсі, тестування - це одна 1з технік контролю якосп 
(Quality Control), яка включає планування, складання тестів, безпосередньо 
виконання тестування та аналіз отриманих результатів. 
Важливо розуміти, що тестування ПЗ включає власне не лише 
проведення тестів, але й багато інших дій, які пов' язані із процесом 
забезпечення якості: 
- аналіз та планування; 
- розробку тестових сценаріїв; 
- оцінку критеріїв закінчення тестування; 
- написання звітів; 
72 
Відскановано за допомогою CamScanner 
ЧДТУ 232225.028 ПЗ 
рецензування документації (в тому числі і джерела коду); 
проведення статичного аналізу[ 19]. 
4.2.1 Модульне тестування 
Модульний тест (Unit Test) - це спосіб тестування блоку - найменшого 
фрагмента коду, який можна логічно виділити в системі. У більшості мов 
програмування це функція, підпрограма, метод або властивість (20]. 
Призначення одного модульного тесту _ це тестування певної, 
визначеної, поведінки тієї чи іншої функції, всередині коду. у спіх чи невдача 
такого тесту є валідацією обраного блоку коду. Коректно написані тести 
створюють середовище, чи сценарій роботи, що є незалежним від зовнішніх 
умов і дозволяє виконати певну функцію і перевірити на певний, очікуваний, 
результат [21 ]. 
J test х l1uffn1anJ :eys.txt 
public > J tЄ:st 
1 i mport org.junit.jupiter.api.Test; 
2 
3 i mport static org.junit.jupiter.api.Assertions . assertEquals; 
4 
5 public class HuffmanGUITest { 
6 
7 @Test 
8 public void testEncodingAndDecoding () 
9 HuffmanGUI huffmanGUI • ne11 HuffmanGUI(); 
10 
11 // Кодування т е ксту 
12 String original Text • "Тестове nов1доr,•.ле н ня дл я код,1 ва нн я та де кодуаання, "; 
13 huffmanGUI.encodeText (originalText ) ; 
14 
15 // Отр има н ня з акодованог о рядка з GUI 
16 String encodedString • huffmanGUI.getтextArea ( ) . getтext () ; 
17 
18 / / Декодува ння за кодов аного рядка 
19 huffmanGUI.decodeText(huffmanGUI.getRoot(), encodedString); 
20 
21 // Отрима н ня роз кодо ваного рядка з GUI 
22 String decodedString = huffmanGUI .getTextArea ( ) . getText(); 
23 
24 // По рі вняння поч ат ково г о та роз кодованог о текс~у " . .. . 
25 assertEquals (originalText, decodedString . substr1ng( Decoded str1 ng : \ n .length ( ) )) , 
26 } 
27 _} 
Рисунок 4.7 -Приклад модульного тесту 
73 
Відсканое.ано за допомогою CamScanner 
"1,Цl'У 232225 
ІJеЙ тест (Р исунок 4.7) був ,028 Іlз 
J,f ~етодів кодуваннsr та РозробJJениц дJJя n . 
0бо1 декодуваuu ерещрки nравильності 
р 11.11.S( в КJJ . 
~1o~te ttr»: aci Huffm an GU І. Ось основні 
_ тестування кодуванн . 
я. сnочат . 
уватися. Потім ви І<у ВІН отримує " 
бv/J.e J<Од кликається м початковии текст, який 
1 Huffm р етод encodeT " 
g11rоритмом an. езультат І<о ext, якии кодує цей текст 
зв . ф " дування збе • 
Q1'1 'e)(tArea) ІНrер еису користувача . р1rається У текстовому полі 
_ тестування декодуванІЦ• . 
. n1сля коду 
який подається на вхід вання отриманий закодований 
reJ(CT, Методу decodeTe " 
J<Одувати текст та результ xt. Цеи метод спробує 
роз . . ат розкодування 
товому пош ІНтерфейсу корне також зберігається у 
reJ(C тувача. 
- перев1рка коректності: після 
декодування 
івІІЯННЯ початкового текс . тексту проводиться 
noP ту І тексту, який б в " 
ю методу assertE У розкодовании, за 
допомого qua Is . Це доnомага 
є виявити будь-які розбіжності 
')І( початковим та розкодованим 
rJI текстами, які можуть свідчити про 
роблеми у роботі методів кодування та тт декодування. 
4.2.2 Інтеграційне тестування 
Інтеграційне тестування зазви ., • . 
чаи вщбувається шсля модульного 
тестування, яке передбачає тестування окремих • • б .· п· 
МОДУЛІВ 1 ЛОКІВ. lСЛЯ 
визначення того, що кожен блок працює ізольовано, інтеграційне тестування 
оцінює, як усі блоки працюють у поєднанні. 
Інтеграційне тестування - це поетапний процес, який зазвичай 
вимагає від тестувальників інтегрувати модулі один за іншим і проводити 
тестування на кожному етапі. 
Тести інтеграції залежать від чітко визначеної специфікації інтерфейсу 
м1ж компонентами, що тестуються. Ці тести мають бути максимально 
автоматизованими, щоб їх можна було часто запускати, щоб виявляти 
проблеми на ранній стадії, перш ніж вони стануть складними проблемами, 
які потребують часу та ресурсів, щоб виправити їх пізніше в процесі 
74 
Відскановано за допомоrою CamScanne, 
ІІ ,ter.Oд)'E ol'4"A н ,: tt) 
5..,1. r.sUt111t1ts .1nvokllJttr( О . ) { 
tиtдr!І. Sft'f txt ( t ncodt~T~xt ); 
d«od•ЄJtton . dOCllck ( І ; 
Рисунок 4.8 _ Прикла . 
д Інтеграційного тесту 
У цьому тесті(Рисунок 4-S) ми спершу ініціалізуємо GШ, потім 
використовуємо кнопки для кодуванн 
я та декодування тексту. Після цього 
ми порівнюємо початковий текст розко 
... 3 
дованим текстом, щоб переконатися, 
що функцн кодування та декодування працюю 
ть правильно. 
4.2.3 Системне тестування 
Системне тестування основним завданням є перев~рка як 
функціональних так і не функціональних вимог у системі в цілому. При 
цьому виявляються дефекти, такі як невірне використання ресурсів системи, 
непередбачені комбінації даних рівня користувача, несумісність з оточенням, 
непередбачені сценарії використання, відсутня або невірна функціональність, 
незручність використання і т.д. Для мінімізації ризи.ків, пов'язаних з 
особливостями поведінки системи в тому чи іншому середовищ~, шд час 
тестування рекомендується використовувати оточення максимально 
наближене до того, на яке буде встановлений продукт після релізу[23]. 
Тести було проведено для кожно~..  з ш·д систе м , що виконували 
75 
Відскановано за допомогою CamScanner 
ЧДТУ 232225.02~ І П 
.1)у11кuії тn для с11стсм 
'І 11 " нілому. Тес "' , ІІІІІ 'J ІІf!{Щ(НІ, 11 І ' І У ІІІІІІ І 
Таfіш1щ1 J(мJ , І 
Тестуn~ншя GUІ 
- -
/ Тест Опис тесту Тест Тсс г 
Jfo ІІfЮ~і/(СІІО riro11::iлc 110 
L.---
V Введення тексту та ncpcвirкn 
}(лік на кнопку 
відображення закодованого 
''Encode" + 
І 
варіанту у текстовому полі 
L---- ---- Перевірка розкодування, -
J{лік на кнопку 
відображення результату у 
2 "Decode" + 
-- текстовому полі 
~- Очищення текстового поля після 
J{лік на кнопку 
виконання операцій 
3 + 
"Clear" 
кодування/розкодування 
L.--- Збереження та Збереження закодованого тексту 
4 завантаження у файл та його завантаження, + 
файлу перевірка результату 
- Клік на кнопку Спроба кодування пустого 
5 "Encode" з тексту, очікування повідомлення + 
відсутнім текстом про помилку 
Клік на кнопку + 
"Decode" з Спроба розкодування пустого 
. . . . 
6 вщсутюм тексту, оч1кування повщомлення 
закодованим про помилку 
текстом 
Завантаження Спроба завантаження файлу, + 
7 вщсутнього який не існує, очікування 
файлу повідомлення про помилку 
: 
Таблищ1 №14.2 
76 
ВІдскановано за допомоrою CamScanneг 
чдтv 2з222s.02s nз 
Тестуnа1111я А 
JJrop11тм 
/ У "одуn 81111
Тест R Хаффма11а 
]{~ Опис тесту 
Тест Тест 
/ ~одування Спроба кодуван пройдено провалено 
тексту без ня пустого тексту 
І та nepe · . 
в1рка в1дсутності 
симвошв 
результату + 
V ~одування Кодування тексту 
одного з одним 
2 символом . 
та nерев1рка 
символу 
правильності результату + 
V Кодування 
тексту з Кодування тексту з р. 
1зними 
3 різними символами та пер . 
ев1рка + 
символами правильності результату 
V- --кодування 
тексту з Спроба кодування тексту з 
одним низькою частотою символу, 
4 
символом та очікування неефективності + 
низькою 
кодування 
частотою 
-
Таблиця №4.3 
Тестування Алгоритму декодування Хаффмана 
№ Тест Опис тесту Тест Тест 
пройдено п_ровалено 
Декодування 
Перевірка коректності 
1 закодованого + 
декодування закодованого тексту 
тексту 
2 Декодування Спроба декодування тексту з + 
тексту з некоректною структурою, 
помилковою очікування повідомлення про 
структурою помилку 
77 
Відскановано за допомогою CamScann@r 
де ~<О дування 
3 тексту з Спроба де•одУваuuя те•сrу без Продовж. Табл. №4. 3 
відсутнім Побудоваuоrо дерева •одуваu11я, + 
0
деревом чіі{)'ваuuя повід0Млеu11я про 
nо  милку 
1<одУвання 
- ------------.Jt__ __ ___._ -
Тестува1111н ФУ111<ції збере>1<е11он та заваnтажеТиаnбял иця №4.4 
Тест 
Оnис тесту 
Тест Тест 
збереження Сnробаф з б., ереження . п ойдено повалено 
файлу без орожнього аи.л у та перев1рка 
даних виведення nов1домленн.я npo + 
неможливість збереження 
Збереження файлу з вмістом 
Збережеьня наприклад, ЗаJ<одований те•ст) 
2 файлу1з 
текстом та перевірка наявності + 
збереженого файлу 
Завантаження 
файлу, Спроба завантаження файлу, 
вказуючи некоректний шлях, 
з введення 
некоректного очікування виведення + 
повідомлення про помилку 
шляху 
Завантаження 
файлу, 
Спроба завантаження файлу, 
введення 
вказуючи правильний шлях, 
існуючого 
4 але з файлом іншого формату, 
шляху, але з + 
очікування пов.щ о мленвя про 
неправильним 
помилку 
форматом 
файлу 
78 
Відскановано :за допомогою CamScanпer 
Тссту11а 111111 11 · 1 аб,1 1111.я J ·... • -
001 101 
_,, н 1 1 
1"
Тест 
І ;\'~ О11ис 1ссту -
 кл-у -J)of-io1- tt с- tt-сте,ш . 
Тест ·r ест 
/ ~ення нрой а.с ,ю I провалено , 
тексту та Введення тексту, кодування 
йог 
кодування, о , а nотім сnроба декодувати І 
І зак 
після чого одований текст, перевірка на + І 
декодування відповідність 
,,.,,,- Спроба к одування порожнього тексту, : 
закодувати 
2 перевірка відповідності 
по рожній текст 
+ 
отриманого результату 
L--~ження 
закодованого Збереження закодованого 
тексту в файл тексту у файл, а потім спроба 
3 та подальше завантаження цього файлу та + 
його декодування 
завантаження 
~ 
І-- Введення 
тексту, 
Введення тексту, кодування, 
кодування, 
очищення поля вводу, введення 
потім 
закодованого тексту, 
4 очищення, ' 
декодування, перевірка ' 
введення 
відповідності результатів перед 
закодованого 
та після очищення 
тексту та 
декодування 
Проведення 
Спроба декодування тексту б ез 
декодуван ня 
попереднього кодування, 
5 без + 
очікування виведення 
попереднь ого 
ПОВІ. До млення про помилку 
кодуван ня 
79  
І 
Ві дскановано за допомогою CamScanner 
ЧДТу 232225.028 І ІЗ 
4_2.4 Пр1tіімапь11е l'есrування 
nІ,нНмм1)не тестування 
11Р0водит1,ся 
uольня є система прийма.л . 3 
1 ьщ критерії та мстою: ни1щ1t1с1111я •rн 
з1 J1° У повноваженщо Осо 6 Пр м винесення рі1uс1111я 1амов11иком 
· UJOIO 010 ... 
n6o ,н .., иимається програма чи ні. 
Приимальне тестування виконуєтьс . . 
Я ВІДnов~дно до Плану приймальних 
робіr. 
рjwення про проведення nриймал 
т досяг необх.щ ноrо рівня якос · ьного тестування приймається, коли : 
11родУК 11 та замовник ознайомлений з Планом 
11 " альних Робіт (Product Accept РІ 
рнИМ . . .., , ance an) або іншим документом , де 
са.}І
0 ий наб1р дш, пов язаних з проведенням 
nн приймального тестування, 
дата проведення, відповідальні і т.д[23]. 
Оскільки програма розроблювалась в рамках магістерської роботи , 
внконання приймального тестування проводилось мною. В результаті 
тестування було виконано кроки зазначені в попередньому розділі[Таблицj 
4,1.4.5]. Результати приймального тестування співпадають із результатами, 
отриманими в попередньому етапі та задовольняють встановлені до системи 
вимоги. 
4.3 Приклади впровадженого програмного комплексу 
Робота з додатком розпочинається з вибору двох методів введення 
інформації: 
в першому випадку користувач може самостійно ввести необхідний 
текст в термінал програми. При запуску додатку можна одразу почати 
введення тексту як це показано на Рисунок 4.9 
t• І · ~ " ,! rr:t ' J .'І ,: :! І 
!r2:JJ_. :;: •1~ .. ,:. •,.:r н .. .. 1; .. - r,.. .,',.• • 1 ,1·.. · .r. s. , ,I 
( 1, . 1 І І І . 
Рисунок 4 .9  - введення тексту в термінал 
80 
Відсканоеано за допомогою CamScanner 
ЧJПу 232225.028 І 1· 
Н другому внпu,н,у І<о \ 
J)ІІстуnач мо 
6JP  ()6КІІ текстом о • р, же зnщщтnж І " 
СІ<омсн.цу 11111 оnш, 1 уже , (но1111м 
;1.11~ .. • ~оться Фаіілн 
і611і фnнлош розшнрення. 3 
1 . rю111111 rс1111ям .(lnc .txt та 
,,<,J\ акож СJ1ід У 
11 н1 для коректної роботи n ІІ11кан1 фаііли з ІІс тсксто11111'-нI 
1111~• Роtl)ами Дл 
І' натне НУТИ Н а кнопку Load • , Я ЗUO«\\T·a 1w1\ СІІІІЯ <І,v а•н· лу 11собХІ/• \ІІО: 
file n1сля t • 
• ,торії файлу(Рисунок 4 · 1О ) ІОrо 3 явиться вікно з Аибором 
~,,рс;;І< 
r,.-t• Open 
х 
О АнrлІйсьt:ий теt:ст.dосх ----• -[сю \а ] [q.J [gg:lg= 1 
-- - - -
О Китайський текст.dосх 
О УІіраїнсьt:ий текст.dосх 
File Name: 
Files of ІУре: tд[~ІІ ~Fi~le;s= ====================~=~~~~~~~;Jd 
І ·І 
[ Open J I Cancel І 
Рисунок 4· 1О  - Вибір файлу для завантаження 
Після вибору файлу треба натиснути на кнопку Open зображену на 
Рисунок 4.1 О для того щоб вм1ст файлу з· явився в терміналі 
програми(Рисунок 4.11 ). 
~ Huff n1an fn coain~/Dєcoain~ о х 
Рисунок 4.11 - Текст з файлу Китайський текст.dосх 
81 
Відскановано за допомогою CamScanner 

чдту 2з222s.028 nз 
:, '"'r •r,, 2 ,.,,, 
11"1t,.." (ос, • ., r • 
І : е1141еа 
1, е1ееее Q) ,-.,,,...,t,. ... >: 
І : 01!~1 n 011 
' : 01),)е І ОІОІС)о 
І : ІІ!!ее , оноо, 
) : et00e1 • • Ооо,) 
І : 18118 І') ІІООQ 
І : е11е1 1. 0lllfl01 
' : 1е1еее "10010 
І : l&eete 11>. ttщ 
І : 1te1e1 • , 101оео 
І: 11181 :,;, IOODIQ 
І : 811111 ft 110101 
, , 09810 
І: 111ео ,., ""' 
"-011111 
, : 1е1ее1 lt ООо10 
І : 181818 fl. 11100 
І : е1ее11 \11; 101001 
І : 1te111 fl.: 101010 
І : 18ее11 іІ: 01~11 
1: 11е1ее С.110111 
І : е1е1ео 
ІОО.11 
І : 810181 lt. 110100 
І : 181118 
!t: 010100 
І : е111ео 
"- 010101 
І: 011181 
Je. 101110 
І : енне 
І,: 011100 
І : u1111e 
І : ІЩ111 Іt: ОІІІОІ 
1\:0111!0 
І : 11118 
І : 111118 Jt: 1111110 
І: 100111 " 1111111 
h : 11110 
1\: 111110 
А.: 1001 11 
" ' 101101 
Рисунок 4.1 З - Повідомлення з кточами та вміст файлу ключів 
Далі користувач може натиснути на кнопку Save Encoded Data для того 
щоб зберегrи отримані дані в файл. Також необхідно задати розширення 
файлУ, наприклад як це зображено на Рисунку 4.14. 
- - -- - - -
• r : ::! g Ге · -· n; --------.. _ -- - -- -
- - п ~ 
f10d1S1t0пn0g0:1  111 1 0 1 00100 1 000100010 1 110011000010101 101101111 1011101011001001 100011101111011101011 0 111о1 оо110111111 
1ginа І d.;ta s1ze Іn oits: 528 Ь1ts 
11;00 ed огtа size Іn ьns : 370 ь1ts ~ Sav~ 
х 
Save Jn: !□ тест І ·І @оJ[§[g І Ів·gІ8= / 
D АнглІііськмй текст.dосх 
D Кмтакськміі текст.tх1 
D Укра,нськмй текст.111 
Flle fiame: І ет11снен11 і1 текст.tхі І 
Files оІ Jype: І АІІ Files І · І 
І Save 11 c ancel І 
4 .JІ 1:1 __[ -1 • 
EncOde / І- ~Dec-ode І Тіmе: 00:02.084 1 Clear 11 l oad Fl e 11 save EncOded Data І c ompresslon: 29,92!'. 
І 
Рисунок 4 . 14 - Приклад збереження інформації 
83 
Відсканоеано за допомогою CamScanner 
r 
ЧДТУ 232225.028 ПЗ 
І1ісля натискання на кнопку Save 
cniUJHe завершення операції зб користуваt1 отримає повідомлення 
~ро У ереження Файлу (Рисунок 4.15). 
] L111 "'tt-<111'1 1t-1 ri t~t І 
"l(І НІ" І 
Ф~•1п Праок, Фор"" / 1 
Е ncoded string: В,~, Cnp,r ,., 
0011110110001111101001001000100010111001100 
Original data size 1 
Encoded data siz 1 "ьbits : 528 blts 
е " its: 370 bits 
х 
CD Entoded data 5 -
aved Іо ІІІе successfully! 
Стр 1, стпб 1 100% UNІX (lFJ 
ІЛF-8 
рисунок 4 .15 - Вміст файлу з збереженими даними та повідомлення про 
успішне створення файлу 
Після кодування даних У користувача є можливість декодувати дані 
натиснувши на кнопку Decode (Рисунок 4.16). Якщо натиснути на неї без 
попередньо закодованих даних користувач отримає повідомлення про 
помилку (Рисунок 4.17). 
~ Huffm,n Єncoding/Occoding - □ х 
' 
Encode / І 'Oecode' / ТІmе: 00:00.002 г~::=:-1 '1 -LOІdf-lle J I-  Save Encoded O.ta І Compresslon: 29,921, 
Рисунок 4.16 - Процес декодування 
84 
Відсканоеано за допомогою CamScanner 
tf/П У 212225.(12К І В 
/ 
f ,, е,,,,,,, t,:,t ,,,, . 
j 
Рисунок 4.17 - ІІомилка декодунання 
f-{з бу/1ь-якому е1ані робти 1 програмою можна на1иснути на кноnК)' 
. uикл 
0чис1и1ь 1срмшал для 1ого щоб можна було повторити 
J-{з 0с 1юві проведених 1ес-rів можна зробити насrупні висновки: 
програма успішно кодує та декодує вхідний текст за допомогою 
мУ Хаффмана. Тестування показало правильність створення коду 
а,1rорит . .. 
ф at-fa ,[JJJЯ симвошв та 1х коректне розкодування. 
~gф ~ 
Функuії збереження та завантаження даних праuюють належним 
Програма здатна зберігати закодовані дані у файл j потім успішно їх 
qfiJ10M• 
віJІfворJОвати . 
Інтерфейс програми інтуїтивно зрозумілий та простий у використанні. 
усі ,снопки та функції реагують на дії користувача, надаючи очікувані 
результати . 
Програма показала високу стійкість до помилок. Навіть при великому 
обсязі даних і некоректних вхідних значеннях не виникають критичні 
nо~илки. 
у цілому, програма працює ефективно та швидко, обробляючи навіть 
великі обсяги вхідних даних. 
Ці тести показали, що програма відповідає основним вимогам 
функuіональності, стійкості та коректності роботи. 
85 
Відскановано sa доrюмоrою CamScanner 
1111<110Іl~ІІ 
,, ,. · ,,· r , 1.  
. 11".1111q  .1 .,11 ІІ\. "" к,)JЧІС н.ч,ую'І 11 1 П'J'" rч Х ФФ" •"'·' · ' 11 
, І ~· І І 11. . .. . , ~снНІІ 
, ,: 1' • І\ 1 1 
,,11 fll;\l,\!H,IIO\\Y КО."\,\ f\:llllli CII\I R0.'1 i R n t,l. l (" ' ІНК ГІ Al 1t ІХ 
. ,111111 І • 
,,~,•t-- ,н1Я !lІІІl"'Я 1.·ф~кп1в1111,, і ІЮІШJfІВ RIIC()!I."\ ту11 і ІІf, ПІ 11с 1111я ;l•'""" · 
-it!I~• • 
,, ,, \ ї, 061.' ЯГ (ir 8f1'(\ fll ЇІІфОJ)МЗUії. 
1', ч 11 
· 11111~ ф АО\( 1 
:'І ''"' ~ .., фф~ШІІЗ Зt1.1111ШЗСТЬСЯ 3 KTYfi.'l bttllM \ ' С',' 'Н\ ІJ O\f ' U II р 
' '"'"1··  ' .. . . . . 
. ,1.·.я rн ,1зн11х поспнно зростають. І. .І оrо сфсп11в111· сть у ''t.":' tllll "flf ll 
~ ~ . 
,- ::іІ'· '.  ., ~нн•~ с к1ючовою для опn1м1з. ац1·1- ресурс,. в збер1. гання та п•t.: ре:·: ІЗЧІ 
,, ·"~' І'.°' ,,. 
•  ··· ~ерез :ш~реж,.· т акннV  метод стнснення даюtх с необ х'1 д1111 ~ , ~: 1я 
~,г~,.•1 Utl ... 
і~їч ння ефекп1вносrі обробкн і зберігання вел 111шх обсягів iнфop~taui, 8 
• •• 11c-ite 
:3tK • 
· ··· enox1. 
~ J',5111 
1 
' ' Пі;І чзс внвчення та виконання досліджень з алгоритму Хафф~tаН~-
шо хоча цей метод ефе11..їнвно стнскає дані, його реалізаu~я 
с11.10СЯ, 
~s~ . 
Ar"'lf ,1еякнх у~юв. Основна вимога полягає в тому, шо частоти с11~1вотв 
~;\!~І;µ .. 
· бути відо~шмн перед стисканням. Це може статн внклнком для 
nоs11нн1 
. сценаріїв де частоти символів можуть змінюватися ч11 бути 
nes~1r.x 
. 0,11L,ІJІ наперед. 
нestl · 
та.кож важливо враховувати, що для ефе11..їивноrо використання методу 
\аФФ~1ана, джерело даних має мати статистично стислий розподіл. У 
,, .,~"'' коли дані мають нерівно~1ірний розподіл ефективність стиснення 
sJПl"-'"J ' . ' 
оже буrи меншою. 
~ 
Помітно, що впровадження алгоритму Хаффмана ви~1аrає 
. . . .. ~ 
попереднього анашзу частот симвошв 1 ~хнього використання для пооудовн 
оппL,1альноrо дерева кодування. Тому, в певних умовах або змінних даних, 
ефекrивність його застосування :може зменшитися. 
В результаті виконання кваліфікаційної роботи магістра було успішно 
розроблено та реалізовано програму для стиснення та декомпресії даних 
86 
ВідскоІЮеено за дооомоrою CamScanner 
,.ц,1 у 2з222s.028 nз 
)(афФ1'•\ана. Проведене тес 
р.О~ тування дозволило nереконатнся 8 
,е10 -ri та ефективності розроблено 
~ tcf11oc го програмного продукту. 
,о?е ~ана система nродов~є . ,и 
" 011'" "'J важливу традицію в ranyз\ обро 6 к 
»сненняінформацїї нац 
, ,ra с1' ' аючи зручний інтерфейс користувача дня 
~ ~~ с-rанНЯ методу Хаффм ана. ВажлRвим. аспектом є можлив1·с ть 
оР\'\ 
а\\1' .,а 'Та завантаження закодованн·х є область 
11 )t(ennp н даних, що розширю 
3беFе ~a»llЯ nроrрами. 
с1осУ . . . . ... . 
з~ flро»едеnня р~зних вищв теспв, включаючи модульні, інтеrрац~ию та 
підтверджує надійність та стабіJ1ьність розробленого 
., !a,nьHl, 
{\\'i~ . ro забезпечення. Використання діаграм UМL при nроектуваню 
~{JiO 
11P0r1' uості та структурованості коду. 
~oSiCn 
ct1P 
а.льність теми зберігання та передачі даних в електронному 
л,}((У . . . ... чаючи 
. роб»ть дану систему корисною для р1зних областеи, вклю 
,irJUl}ll ... . ... б . Використання 
!!ri . "'ui техноnоrн, телекомун1кац11 та аrато шших. 
•аUНіп ... 
. ,hopt--. . • . ф ивність 11 
\\\\½' )(аффмана у програм~ шдсилює практичюсть та е ект 
.i e1°iri НЯ. для оптим1з· ац1.1..  о б ро б ки даних. 
р»с1аІ-І 11\it<O 
87 
onoмoroIO Carnscanner 
Відс.-;ановано за А 
·•1~1 · у 2з222s . 02R 111 
с 11 исок R•., ... К (н•ис,, 
ЛІІИХ /(ЖІ-:t•І-: І 
ст11с11 с 11ня JН1 1111х, ( 
:rirr-rя 
в 
111 11 ,s:// i11for111atics6.,vcЬнod , 
с.сон,.\щ /11 тср11 • г , 
)(од І uффмана, Ста~тя 
І,t1ps://нk.,1v1'k "1 ре d'1 a.org/wiki/Ko R Мер сж,.  І 11 тсрнс1 , UfH ,: 
д_ГаФФмана 
J{ормен , Томас; Лейзерсон 
J{ліфорд(20І9). 16.З: Коди ' Г Чарльз · р· 
· ' ~вест, Ронаш,д;Стайн , 
3), к . І .С . с. 443-451 . афмена. Вс,пуп до алгор1тшів (вид . 
Grady Booch, Jщnes Rurnbau h 
А 
1,a11gua ge Refereпce М g ' Ivar Jacobson · Th е Un 1· ri1 d М d
anual - Add' е о е  11· ng 
30998-Х, tson-Wesley, 2000. - 550 с . ISBN 0-20 І -
vRL·https://people.ucalgary са/ f: 
· · ~ ar1 L ectures/SENG60923/PDF/uml refman 
.pdf -
Процес моделювання предмети .. . 
5 01 област1, Стаття в мережі Інтернет, 
VRL: https://dou.ua/forums/topic/42366/ 
6 Journal of Theoretical and Applied lnfonnation Technology. 15 (1): І 8-23, 
VRL:https:// web.archive.org/web/201005241052 l 7/ http://www.jatit.org/vol 
umes/research-papersN ol l 5No l/3Voll 5No l .pdf 
7 Parallel Data Compression Techniques, Стаття в мережі Інтернет, 
URL:https://arxiv.org/ftp/arxiv/papers/2306/2306.11070.pdf 
8 Canonical Huffman Coding for Image Compression, URL: 
https:/ /ieeexplore.ieee.org/document/8586816 
9 Шевченко, В. В., & Іванов, В. І. (2018). Методи стиснення даних. 
!О А Method for the Construction of Minimum-Redundancy Codes, Стаття в 
мереж~ Інтернет, URL:http://compression.ru/download/articles/huff/ 
huffman _ 1952 _ minimum-redundancy-codes.pdf 
11 Huffman Coding, Стаття в мережі Інтернет, URL:https://ww\v. 
geeksforgeeks.org/huffman-coding-greedy-algo-3/ 
12 Алгоритм стиснення Хаффмана, Стаття в мережі Інтернет, URL: 
https://habr.com/companies/otus/articles/497566/ 
88 
В ідскановано за допомогою CamSca nner 
r ч;п У 212 
. 225.f12~ І І ' і 
J(оМП 'І отср111 Нсtук и , ·ІІ І ф<)J)'-1,н 1 Щ11 · , 
, І І ХІІ , , 1r1 fl'f J<aprн11 с ьки н 11a нio 1t tt ., . ·   
J1 P , 11'  , ~ 
1,1,и~.; у ,, · . 
tJ RL: l1ttp . ·./ / с . y~c• .pn11 .cdu .uij І,-..! 11 1 ' І .щ ,• 11 ·1  
Docurт1cr1tatiori for у · 
І u;i J 
111tps: // code.v  і · шJ\ stщJ і о .corn/<Joc1.i 
труктурна схема _ StudГІ . 
І С , 1а11~ 
t,ttps: //stud fi le.nct/prcvicw/5 R 1;_р І . : 
4 49231 
функuіональна схема _ Stud d' 
оре 1а с. . . 
. . · r,п ,я А .•-1 ср<;л- 1 J mcpн'i:"r . 
https://st1.Jdoped1a.1nfo/J -І J3 60?/ І ; f' І. : 
Java Swing Tutorial URL: https·//w . . 
17 . · · WW.javatpomt.com/java-, ·; in
особливосп компонентного nідх 6 . 
18 · оду У nporpa -1уванні , <.:·,атrя г •.r~ n'J 
Інтернет, URL: https·// 
· · с 1a rtu .t ntu.C<Ju . ua/Ьit~ rean 123 ~ ?/J, 
I6568/2NseukrStud_2016vI _Medvid_I-Features_of_componen - ар;;тr1~ГJ 
87.pdf 
19 Що таке тестування nporpa~нoro 1абе1печення'? , Стаття в мере---Л::: і 
Інтернет, URL: https://qalight.ua/Ьaza-znaniy/shho-take-te ru anлya­
programnogo-zabezpechennya/ 
20 What 1s Urut Testing. Стаття в .\fережі Інтернет. 
URL:https://smartbear.com/learn/autoIШlted-testing/what-is-unit-t.esting/ 
21 Paul Hamill. Urut Test Frameworks: Tools for High-Quality Softv.·are 
Development. O'Reilly - 2004, 212с. URL: https://Ьooks.google.com.ua 
/Ьooks?id=2ksvdhhn WQsC&printsec=frontcover&hl=ru#v=onepage&q&f=f 
alse 
22 Що таке інтеграційне тестування? , Стаття в мерелсі Інтернет, iRL: 
https://www.zaptest.com/uk/щo-тaкe-iнтerpauiйнe-тecтyвaння-г.-rnб 
23 Рівні тестування, Стаття в ~ереж~ Інтернет, 
URL:https://qaleaming.com.ua/theoryЛectures/material/testing,-le\rel s 1 
89 
В ідскаt-ІОВаt·ІО за ДОПОМОГОЮ CamScanner 
Додаток л 
Зnтнсрnжсно: 
С, J\.т .н. , ороф. 
Голуб С.В . 
с-r\-\сиення інформації без спотворення даних ме-тодом Хаффмаиа 
cJ''}I./J.'. ceuuя для ситуац.н..  нехва1'ки пам'яті 
~о С nеци'l,\'.:1 кац1. я 
482.ЧДТ'У 232225-01 
Листів 2 
розробник: -~'-і-_Шульга О.В. 
Керівник: Півень О.Б. 
Черкаси 2023 
r 
ЧдТУ 232225-О t 
2 
•1СІІІІЯ J 
r1o~"~з222s-12 о t Наіімс1І_J:ва1111я -
Лістннr nporpa~щ П1}ІІМіТІ\:ІІ _І 
\\,\f. , 32225-34 01 Інстр 
~·,t ro ; 5.90 о 1 У•щія корнс1)1вача 
.,.·  u1·0 -3222 Пре зентація 
\ 
, 
І 
~ 
І 
L J J 
91 
ВіДСК.шо&.)ІЮ 3:1 доnоwого ю ~ msconncr 
, їt{СННЯ С.ТИС\ІСІ\ІІЯ і11форма11і1 бе·\ СІІ<УІІЮ()СІІІІ~! /J~,ІІИІ. ! А':'1 0/111 
,1 
,n_.о, сJ\Ід Хао\  <\ 1
1ма11а JІJІИ ситуа111,1,,  11ехван:и 11иJ,1 ~·11,  
Лістинг врш рами 
482.ЧДТV 232225-\2-0\ 
Листів \ О 
Черкаси 2023 
Відсканоеано за ,:ionoмoroю c amScanner 
4~2.чдту 
2з222s.12 
.. . l<or, ·OJ 
ja"ax. sw і ng . , ~ ПJ>оr-рам~ 
0rt 1/д. awt. event. Acttonєv 2 
~р ja
J 0rt 1 /д. ent• 
awt. event. Acttonlt , 
j~P t ja *. stener; 
~por java. іо. , 
1 
,~p ortt  j "а • text. SimpleDateForm t 
а а ; 
,~ р~ t: jiJ І/З . util.Date; 
1~por java. util. HashMap; 
J~Port java. util. Мар; 
~porrtt  j va. util . Priorit yQueue.
І а ,  
І~ро 
е нuffmanlnterface { 
rfдC 
jnt\oid encodeText(String text); 
id decodeText(Node root, String 
vo encodedstring); 
'd clearText(); 
vOl 
S Node { 
1as 
' char ch; 
int freq; 
Node left = null, right = null; 
нode(char ch, int freq) { 
this.ch = ch; 
this.freq = freq; 
public Node(char ch, int freq, Node left, Node right) { 
this .ch = ch; 
this.freq = freq; 
this.left = left; 
this.right = right; 
} 
public class HuffmanGUI extends JFrame implements Actionlistener, 
нuffmanlnterf асе { 
private JTextArea textArea; 
private JButton encodeButton; 
private JButton decodeButton; 
private Jlabel timelabel; 
private JButton clearButton; 
private JButton loadButton; 
private JButton saveButton; 
private Jlabel compressionLabel; 
private Node root; 
private int originalBits; 
private int encodedBits; 
93 
8ідска~,овано за допомогою CamScanner 
r 4R2.чдтv -
23 222s. 12.o' 
1нiffmмGUI ( ) { 
r,,1,l j etTi tle( "H11f f ma11 E11 corHng1D 
s size( B(IO , 5 (Ю ); C0(1i ng") · 
set ' 
,etDefaultCloseOperation(EX1т 
~ _ON_CLOSE); 
•tializeComponents()· 
1п1 , 
addcomponentsToPanel(); 
addдctionsToButtons(); 
addcomponentsToFrame(); 
·vate void initializecomponents( 
pf"J. textдrea = new JТextдreao; ) { 
ncodeButton = new JButton("E 
е ncode")· 
decodeButton = new JButton("D ' 
timeLabel new J Label ( ec,, o) d. e")·, = "Тіmе :  
,iearвutton = new JButton("Clear:' . 
}oadButton = new JButton("Load Fi~; ... 
saveвutton = new JButton("Sav ), 
compress1. on Lа  Ь е 1 = new Jlabelе( );E ncoded Dа  t а ") ; 
root = null; 
originalBits = 0; 
encodedBi ts = 0; 
private void addComponentsToPanel() { 
JPanel panel = new JPanel(); 
panel.add(encodeButton); 
panel.add(decodeButton); 
panel.add(timelabel); 
panel.add(clearButton); 
panel.add(loadButton); 
panel.add(saveButton); 
panel.add(compressionlabel); 
getContentPane() .add(new JScrollPane(textArea), "Center"); 
getContentPane().add(panel, "South"); 
} 
private void addActionsToButtons() { 
encodeButton.addActionListener(this); 
decodeButton.addActionlistener(this); 
clearButton.addActionListener(this); 
loadButton.addActionlistener(this); 
saveButton.addActionListener(this); 
} 
private void addComponentsToFrame() { 
94 
В ідскановано за доnомоrою CamScanner 
} 
te void updateE ecutionTime(long startTime) { 
ri 'J10 11g endTime = sys tem.currentTimeMillis(); 
}011!, е •ecutionTime = endTime - startTime; 
simpl eo•a teFor·n1ilt dateFormat = new SimpleDateFormat( "111111: ss. S55"); 
Str'l'  nnD  formatt edTime = dateFormat.format(new Date(executionTime)); 
time Label · setTcxt("Ti me: " + formattedТime); // Оновленнл ~,іт ки з часоr,, 
І' >H\'l t-. (\Ц)ІОЗНН я Н' "- 1у Хаффt-,ано,-, 
~'vt1r·r•ide 
~//  ~ ва ння 1 et-. 1 у Xatf'<f'r,,aнo,.., 
ublic void encodeText(String text) { 
Р r-oot = buildHuffmanTree(text); 
HapcCharacter, String> huffmanCode = new HashMap<>(); 
encode( root 1 "" 1 huffmanCode); 
95 
В1дска1-1:>вано за доnомоrою CamScanner 
r 482.ЧДТУ 232225 
-12-01 
5 
. tHuffmanCodes(huffmanCode)· 
pГJJI J 
· пgвuilder sb = new StringBuild 
strJ. (int 0;  1· і=  < text.length()· er() ,·  
fоГ sь , append(huffmanCode.get(te t, і++) { 
х • charдt(i))); 
} 
extдrea,setText("Encoded string:\n" + 
t sb.tostring()); 
orJ·. ginalBits = text.length() * 8 ,•  
odedBits = sb.length(); 
encx tдrea.appen d( "\n \  te nOr1. g1. nal data size in bit 5 . ,. 
• + originalBits +" 
•ts')i te". .,tдrea.append("\nEncoded data 
11 size in bits. " 
· + encodedBits +" bits"); 
updateCompressionPercentage(); 
stringBuilder keys = new StringBuilder("H ff 
for (Мар. Entry<Character, String> entry : \um an Codes: \n"); 
keys.append(entry.getKey()).append("· ffmanCode.entrySet()) { 
d(entry.getValue()).append("\n"); · 
'). ~ ppen } 
trY { 
FileWriter writer = new FileWriter("h uf fm an keys txt")· 
writer.write(keys.toString()); - · ' 
wri ter. close (); 
JOptionPane.showMessageDialog(null, "File with keys created : 
uffman_keys. txt"); . 
h } catch (IOExcept1on е) { 
e.printStackTrace(); 
} 
JOptionPane.showMessageDialog(null, keys.toString()); 
// ~Іетод декодування тексту Хаффманом 
~verride 
// декодування закодованого тексту Хаффr.,аном 
public void decodeText(Node root, String encodedString) { 
System.out.println("\nEпcoded string to decode:\n" + encodedString); 
StringBuilder decodedText = пеw StringBuilder(); 
int index = -1; 
while (index < encodedString.length() - 1) { 
index = decode(root, index, new StringBuilder(encodedString), 
decodedT ext) ; 
} 
textArea.setText("Decoded string:\n" + decodedText.toString()); 
96 
Відскановано за доnомоrою CamScanner 
r, 
4Н2. ЧJ(ТУ 232225- 12-О І 
d teCompressionPercentage() { 
} d up а 
voi 1eits І= 0) { 
~vate(0 riginacompression = ((double) (originalBits - encodedBits) І 
р !f " uьle 
uO 10 0 · 
•ts) r•n press,  ionLabel.setText(String.format( "Compression: %. 2f%%" , 
iв:i. 
- ~а ,о 
і 
{' : 011)) і 
sP 
,~re } 
} intHuffmanCodes(Map<Character, String> huffmanCode) { 
ate void ptrprintln ( "Huffman Codes: \n "); 
Р ri
11 m ou · . 
syste · Entry<Character, Str1ng> entry huffmanCode. entrySet ()) { 
for s(yМЗsРte• m  · out.println(entry.getKey() + " " + entry.getValue()); 
} 
,. ьuildHuffmanTree(String text) { 
Nоие 
rivate <Char acter 1 Integer> freq = new HashMapo (); 
Р 
мар ·nt і = 0; і< text.length(); і++) { 
for ~~ (!freq.containsKey(tex~.charAt(i))) { 
freq.put(text.charAt{1), 0); 
} 
freq.put{text.charAt(i), freq.get(text . charAt(i)) + 1); 
} 
priorityQueue<Node> pq = new Pri orityQueue<>({l, r) -> l.freq - r .freq); 
for (Map.Entry<Character, Integer> entry: freq.entrySet()) { 
pq.add{new Node{entry.getKey(), entry.getValue())); 
} 
while (pq . size() ! = 1) { 
Node left = pq.poll(); 
Node right = pq.poll(); 
int sum = left.freq + right.freq; 
97 
ВІДСІ<.:JІІОВіJНО з.І допомогою Com scanncr 
r 
root 
' Str tna 
., St І' 
• Р<С r il c r , r І n ,> 
,•oot. 1eft == null && root 
jf <,,,ffmanCode.put(root.ch, ·"ight ,.,. 
1~ str); null) { 
} 
de(root.left, str + .. 0 .. , huffrn 
єr1'0de(root.right, str + .. 1., aricode)• 
11 со , huff • 
є maricode); 
tatic int decode(Node 
5 
rr jv". te decodedText) { root, irit 
1der iridex s . 
~ІJ J. ot == null) , tr1ngBuilder 
і ~• ·f sь, 
(ГО 
:! J. return index; 
(root,left == null && root r· h 
j f deco d е dText • арре п d ( root. ch. ) l. g t :::::::: null) { 
return index; ' 
} 
·f (index + 1 < sb.length()) { 
J. index++; 
if (sb . charAt(index) == ,0 ,) { 
index = decode(root . left l•n d  
, ех sb d 
} else { ' • ecodedText); 
index = decode(root.right, 
index ' sb 
} , de codedText); 
} 
return index; 
Бідкр~1ття файлу . 
. ate void openF1le() { 
pri\fileChooser fileChooser = new JFileChooser(); 
int response = fileChooser. sho~penDialog(null); 
if (response == JFileChooser.APPR0VE_OPТION) { 
File file = fileChooser.getSelectedFile(); 
try { 
BufferedReader br = new BufferedReader(ne1..r FileReader(file)); 
98 
Відсканоеано за допомогою CamScanner 
r 
} 
І") • 
111 ' · c;tct, {IOE.xceptior1 ех) { 
} ex.printStackTrace(); 
} 
/ 3an}' t-. г р афічного інтерфейсу 
t ·c void main(String(] args) { 
NID11. c staU t1i lit ies. invokelater (() - > { 
· swingH tiffn1an GUI huffn1anGUI = ne1-J HuffmanGUI (); 
huffmanGUI. setVisible(tr'tІe); 
}); 
99 
Відскановано за доnомоrою CamScanner 
})і 
5
@fe ~ void testEncodeAndDecode() { 
ь11.с 
pu Jтextдrea textArea = huffmanGUI. getтextдrea(). 
Jвutton encodeButton = huffmanGUI getE d ' 
Jвutton decodeButton = huffmanGUI.getD:~odeButton(); 
· о eButton(); 
// початковий текст для кодування і декодування 
String originalТext = "Зразок тексту для 
тестування кодування та 
декод ування"; 
// встановлення тексту в JTextдrea 
swingUtilities.invokeLater(() -> textArea.setText(originalText)); 
// кодування тексту 
swingUtilities.invokelater(() -> encodeButton.doClick()); 
// отримання закодованого тексту 
string encodedText = Objects.requireNonNull(textArea.getText()) 
. replace ( 11 Encoded string: \n", "" ) 
.replace("\n\nOriginal data size in bits: " + 
11 
(originalТext.length() * 8) + bits\nEncoded data size іп bits : ", '"' ); 
// Декодування тексту 
SwingUtilities.invokelater(() -> { 
textArea.setText(encodedText); 
decodeButton.doClick(); 
}); 
100 
Відскановано за допомогою CamScanner 
r 
,~ннл р І О 
отrим, о кодnн~ноrо т ~ к 11у 
odedText = 
sІ Іt r1 eNonNU 11 
1,1,1 gr  det ( textArea. веtт ext ()). replace( "r,er °''"' , 1r  I np, : \n" , ·· " ); 
rs •рка, 
1
,j~ .reQ 
1 // enerrte євquJ als (oчrиi giсnnaіlвтпeаxдtа,ю 1ьd ecnoоdчeаd~ткeоxоtи)й;  і ро ••моаний ' " ''" 
ass 
101 
Відска11овано за допомогою CamScanner 
l i\ TR r;i: :сн(): 
] aR. • аф і1 
ня стиснення інформацїї без спо1ворення даннх ме1 о 1 
~0cni.n)t<eH Хаффмана для ситуаuїї нехва1кн nа~1'яті 
Інструкція користувача 
482.ЧДТУ 232225-34 01 
Листів 7 
Шульга О.В. 
розробник: -~114--
Керівник: -~~~-
Черкаси 2023 
моrою camScзnner 
ВІдскзІЮ&ЗWО за доnо 
482.ЧДТУ 232225-34 01 2 
,110..n.. ал~ом розпочннасться з внбору . 
двох ~,етолш ВВСДСІІНЯ 
3 
І.:( f~ 
f•1() 
,J1_1ii·: у 611nадку користувач може самостійно ввести необхіднніі 
/' iJJO~I 
, rt'P 11porJ)aiш. При запуску додатку можна одразу початн 0 ~ІІ· ttafl 
f р
е 
...:  f ~ .~.,~  ue показано на Рисунок В. І 
я~ 
.;, i'cf) 
. .,1t1 
:1' 
:,S ' 
І r ,. ,,. ,. f 
рисунок В. І - Введення тексту в термінал 
Я\/ випадку користувач може завантажити файл з уже готовим 
в JIPYГO~•J 
текстом , рекомендуються файли з розширенням .doc .txt та 
обробкJІ 
:.~І ~ ві розширення. Також слід уникати файли з не текстови1'rn 
·"ні фаило 
~(1JІО V • 
оректної роботи програми. Для завантаження фаилу необхщно: ля к 
•J!ІІІ~ІІІ д
, нути на кнопку Load file після чого з'явиться вікно з вибором 
натне 
... файлу(Рисунок 8.2) 
Jltpei-1'0PII 
103 
Відс1<ановано за допомогою CamScanner 
... .' ..... 
... 
·. ·,1\:ty \1 · ·,\ Н,\\'Н,'\\,.\' \'Н Ш\ }\Н,Ч\~\' { )р<'І\ ·\,,(\\\:\Ж-,'ІІУ 11,\ 
Ч\' щ, ,,~,....-,- ~\ii:,s J'~ннн,·~ н ,х•рмІн.щІ 
о х 
-
1
.;:i ;~:~, =•l~Ji~• \~ (~~ і~~> t.f~1,ч' Чі!~і·~ -~<~ ~~\~~~І'lіі ~~\. ~~~і ! Ш~ 
;.:·.t ) 
J .1.1i .4:Ht ...:,'.:1,у~ш н~ \\.'~(' t'Y Нс.'"'бхі;\tю 1ш 1·н1..·н~~,·н на ююн ку E"'-'"'"k, 
~.;у.1ьг.11\.щ буде.' Ri ·~обр~ ·с.•ннs в \\.'l'~titta.!ti уже З:tК\))\\)щНІ01,, t\.'KI..' ,·у ,·., 
: і.::1.щ.1t'ння np1.., сrRорс.•ннн Ф~tі'і.,у з к.,к,чю.ш І..'Нмнш1ів. Ф~tі1л бу)\С І..'ПЮр\.'Н\) 
104 
Вfдскановано за допомогою CamScanner 
482.ЧДТУ 232225-34 ОІ 
4 
010 Також буде відобра;ксщ б' 
..-r,aM · > тону нагу 1скс1у ло і 11іспя та 
11PO•r 
1,1і j еtfttя(Рисунок В.4). 
~}~ cftf CJ-f 
І fOJ( 
/о 
Мш,gе Х 
\'.і!')  File Ytith keys created:h uffman_keys.tжt 
~ 11 ___ _,, 
___J ~:"''] [ І>е~~mе: ! CJear _[І ~ "'• 11 ''"'"'""' _Da_1a_/_co_m_pre_ss_ion~2?21'_ ___  
Рисунок В.4 - Стиснення тексту 
Для продовження роботи з програмою користувач має натиснути ОК, 
після чого з' явиться повідомлення в якому можна побачити присвоєні 
символам ключі(Рисунок В.5). 
105 
ВІдскановаfіо за доnомоrою CamScanner 
482. Ч)(ТУ 232225-]4 О І 
,, 
,..J I  f tt "' ( , . І ' І ; ~, ~,,.,, 
11 11 ,., 
, . 01 ' f , 1,1.1.-,, 
І 811 І 11 1 І 
І (П 
/ ; !І , . 1t ~ 
І І , ,,, І 
/ : І ~1 t t V,1 
1, с 11 е 1 • 
І : 18] а t ~", ',  
,/,:  І ІВ і" t (;,: \ 
11010 1 
' Шt 1 
/ : 11101 
f_ 1 щ, 
/ : 011111 
. И 1t1t 
/ : С~ІЄ 
vл, о 
І : 1 1 1 е0 
/ : r! t 1t v, 
І ~ІЄ0І 
І : 1е1е1е , •~ 1 
1, е1 00 11 У. 1 1ИО 
/ : 110111 І ~t1 
/ : 1~ 11 .t, tt01t1 
1: 11 01ее tV.1111 
1, е 1е 1 єа а ІН,н,о 
/ : Є І ЄІЄ І !І..Иr,н,,, 
1: І Є ІІІ Є 1, , 1ощ 
1, е111ег • 10111 0 
1, е 1 11е 1 ► 01 ,1 (,Q 
1, е1111е 01t1 D1 
/: 1111110 .КС О 11 Іt О 
/: 11 11 111 Jt. 1111 110 
1: 1 1 11е "1111 111 
1: 1111 1 е 11. 11110 
1: 100111 
": 111110 
k t tot 1t 
lfr. 10110, 
ок В.5 - Повідомлення з ключами та вміст файлу ключів 
р}{СуІі 
. ристувач може натиснути на кнопку Save Encoded Data для того 
ДaJll J{O . . ~ 
rfJi отримаю даю в фаил . Також необхідно задати розширення 
" збере 
ФоО иJ(JІад як це зображено на Рисунку В.б . 
J-fV ga1 1 р 
Q~ •J' 
/ 
D АнrліМськм М текст.d осх 
О Кмтамсь r. м м тer.cт.tx t 
1 о Уr.ра 1нс ьr.мй т екст.ІХ\ 
F1le .U• me: /~~~-•~ t, 
F1les оІ !уре : І АІІ F,les _____ "' І 
Save / Г. Cancel І 
--,. 1 
106 
Відскановано за допомоrою CamScanner 
482.ЧДrу 23222 
r рисунок В.б- Прик.nад 5-34 01 
з 6е ре)f(ен» . 
~а тискання на кно111n, Sa ve кор JJ ІІіформації 6 
1 ''J 
·c JI~ 
~ з авершення операції збере)!( 
Нстувач о 
)'C ~iJJJ~e е1111~ Фаіілу(РнсТурниомка Вє . повідомлення 7). 
і 
l!, 111n Прн, ~ О р, , І r,., 
Encoded str1ng : · Cnp ' 1 
0011110110001111101001 
Or1g1nal data s1ze Ье е1е0010001ещее1 tee 
1 
Encoded data Slte !n \ , lts : >28 bits 
•ts : 370 bits 
(f\ х 
\!.} EncOdt d daІasaved Іо І І 
, е succeщuuyi 
~ 
Стр 1, стпб 1 100¾ UNІX (lf) 
ІЛF-з 
рисУJІ ок В.7 - Вміст файлу.  3 збереженими даними та nовідомлеІПІЯ про 
усПІщне створення файлу 
fl!.C  ля кодування даних У користувача є можливість декодувати дані 
нувlllИ 
~~rfiC на кнопку Dесоdе(Рисунок В.8). Якщо натиснути на неї без 
оnередньо 
0 закодованих даних користувач отримає повідомлення про 
оомнлкУ (Рисунок В.9). 
і!\ Huffm,n [ncod,n9ІOteod,n9 - --
- □ х 
«1 o'c!,НoШsvtm!Ш97 1'f .B'' it1i)iJ\  ' Ifl ni\!OJIМ; i\, f\Щ~-J:MJIAitJ!:;, t1ii1"t!lit:~f~б!<1)~1'1• i!!!l!;~ftll~~~i(],l'i/:iШ 
~ І Dноае / Juno: 00:00.002 ~г=:----;~ ' ["savo Encoced D.Ju J Compr,s,lon:29,92'. -·J I 
Рисунок в .8  - Процес декодування 
107 
В Ідсканова но за допомогою CamScanner 
--­
рисунок В.9 - Помилка цскоцування 
\08 
оnомоrою c amscanner 
01р,ска1-1ова1-10 за А 
Додаток Г 
дослідження стиснення інформації без спотворення даних методом 
Хаффмана для ситуації нехватки пам'яті 
Презентація 
482.ЧДТУ 232225-90-01 
Листів б 
Черкаси 2023 
Віцскановано за доrюмоrою CamScanner 
Jto · 11 ,т · ,,,,,s, 
1 Іtф< Hj ( rнtн•нн 
)ІІН ІН ) rт r 
r < іІ о , ~ ,i , 
ІЛЯ " 
nн ії нс~n т и на 'яті 
Рисунок Г. ) ·,,айі1 1 - 1 е ,а .-
вступ 
оnис n роведеної роботи 
СФDР мовная  нХоа фгіфпмоатензау, ш nоедоое тсвтовоорюе,н.н,я застоtунку Rкий міr би , н
стиснен код,,.. зменшення обсягу дн а,ен,"с «>ву Інформаwю nод
аа "оУс  ноав 1р "мнет"о дуо еа, 
бінарнии 
- np, '"'>"w1 """'"" n • •. ,,. 
n рсв1.р с1 с сІОн тгаі
. 
лпоьтнеизху  дшолсяn~хлом npoc1C1yaa111.1 .жснь та ТССТ1в1. 1 :~астосунку, nроас.1с11 11•и 
сксnсрим 
Рисунок Г .2 Слайд 2 - Вступ 
110 
ВІдскановано за допомогою CamScanner 
Дослідження 
Теоретичні досл і 
:, 11 
~- _.., ·- ... .
.. _ .... . . _ 
. ·-
,. .. . Експе · · 
П('f!Е v-, .,., 
різн~u re 
....  
.. . ... .. 
Рисунок Г.3 Слайд з _ дослід.Ження 
результати архітектурного проектування 
Діаграма компонентів(зв'язок елементів системи) 
Рисунок Г.4 Слайд 4-Архітектурне проектування 
111 
Відскановано за допомогою CamScanner 
4R .'І)(' t •у 
.1  ~ - <>о() І 
результати проект в 
комплексу У ання Програмного 
д1аграма пакетІв(класи . 
всі елемен1и r1оєдНУtоть 81 лповІлаю1ь за різні функці~' 
l ся через іtнсрфсйс) 
) І • • • ' 
,.,..,.. ·• ...... 
І =·; : ·:::·:.::;:_; .•; ·~·.:~. 
....  -. ...,...). . , ... -., .,. 
рису нок Г.5 Слайд 5 -Проек тування програмного комплексу 
засоби реалізації 
1 мова програмування Java Java· 
• г-, 
Бібліотека Swing для розробки GUI 
в Java Javaswing 
\..-.-І 
1 середовище проектування Visual 
studio Code 
Visual Studio Code 
Рисунок Г.6 Слайд 6 - Засоби реалізації 
112 
Відскановано за допомогою CamScanner 
'." ' r' • 
• 
........ .. , .... .. 
..... :.,·.: -;.....,, ... ,:,: .. _..  __ 
... ,. ... _, .._.. ,_   
.. .. ',"-"..''."..' '"• 
.. ~';:'~.·~.:·:--•::.!::...;..·. .. . ··~..: ...:..:.:....~.....~....;. ,,. -,-:-....... :.,.  ::;:~ 
t ' ' " 
·:~.. .·...:. .:.~~:.·.  ·.:::.r;.~:.~.: :-:~:~.:·~~~ 
,., ,,,., 
.... .,.. ....... ,. ....... , . 
....-.......... ...,..1 .. .. .."..·.• ·.•  n.,,._.o.e ., ,,.. .,..,,........ ..... ,... .... ........... _.,  . . ,-,, .,, • ...,. ..
,. .... ,,.. ...,, ..:..".".. • 
.,,. ..,., ..,. ....  ,,. 
..,....,)'._,. . :,-:::.:.: ~::;: :: ~ !.,'7..'r::.~•  
"•ре ., .. ... .... . --.........  
.,'.,...•..;.:... ,~?:-:v::.:.·.:".:.;~.-..;..,. ., .-,::,-.,..- ....:.- ,--. .•,-. :~- -.....- .....-. ...-. .-....- .,.-. .~-..-.• .-. ...•-.•-.  .,-_ -,t------- - і 
~'"ІУ-"""'• ~ -·~ -~ -~ ""'- •-.....,. 
Рисунок Г.7 Сnайд 7 -Тестування системи 
конструювання та Реа/\ізація системи 
~-"•"м •~•""9"'-<"-•• [] S 
n,;,;:.:;,м.,Llh1•., t, hi.'f;•jj~..::Ї:tt.fi'iwщ, i;i;ri.ii,"-'t ~IJlot.• ;-eeoi..ю,•+•ц,.,., 
,,J.,~_ . i ...i., 
, ,1,.­  f...,ect..i ч•І nt 
Г♦ІІ \ І ~ І J М..1 11 111>1~Іtw1hlr;1QЄ<1"1І 1 11,;,1~ І ,. ......... .. 
·І -f ll" .. ,.,,., .. . , ., ,1 .. , ••. .,.." , •.. ., , 
.. ."..~ . . G,,1c1"a.1 "•'• • L~• 1-, t.1t ~. SU fІо~н ':о , ., ...... Ц. • 11...., 
. І •м. .. , l "'<.Qdr,J .,. . , . ~l:t , ~ flolt·, : )J't t1н . .. . ,,,. ......... .. ,..,. i,.., 
• ..Ч t І 
, •""11 • І"ФІ 
І f.111', .,  •...1..ш ., ,ІІ-І ".'.  .. .. 111 '1 .. , ' 
, 11.,. 1,..,11,11,..1,  ...... 
,,  1..1.1.1. 1,1  L•• 11 
1 І ІІ;, " '"~ 
І 1t :1t, "'І! І\11 0 
.,  1'":н'.1'  f..ІІ ІИІ 
см.оn, 
, 11~,11 .,. ... н 
1.  ,І Ю,.І. ...1  .•  " 
•»1■ 
, t ir.11 
• •:•,'1 .,"_ ... .. 
, 11 ,~І t
І 1111• ..,
, .t.f., ,H.І.  Mtшgt 
' r:~,: х 
ІLl 1\nt 
І t, l!\ I 
, 11111:t• " "" 
, 1111111 • 11 11111 Q) [nc.ode ttrt flr11! 
, 111: • t оНtІ І 1 
, 1111,, i ''"" 
, 1...: 11 .1•1· 111 
.. 1'\ 
'••t?t 
Рисунок Г. 8 с лаи" д 8 _ Інтерфейс системи 
113 
В ідскановано за доnомогою CamScanner 
r 482. ЧДТУ 232225-90 О І 6 
висновки 
Метол Хвффма11а зал11111аІ.Тhс1 nnувль1111м у су•1ас11ому ннфро 11ому c11rri, ле оос•rн ;1м111х 
постійно зростають. Йoru ефе1mн1ніс,1, у змс11111е1111і о6с,ну /ІІІІІН.ІІ 1: кmо•юІІОWІ м• от11мі~а11іТ 
ресурсів збtріга1111я та передачі інформації через мережі . Такиn ме1од е111с11с11111 да11нх < 11ео6.11 ід1111м 
ДJІЯ забезnе•1сню1 ефсkmв11ості обробки і збсріга1111я вел11к11х oбt1ri11 /нформаrrіТ II щ1фр()Аід спохі . 
Отримана снстсма продовжу~: важл11ну 1рад1щію н 11111у·1і 06ро61н1 да111111 10 е1иснс:ншt 
інформації, нада~очи зруч11иІt інтерфеІtс корнстувn•ІВ для ви1юрнсто1111я ме1оду Хаффмана . 
важливим аспектом с можливість збсрсже11111 та заво11таже1111я 1акодо11n11их ла11н.11, що рм,инр~ос 
область застосування nроrрами. 
ПрОІт,амно рсw1ізовано тсхно1101ії рt11J1ізоції функціш1w1у JІJІІІ нюю1101111• 1юс-1аІІJ1с11н.11 :ІІІІUІ' 1 · 
Рисунок Г.9 Слайд 9 - Висновки 
дякую за увагу! 
Рисунок Г.1 О Слайд 1О  - Дякую за увагу 
114 
В ідс канов ано за допомогою CamScanner