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

кодировка Хаффмана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевод из Pascal в C++ http://www.cyberforum.ru/cpp-beginners/thread1067759.html
Здравствуйте! Помогите,пожалуйста, с переводом программы из pascal в С++ program integral; uses crt; function f(x:real):real; begin f:=((sin(x))/x)*(exp(-x))*(1+x)*(1+x)*(1+x); end; var a,b,O,h,c,d,e,int1,int2,int3:real; s:string;
C++ Вывести на экран сведения о банке с максимальным капиталом, числом клиентов и являющимся наиболее молодым Создать бинарный файл, содержащий информацию о банках – наименова-ние, уставной капитал, число клиентов, год образования. Вывести на экран сведения о банке с max капиталом, числом клиентов и являющимся наиболее молодым. Дополнительных массивов и файлов не использовать. http://www.cyberforum.ru/cpp-beginners/thread1067756.html
C++ Не сохраняется размерность массива
Есть программа, попытался для массивов а и b0 сделать динамическое распределение, что-то напутал и теперь не могу сделать так, чтобы размерность N массива сохранялась до алгоритмов. Т.е я ее ввожу с клавиатуры, программа дает вручную заполнить массив а(одномерный), а когда дело доходит до сортировки - размерность становится равной 0 и все... Помогите кто чем может) #define ...
Удалить из строки все символы не являющиеся буквами латинского алфавита C++
Ввести символьную строку. Удалить из строки все символы не являющиеся буквами латинского алфавита. Новых строк не создавать. Строку до и по-сле вывести на экран.. не через string.
C++ Проверка промежутков http://www.cyberforum.ru/cpp-beginners/thread1067747.html
Добрый вечер. Помогите с реализацией вот такой вещи. Я ввожу первое число. Это будет первое расстояние в промежутках. Допустим, ввел 4, значит промежутки будут 0, 4, 8, 12 и т.д., подобно таблице умножения. То же самое со вторым числом. А главная соль заключается в том, чтобы найти совпадения. Например, я ввожу 3 и 5, а совпадение находится в точке 15. Как это сделать? Помогите,...
C++ Задача C++ Собственно помогите пожалуйста решить следующую задачу: подробнее

Показать сообщение отдельно
PhenixOfDoctor
1 / 1 / 0
Регистрация: 29.12.2013
Сообщений: 23
10.01.2014, 19:04     кодировка Хаффмана
Дорогие программисты. Вот был написан код "кодировка Хаффмана", и тут мы вводим количество данных и их частоту. Но я не могу то ли понять,то ли я туплю, написать вероятность появления символов. Просто уже битый час сижу и ломаю голову.
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <vector>
#include <string>
#include <climits>
 
using namespace std;
struct node
{
    node * leftChild;
    node * rightChild;
    double frequency;
    string content;
    string code;
 
 
};
 
vector<node> nodeArray;// Use nodeArray to record all the nodes that may be created in the whole process
 
node  extractMin()
{
    double temp = (double) INT_MAX;
    vector<node>::iterator i1,pos;
    for(i1 = nodeArray.begin(); i1!=nodeArray.end(); i1++)
    {
 
        if(temp>(*i1).frequency)
        {
            pos = i1;
            temp = (*i1).frequency;
        }
    }
 
    node tempNode = (*pos);
    nodeArray.erase(pos);
 
    return tempNode;
}
node getHuffmanTree()
{
    while(!nodeArray.empty())
    {
 
 
        node * tempNode = new node;
        node * tempNode1 = new node;
        node * tempNode2 = new node;
        *tempNode1 = extractMin();
        *tempNode2 = extractMin();
 
 
        tempNode->leftChild = tempNode1;
        tempNode->rightChild = tempNode2;
        tempNode->frequency = tempNode1->frequency+tempNode2->frequency;
        nodeArray.push_back(*tempNode);
        if(nodeArray.size() == 1)//only the root node exsits
        {
            break;
        }
    }
    return nodeArray[0];
}
 
 
void BFS(node * temproot,string s)
{
    node * root1 = new node;
    root1 = temproot;
 
    root1->code = s;
    if(root1 == NULL)
    {
 
    }
    else if(root1->leftChild == NULL && root1->rightChild == NULL)
    {
 
        cout<<"the content is "<<root1->content<<endl;
        cout<<"and its corresponding code is "<<root1->code<<endl;
    }
    else
    {
 
        root1->leftChild->code = s.append("0");
        s.erase(s.end()-1);
        root1->rightChild->code = s.append("1");
        s.erase(s.end()-1);
 
 
        BFS(root1->leftChild,s.append("0"));
        s.erase(s.end()-1);
        BFS(root1->rightChild,s.append("1"));
        s.erase(s.end()-1);
    }
 
}
 
 
 
 
void getHuffmanCode()
{
    int size,i;
    double tempDouble;
    string tempString = "";
 
    cout<<"Пожалуйста, введите количество данных, которые вы хотите закодировать!"<<endl;
    cin>>size;
 
    for(i = 0; i<size; i++)
    {
        cout<<"Пожалуйста, введите то, что вы хотите кодировать и их частоты появления!"<<endl;
        node tempNode;
        cin>>tempString;
        cin>>tempDouble;
 
 
        tempNode.frequency = tempDouble;
        tempNode.content = tempString;
        tempNode.leftChild = NULL;
        tempNode.rightChild = NULL;
        nodeArray.push_back(tempNode);
    }
 
 
    node root = getHuffmanTree();
 
 
    BFS(&root,"");
 
}
 
 
int main()
{
 
    vector<int> test;
    test.push_back(1);
    test.push_back(2);
    test.push_back(3);
    test.push_back(4);
    vector<int>::iterator i1 = test.begin();
    test.erase(i1);
 
    setlocale(LC_ALL,"Russian");
    getHuffmanCode();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru