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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Anry
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 3
#1

Код Хаффмана - C++

30.04.2012, 12:04. Просмотров 1261. Ответов 0
Метки нет (Все метки)

Здравствуйте! Нужна ваша помощь..
Нашла архиватор, работающий по алгоритму Хаффмана.
Создала файл text.txt с набором букв на английском и различных знаков. Поместила в папку с программой.
Код программы:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
 
    using namespace std;
     
    struct node {
    int weight;
        unsigned char value;
        const node *child0;
        const node *child1;
     
        node( unsigned char c = 0, int i = -1 ) {
            value = c;
            weight = i;
            child0 = 0;
            child1 = 0;
        }
     
        node( const node* c0, const node *c1 ) {
            value = 0;
           weight = c0->weight + c1->weight;
            child0 = c0;
            child1 = c1;
        }
     
    bool operator<( const node &a ) const {
            return weight >a.weight;
        }
     
        void traverse(string code="") const {
             
        if ( child0 ) {
            child0->traverse( code + '0' );
            child1->traverse( code + '1' );
        } else {
            cout <<" " <<value <<"      ";
            cout <<weight;
            cout <<"   " <<code <<endl;
        }
    }
     
    };
     
     
    void count_chars( int *counts )
    {
        for ( int i = 0 ; i <256 ; i++ )
            counts[ i ] = 0;
        ifstream file( "text.txt" );
        if ( !file ) {
            cout <<"Couldn't open the input file!\n";
            throw "abort";
        }    file.setf( ios::skipws );
        for ( ; ; ) {
            unsigned char c;
            file>> c;
            if ( file )
                counts[ c ]++;
            else
                break;
       }
    }
     
    int main()
    {
        int counts[ 256 ];
        count_chars( counts );
        priority_queue < node > q;
     
        for ( int i = 0 ; i <256 ; i++ )
            if ( counts[ i ] )
                q.push( node( i, counts[ i ] ) );
     
        while ( q.size() >1 ) {
            node *child0 = new node( q.top() );
            q.pop();
            node *child1 = new node( q.top() );
            q.pop();
            q.push( node( child0, child1 ) );
        }
     
        cout <<"CHAR  FREQUENCY  HOFFMAN-CODE" <<endl;
        q.top().traverse();
        return 0;
    }
Проблема заключается в том, что программа вроде бы работает, но файл как был 152 байта, так и остался.. Что делать?
Заранее спасибо за помощь.
Вот, что выходит:
0
Миниатюры
Код Хаффмана  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 12:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Код Хаффмана (C++):

Код Хаффмана - C++
Всем доброго дня! имеется код хафманна, работает, но считает неправильно! кто может объяснить в чем дело? #include &lt;iostream&gt; ...

Модифицированный код Хаффмана - C++
Каждому числу соответствует любое двоичное (специальная таблица пример 1 соответствует 00111, 2 соответствует 11 и так далее). При вводе...

Код шеннон или хаффмана в dev c++ - C++
всем добрый день; сможете помочь с кодом, надо написать код шеннон или хаффмана в dev c++, плиииз. по братский

Код Хаффмана реализованный через построение бинарного дерева - C++
Здравствуйте, есть код Хаффмана реализованный через построение бинарного дерева, узлами которого является элемент типа map ,либо символ и...

Коды Фано, Хаффмана, Хэмминга, Шеннона, код с проверкой на четность - C++
Помогите пожалуйста!!!!!!очень срочно надо!!!:(:(нужно реализовать коды Фано,Хаффмана,Хэмминга((7,4),(8,4)),Шеннона,код с проверкой на...

Метод Хаффмана - C++
Есть метод Хаффмана, но при выполнение в кодировании где-то добавляються переносы строк и из-за этого происходит неправильная кодировка. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2012, 12:04
Привет! Вот еще темы с ответами:

Алгоритм Хаффмана - C++
Ребят, подскажите как реализовать кодирование по алгоритму Хаффмана.. Может есть какие то идеи или исходники (желательно с пояснением)? ...

Дерево Хаффмана - C++
Здравствуйте. Хотел узнать как работает дерево Хаффмана и 4 дня изучал материалы в интернете (статьи, видеоуроки) и т.д.), написал...

Псевдоалгоритм Хаффмана - C++
есть алгоритм n – количество символов исходного алфавита P – массив вероятностей, упорядоченных по убыванию C – матрица...

Архиватор Хаффмана c++ - C++
Пишу архиватор на c++ методом Хаффмана. Не могу найти как считывать байты из файла в c++.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru