Форум программистов, компьютерный форум CyberForum.ru

Алгоритм Хаффмана, реализация через структуры - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Стандартные потоки http://www.cyberforum.ru/cpp-beginners/thread733889.html
1. Определить класс с именем TRAIN, содержащую следующие поля:  название пункта назначения;  номер поезда  время отправления  определить методы доступа к этим полям и перегруженные операции извлечения и вставки для объектов типа TRAIN. 2. Написать программу, которая выполняет следующие действия:  ввод с клавиатуры данных в массив, состоящий из восьми объектов типа TRAIN; записи должны...
C++ Определите количество гласных букв в слове Помогите создать программу: Задание: 1.Определите количество гласных букв в слове. 2.Между двумя одинаковыми буквами в слове вставьте " - ". 3.Вычеркните из слова сочетание " при ". http://www.cyberforum.ru/cpp-beginners/thread733854.html
ошибка в синтаксисе? C++
Скомпелировано в сlr:oldSyntax на VS2010. Жалуется на синтаксис: Предупреждение 1 warning D9035: использование параметра "clr:oldsyntax" нежелательно, он будет удален в следующих выпусках C:\Users\pan\documents\visual studio 2010\Projects\image_embedding\image_embedding\cl Ошибка 3 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по...
C++ Создать класс «Сотрудники предприятия»
Создать класс «Сотрудники предприятия», включающий следующие поля: наименование предприятия и обобщенную коллекцию экземпляров класса «Сотрудник», методы ввода и вывода данных , а также методы работы с коллекцией (добавление, удаление элементов коллекции). Класс «Сотрудник» должен иметь информацию о табельном номере, ФИО, должности, времени приема и увольнения/перевода. Классы должны обеспечивать...
C++ Игра в НИМ (доработать код) http://www.cyberforum.ru/cpp-beginners/thread733851.html
Игра в НИМ. Правила игры: 1. В начале игры в каждой из n кучек находится отличное от 0 количество каких – то предметов (например, спички); 2. два игрока ходят по очереди. За один ход разрешается взять любое, отличное от 0 количество предметов из любой кучки; ...
C++ Составить программу для нахождения суммы Здравствуйте! Помогите написать парочку программ... 1. Составить блок-схему и программу нахождения суммы удвоенных чётных чисел в интервале от 15 до 90. подробнее

Показать сообщение отдельно
RealShady911
Сообщений: n/a
16.12.2012, 23:09     Алгоритм Хаффмана, реализация через структуры
Немного поделал еще, стало выходить более толково, но опять же явная ошибка, потому что сжатое сообщение превышало бы изначальное в объеме раз так в 15 )))
Если кто найдет косяк буду очень благодарен, а то я уже запарился совсем.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
haffman m1, m2;
 
m1 = HAF[0];
m2 = HAF[0];
 
for (int i = 0; i < 256; i++)
if (m1.Freq >= HAF[i].Freq)
m1 = HAF[i];
 
for (int i = 0; i < 256; i++)
if (m2.Freq >= HAF[i].Freq)
if (HAF[i].Num != m1.Num)
m2 = HAF[i];
 
HAFFMAN:
 
for (int i = 0; i <= m1.Pos; i++)
{
HAF[m1.Num - i].Code[HAF[m1.Num - i].Pos] = '0';
HAF[m1.Num - i].Pos++;
}
 
for (int i = 0; i <= (m2.Pos); i++)
{
HAF[m2.Num - i].Code[HAF[m2.Num - i].Pos] = '1';
HAF[m2.Num - i].Pos++;    
}
 
for (int i = 0; i <= m1.Pos; i++)
HAF[m1.Num - i].Freq = HAF[m1.Num - i].FreqStatic;
 
for (int i = 0; i <= m2.Pos; i++)
HAF[m2.Num - i].Freq = HAF[m2.Num - i].FreqStatic;
 
int i = 1;
 
while (i <= (m1.Pos))
{
HAF[m1.Num].Freq = HAF[m1.Num].Freq + HAF[m1.Num - i].Freq;
i++;
}
 
i = 1;
 
while (i <= m2.Pos)
{
HAF[m2.Num].Freq = HAF[m2.Num].Freq + HAF[m2.Num - i].Freq;
i++;
}
 
HAF[m1.Num].Freq = HAF[m1.Num].Freq + HAF[m2.Num].Freq;
HAF[m2.Num].Freq = HAF[m1.Num].Freq;
 
i = 1;
 
while (i <= (m1.Pos))
{
HAF[m1.Num - i].Freq = HAF[m1.Num].Freq;
i++;
}
 
i = 1;
 
while (i <= m2.Pos)
{
HAF[m2.Num - i].Freq = HAF[m2.Num].Freq;
i++;
}
 
m1.Freq = HAF[m1.Num].Freq;
m2.Freq = HAF[m2.Num].Freq;
 
for (int i = 0; i < 256; i++)
if (m1.Freq >= HAF[i].Freq)
m1 = HAF[i];
 
for (int i = 0; i < 256; i++)
if (m2.Freq >= HAF[i].Freq)
if (HAF[i].Num != m1.Num)
m2 = HAF[i];
 
if (size > (m1.Freq + m2.Freq))
 
goto HAFFMAN;
 
Текущее время: 18:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru