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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Anry
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 3
30.04.2012, 12:04     Код Хаффмана #1
Здравствуйте! Нужна ваша помощь..
Нашла архиватор, работающий по алгоритму Хаффмана.
Создала файл 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 байта, так и остался.. Что делать?
Заранее спасибо за помощь.
Вот, что выходит:
Миниатюры
Код Хаффмана  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2012, 12:04     Код Хаффмана
Посмотрите здесь:

C++ коды Фано, Хаффмана, Хэмминга, Шеннона, код с проверкой на четность
C++ Алгоритм Хаффмана
модифицированный код Хаффмана. Сделать прогу C++
C++ Код Хаффмана
C++ Код Хаффмана реализованный через построение бинарного дерева
C++ Кодирование Хаффмана
Кодирование Хаффмана C++
C++ Дерево Хаффмана

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 07:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru