Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Показать сообщение отдельно
RealShady911

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

16.12.2012, 16:02. Просмотров 1299. Ответов 1
Метки (Все метки)

Добрый день, помогите пожалуйста найти ошибку в построении кодов Хаффмана.

использую следующие структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct haffman
{
char Sim;
int Freq; 
char Code[32]; 
};
 
struct node
{
int Summ;
int Pos;
int Step;
int Num;
char Sim;
 
};
Собственно сам алгоритм построения:

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
int qwon;
int st1, st2;
int sum;
int i;
int k = 0;
int intswap;
 
qwon = qwontaty - 1;
 
while (HAF[0].Freq > NOD[qwon].Summ)
{
      
 for(i = qwontaty - 1; i >= 0;  i--) //сортировка по частоте встречаемости
 for(int j = 0; j < qwontaty; j++)
 if (NOD[i].Summ > NOD[j].Summ)
 {
 swaps = NOD[i];
 NOD[i] = NOD[j];
 NOD[j] = swaps; 
 }
 
    
for(i = 0; i <= NOD[qwon].Step; i++)
HAF[qwon - i].Code[NOD[qwon - i].Pos] = '0';      //Step показывает на сколько элементов применять команду
                                                  //в данном случае приписать 0;
 
for(i = (NOD[qwon].Step + 1); i <= NOD[qwon].Step + NOD[qwon - 1].Step + 1; i++)
HAF[qwon - i].Code[NOD[qwon - i].Pos] = '1';      //приписать 1;
 
for(i = 0; i <= NOD[qwon].Step; i++)
NOD[qwon - i].Pos++;                              //прибавить 1 к позиции символа кодового слова
 
for(i = (NOD[qwon].Step + 1); i <= NOD[qwon].Step + NOD[qwon - 1].Step + 1; i++)
NOD[qwon - i].Pos++;                              //прибавить 1 к позиции символа кодового слова
 
st1 = NOD[qwon].Step;
st2 = NOD[qwon].Step + NOD[qwon - 1].Step + 1;    //запись шага в отельную переменную
 
for (i = 0; i <= st1; i++)                        
NOD[qwon - i].Step++;                             //прибавить 1 к шагу
for (i = st1 + 1 ; i <= st2; i++)
NOD[qwon - i].Step++;                             //прибавить 1 к шагу
 
NOD[qwon].Summ = 0;
 
for (i = 0; i <= (st1 + st2); i++)
NOD[qwon].Summ = NOD[qwon].Summ + HAF[NOD[qwon - i].Num].Freq; //подсчет суммы элементов входящих в узел Хаффмана
}
Вложения
Тип файла: txt исходный код.txt (4.0 Кб, 21 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru