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

алгоритм Хаффмана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Две экспортные функции по одному адресу http://www.cyberforum.ru/cpp-beginners/thread1092491.html
Здравствуйте. Использую для экспорта: extern "C" __declspec(dllexport) __declspec(noinline) Но две функции вышли по одному адресу, как поправить это дело?
C++ Отрицательные элементы умножить на последний элемент соответствующей строки. Отрицательные элементы умножить на последний элемент соответствующей строки. Массив m, заполненный генератором случайных чисел в диапазоне (от –150 до +150). http://www.cyberforum.ru/cpp-beginners/thread1092477.html
C++ Определить есть ли в массиве элементы кратные К.
Методом случайных чисел заполнить массив на 10 элементов (диапазон значений от 0 до 100), определить есть ли в данном массиве элементы кратные К.
Игра Arcanoid. Рандомное создание блоков для уровня C++
Пишу арканойд используя фреймворк cocos2d-x. Придумал такую идею: при каждом запуске игры или при каждом прохождении текущего уровня должен генерироваться новый уровень. На данный момент я создаю блоки хардкодом и так много уровней конечно же не наделаешь... switch(gameLevel) { case 1 : { curGameWorld = 0; curGameWorld = 0; curGameWorld = 3; curGameWorld = 0; curGameWorld = 0;...
C++ Объявление и определение функции http://www.cyberforum.ru/cpp-beginners/thread1092453.html
В учебнике такой код: void somefunction(int); int main() { //неважно }
C++ Узкие места в программе Есть старая большая программа, которую хочется оптимизировать, она в принципе написана неоптимально, и хочется как можно быстрее найти часто используемые методы и попытаться оптимизировать хотя бы их, логично? Каким образом, с помощью каких инструментов можно найти такие методы? Или, может, посоветуете что-то ещё? подробнее

Показать сообщение отдельно
krgws
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 4

алгоритм Хаффмана - C++

09.02.2014, 10:44. Просмотров 284. Ответов 0
Метки (Все метки)

не получается раскодировать файл, не пойму в чем проблема.
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 "stdafx.h"
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
class Node
{
public:
int a;
char c;
Node *left, *right;
 
Node()
{
left=right=NULL;
}
 
Node(Node *L, Node *R) 
{  
    left =  L;
    right = R;
    a = L->a + R->a;  
}
};
 
 
struct MyCompare
{
    bool operator()(const Node* l, const Node* r) const { 
return l->a < r->a; 
}
};
 
 
vector<bool> code;                
map<char,vector<bool> > table;    
 
void BuildTable(Node *root)
{   
    if (root->left!=NULL) 
                      { code.push_back(0);
                      BuildTable(root->left);}
     
    if (root->right!=NULL)
                       { code.push_back(1);
                       BuildTable(root->right);}
   
    if (root->c) table[root->c]=code;     
    
    code.pop_back();
}
 
 
int main ()
{
 
 
ifstream f("D:\\1.txt");
 
map<char,int> m;
 
while (!f.eof())
{
char c = f.get(); 
   m[c]++;
}
 
  
 
          
   list<Node*> t;
   for( map<char,int>::iterator itr=m.begin(); itr!=m.end(); ++itr)
   {  
      Node *p = new Node;
      p->c = itr->first;
      p->a = itr->second;  
      t.push_back(p);   
   }    
 
 
  while (t.size()!=1)
  {  
     t.sort(MyCompare());
    
     Node *SonL = t.front();
     t.pop_front();
     Node *SonR = t.front(); 
     t.pop_front();
     
     Node *parent = new Node(SonL,SonR); 
     t.push_back(parent);
 
  }
Node *root = t.front();  
   BuildTable(root);   
 
    f.clear();
f.seekg(0); 
    
ofstream g("D:\\output.txt", ios::out | ios::binary);
    
    int count=0; char buf=0;
    while (!f.eof())
    { 
        char c = f.get();
  vector<bool> x = table[c];
  for(int n=0; n<x.size(); n++)
   {
       buf = buf | x[n]<<(7-count);   
    count++;   
    if (count==8)
    { 
        count=0;   g<<buf; buf=0; 
    } 
       }
    }
 
    f.close();
g.close(); 
 
 
 
ifstream F("D:\\output.txt", ios::in | ios::binary);
SetConsoleOutputCP(1251);  
Node *p = root;
count=0; char byte; 
byte = F.get();
while(!F.eof())
{  
    bool b = byte & (1 << (7-count) ) ; 
if (b) p=p->right;
else p=p->left;
if (p->left==NULL && p->right==NULL) {
cout<<p->c; p=root;
}
count++;
if (count==8) {
count=0; byte = F.get();
}
}
 
F.close();  
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru