Визуализации алгоритма Хаффмана

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Программирование
  • 44 44 страницы
  • 11 + 11 источников
  • Добавлена 05.08.2024
1 496 руб.
  • Содержание
  • Часть работы
  • Список литературы
Введение 4
1. Описание задачи и проектирование архитектуры программного
обеспечения 7
1.1. Постановка задачи 7
1.2. Алгоритм Хаффмана 9
2. Руководство пользователя 13
3. Руководство программиста 24
3.1. Выбор средств реализации 24
3.2. Проектирование архитектуры программного обеспечения 24
3.3. Проектирование интерфейса пользователя 26
Заключение 28
Список использованных источников 29
Приложение 31
Фрагмент для ознакомления

getState(n);MemoryStreamms = new MemoryStream();BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(ms, stm.getState(n)); ms.Position = 0;state = (hState)formatter.Deserialize(ms); }public bool BuildTree() {if (state == null) returnfalse; // Проверка на инициализациюwhile (state.Tree.Join()) stm.addState(state); // Building treestate.Tree.MakeCode();stm.addState(state);return true; }public bool Pack() // Упаковка{if (state == null) returnfalse; // Проверка на инициализациюstate.Reset();if (state.Tree.Root == null || state.Text=="") return false; // Словарьнеготовstring code;foreach (char c in state.Text) {code = state.Tree.getCode(c);if (code == "-") return false; // Неверныйсимволstate.Pack(code);stm.addState(state); }return true; }public bool Extract() // Распаковка{if (state == null) returnfalse; // Проверка на инициализациюstate.Reset();if (state.Tree.Root == null) return false; // Словарьнеготовstring s = state.Text;while (s.Length > 0) {char c = getchar(state.Tree.Root, ref s);if (c == hTreeNode.ZEROCHAR) return false; // Ошибкаstate.Extract(c,s);stm.addState(state); }return true; } }}ФайлhState.csusing System;usingSystem.Collections.Generic;namespaceHaff{ [Serializable]public class hState {privatehTree tree;private string text;private List packed;private string unpack;publichTree Tree { get => tree; }public string Text { get => text; }public List Packed { get => packed; }public string Unpack { get => unpack==""? "пусто" : unpack; }publichState(string _text, hTree _tree) {tree = _tree; text = _text; unpack = "";packed = new List(); }public void Reset() // Сброссостояния {packed.Clear(); unpack = ""; } public void Pack(string s) // Добавить к упаковщику {packed.Add(s); }public void Extract(char c,string s){unpack += c; text = s; // Для изменения входа пло шагам} }}ФайлhTree.csusing System;usingSystem.Collections.Generic;usingSystem.Text;namespaceHaff{ [Serializable]public class hTree {private List tree; // Деревоprivate bool built; // Деревопостроеноpublic List Nodes { get => tree; } // УзлыдереваpublichTree(List<(char,int)> a) // Инициализациядерева {tree = new List();foreach (var p in a)tree.Add(new hTreeNode(p.Item1,p.Item2));built = false; }publicboolJoin() // Связывание двух узлов{int n1 = -1, n2 = -1;for (inti=0;i tree[n2].Level ? tree[n1].Level : tree[n2].Level));else built = true;return !built; }private void mkCode(intt,string s) // Формированиекодов {tree[t].Code = s;if (tree[t].Left != -1) mkCode(tree[t].Left, s + "0");if (tree[t].Right != -1) mkCode(tree[t].Right, s + "1"); }public void MakeCode() // Формированиекодов {if (tree.Count==0) return; // НеизчегоделатьmkCode(tree.Count-1,""); }public string getCode(char c) // Получениекодасимвола {foreach (hTreeNode t in tree)if (t.Data == c) return t.Code;return "-"; } // Операции с деревомpublichTreeNode Root { get => built ? tree[tree.Count - 1] : null; } publichTreeNode Left(hTreeNode node) {returnnode.Left == -1 ? null : tree[node.Left]; }publichTreeNode Right(hTreeNode node) {returnnode.Right == -1 ? null : tree[node.Right]; } }}ФайлhTreeNode.csusing System;namespaceHaff{ [Serializable]public class hTreeNode {public static char ZEROCHAR = '#';private bool used;private char data;private string code;privateint weight;privateint left, right;privateintlvl;public bool Used { get => used; set => used = value; }public char Data { get => (left==-1 && right==-1)?data:ZEROCHAR; }public string Code { get => code; set => code = value; }publicint Weight { get => weight; }publicint Left { get => left; }publicint Right { get => right; }publicint Level { get => lvl; }publichTreeNode(char c, int w) {used = false; data = c; weight = w;left = -1; right = -1; code = ""; lvl = 0; }publichTreeNode(int w, int l, intr,int lev) {used = false; data = '#'; weight = w;left = l; right = r; code = ""; lvl = lev + 1; } }}ФайлManager.csnamespaceHaff{public class Manager {privatehRun runner; // Испольнительprivate Store store; // Хранилищеprivate View view; // Отображдательpublic Manager(View _view) {store = new Store();runner = new hRun(store);view = _view; }public void Init(hInit p) // Инициализация {store.Reset();store.addState(p.getState());runner.setState(0); }public bool Prepare() // Подготовкасловаря {returnrunner.BuildTree(); }public bool Pack() // Упаковка {returnrunner.Pack(); }public bool Extract() // Распаковка {returnrunner.Extract(); }public bool Save(string fn) // Сохранение {returnstore.Save(fn); }public bool Load(string fn) // Загрузка {store.Reset();if (!store.Load(fn)) return false;if (store.Count == 0) return false;runner.setState(store.Count-1);return true; }public void DisplayState() // Отображениесостояния {view.ShowTree(store.State);view.ShowCodes(store.State); }public void DisplayData() {view.ShowData(store.State); }public void ShowError(string msg) {view.ShowMessage(msg); }public bool First() {returnstore.First(); }public bool Next() {returnstore.Next(); } }}ФайлStore.csusingSystem.Collections.Generic;using System.IO;usingSystem.Runtime.Serialization.Formatters.Binary;namespaceHaff{class Store {private List states; // Списоксостоянийprivateintcstate; // Текущеесостояниеpublicint Count { get => states.Count; } publichStateLastState { get => states.Count == 0 ? null : states[states.Count - 1]; }publichState State { get => cstate==-1 ? null : states[cstate]; }public Store() {states = new List();cstate = -1;} // Создание клона состояния через сериализациюpublic static hState Clone(hState state) {MemoryStreamms = new MemoryStream();BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(ms, state); ms.Position = 0;return (hState)formatter.Deserialize(ms); }public bool Save(string fn) // Сохранение {if (states.Count == 0) return false;FileStreamsw;try {BinaryFormatter formatter = new BinaryFormatter();sw = new FileStream(fn, FileMode.OpenOrCreate);formatter.Serialize(sw, states); }catch { return false; }sw.Close();return true; }public bool Load(string fn) // Загрузка {FileStreamsr;try {BinaryFormatter formatter = new BinaryFormatter();sr = new FileStream(fn, FileMode.Open);states=(List)formatter.Deserialize(sr); }catch { return false; }sr.Close();return true; }public void Reset() // Сброссостояний {states.Clear();cstate = -1; }public void addState(hState state) // Добавлениесостояния {states.Add(Store.Clone(state));cstate = states.Count - 1; }publicboolFirst() // На первое состояние{if (states.Count==0) return false;cstate = 0;return true; }public bool Next() // Следующеесостояние {if (cstate == states.Count - 1) return false;cstate++;return true; }publichStategetState(int n) {if (n < 0 || n >= states.Count) return null;returnStore.Clone(states[n]); } }}ФайлView.csusingSystem.Collections.Generic;usingSystem.Text;usingSystem.Windows.Forms;namespaceHaff{public class View {privateTreeViewtreeBox;privateDataGridViewcodeBox;privateTextBoxdataBox;public View(TreeViewtb,DataGridViewcb,TextBoxdb) {treeBox = tb;codeBox = cb;dataBox = db; }private void showTree(hTreet,hTreeNoden,TreeNodetn) {if (n == null) return;tn.Text = $"{n.Data}: {n.Weight} | {n.Code}";if (n.Left != -1) {tn.Nodes.Add(new TreeNode());showTree(t, t.Left(n), tn.Nodes[0]); }if (n.Right != -1) {tn.Nodes.Add(new TreeNode());showTree(t, t.Right(n), tn.Nodes[1]); } }private void showCode(hTree t, hTreeNode n, List codes) {if (n == null) return;if (n.Left == -1 && n.Right == -1)codes.Add(n);showCode(t, t.Left(n), codes);showCode(t, t.Right(n), codes); }public void ShowTree(hState state) {treeBox.Nodes.Clear();if (state == null) return;hTreeNode root = state.Tree.Root;TreeNodetn = new TreeNode();if (state.Tree == null || state.Tree.Root==null) // Недерево {tn.Text = "Построение";string used;foreach (hTreeNode n in state.Tree.Nodes){used = n.Used ? "блок" : "свободен";tn.Nodes.Add(newTreeNode($"{n.Data} ({n.Level}): {n.Weight} : {used}"));} } else showTree(state.Tree, state.Tree.Root,tn); // ДеревоtreeBox.Nodes.Add(tn);treeBox.ExpandAll(); }public void ShowCodes(hState state) {if (state == null) return; List codes=new List();showCode(state.Tree, state.Tree.Root, codes);codeBox.AutoGenerateColumns = false;codeBox.DataSource = codes; }public void ShowData(hState state) {if (state == null) return;StringBuildersb = new StringBuilder();if (state.Packed.Count > 0) // Былаупаковка {foreach (string p in state.Packed)sb.Append(p); //sb.AppendLine(p); //+D+ } else {sb.AppendLine(state.Unpack);sb.AppendLine(state.Text); }dataBox.Text = sb.ToString(); }public void ShowMessage(string msg) {dataBox.Text = msg; } }}

1. Алгоритм Хаффмана. [Электронный ресурс] / Режим доступа: https://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A5%D0%B0%D1%84%D1%84%D0%BC%D0%B0%D0%BD%D0%B0
2. Метод Хаффмана и родственные методы. [Электронный ресурс] / Режим доступа: http://www.compression.ru/arctest/descript/huffmans.htm
3. Икон, А. И. Алгоритм Хаффмана для передачи большого объема информации на дальние расстояния / А. И. Икон, Л. В. Васильева. — Текст : непосредственный // Юный ученый. — 2018. — № 2 (16). — С. 92-94. [Электронный ресурс] / Режим доступа: https://moluch.ru/young/archive/16/1133/
4. Неравномерное кодирование. Средняя длина кодирования. [Электронный ресурс] / Режим доступа: https://intuit.ru/studies/courses/3481/723/lecture/14228?page=4
5. Префиксные коды и Алгоритм Хаффмана. [Электронный ресурс] / Режим доступа: https://prezi.com/_hf6ujcm-e8c/presentation/
6. Что такое Visual Studio? [Электронный ресурс] / Режим доступа: https://learn.microsoft.com/ru-ru/visualstudio/get-started/visual-studio-ide?view=vs-2022
7. Первое приложение в Visual Studio. [Электронный ресурс] / Режим доступа: https://metanit.com/sharp/windowsforms/1.1.php.
8. Что такое C#: плюсы и минусы язык. [Электронный ресурс] / Режим доступа: https://gb.ru/blog/chto-takoe-c/
9. Документация по C#. [Электронный ресурс] / Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/csharp
10. Сериализация в .NET. [Электронный ресурс] / Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/standard/serialization/
11. Руководство по классическим приложениям (Windows Forms .NET). [Электронный ресурс] / Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/desktop/winforms/overview/?view=netdesktop-7.0
Windows Forms. [Электронный ресурс] / Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/desktop/winforms/?view=netdesktop-8.0