Файл: Методы кодирования данных (Общая информации о сжатии данных).pdf
Добавлен: 31.03.2023
Просмотров: 244
Скачиваний: 3
var leftBranch := new List<Node>;
var rightBranch := new List<Node>;
for var i:= 0 to nodes.Count - 1 do
begin
if (i <= m) then leftBranch.Add(nodes[i])
else rightBranch.Add(nodes[i]);
end;
if ((leftBranch.Count = 0) or (rightBranch.Count = 0)) then exit;
for var i:= 0 to _nodes.Count - 1 do
begin
if (contains(_nodes[i].Letter, leftBranch) = true) then
begin
var newNode: Node := (Letter: _nodes[i].Letter; Pi: _nodes[i].Pi; Code: _nodes[i].Code + '0');
_nodes[i] := newNode;
end;
if (contains(_nodes[i].Letter, rightBranch) = true) then
begin
var newNode: Node := (Letter: _nodes[i].Letter; Pi: _nodes[i].Pi; Code: _nodes[i].Code + '1');
_nodes[i] := newNode;
end;
end;
if (debug = true) then begin PrintNodes; readln(); end;
code(leftBranch, debug);
code(rightBranch, debug);
end;
public
constructor Create(filename: string);
begin
_nodes := new List<Node>;
_words := new List<string>;
readFile(filename);
end;
procedure PrintNodes;
begin
for var i:= 0 to _nodes.Count - 1 do
begin
writeFormat('Letter: {0, 3: s}', _nodes[i].Letter);
writeFormat(' Pi: {0, 10}', _nodes[i].Pi);
writeFormat(' Code: {0, 3: s}', _nodes[i].Code);
writeln;
end;
end;
procedure Code(debug: boolean);
begin
code(_nodes, debug);
end;
end;
begin
var s_f := new SF('data.txt');
s_f.code(false);
s_f.PrintNodes;
end.
Заключение
Благодаря изученных технологиям и алгоритмам сжатия данных удалось реализовать метод Шеннона-Фано, который строит префиксный код. Безусловно, данный метод является одним из наиболее простых, однако он позволяет понять более фундаментальные алгоритмы и тем самым оптимизировать дальнейшую разработку. Вместе с тем программирование данного метода закладывает список методов, подлежащих реализации в каждом практическом алгоритме сжатия данных, например:
- чтение данных из внешнего файла;
- построение вероятностей встречаемости символов;
- кодирование;
- отображение данных.
Несомненно, в мире существует множество интереснейших алгоритмов, которые позволяют как кодировать, так и сжимать информацию. необходимо понимать, что кодирование и сжатие – две разные вещи, в первом случае информация трансформируется, усложняя восприятие, а во втором – теряет свой объем, упрощая доступ к ней посредством более быстрой и оперативной загрузке. Тем самым можно сказать, что два данных действия схожи – оба преобразуют и конвертирую т информацию – однако вместе с тем они делают принципиально разные вещи.