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

Есть программа по кодированию и декодированию методом Хаффмана с помощью дерева, на я не совсем понимаю что здесь к чему! - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вывести все возможные комбинации цепочек в матрице смежности http://www.cyberforum.ru/cpp-beginners/thread722972.html
Есть матрица смежности вида: AB0 BCD DD0 CKN NE0 KB0 Т.е. если в конце строки 0, то из одного узла есть связь только к одному узлу, иначе - к двум. Задача: вывести все возможные комбинации цепочек. Результат:
C++ Помогу Всем привет!!! Язык программирования C++; Знания: немного STL; ООП; теория. Обращайтесь в ЛС!!! http://www.cyberforum.ru/cpp-beginners/thread722948.html
Проигрывание видео mp4, avi C++
Доброго. Проблема собственно с проигрыванием видеофайлов. Пытался использовать DirectShow - он воспроизводит авишники но в каком то своем окне и нигде не нашел как это лечить. Пытался понять Simple DirectMedia Layer не нашел ни одного примера, как он работает с видео, хотя по лописанию должен уметь. Использовал FFMPeg , но с ним очень сложно всё Может кто знает в какую сторону копать
C++ Какая-то неопределенность при наследовании
Всем привет! Прошу помощи. Суть: //A.h class A { A(); virtual ~A();
C++ Дерево и длина строки http://www.cyberforum.ru/cpp-beginners/thread722849.html
Есть пример дерева , где вычисляется наименьший его элемент. Помогите переписать код , чтобы найти самую короткую строку в дереве, элементы которого хранят какую-то строку. #include<iostream> #include<ctime> #include<cstdlib> struct node{ struct node *left; struct node *right; int key;
C++ Алгоритм шифрования WAKE Пытаюсь реализовать алгоритм шифрования WAKE, нашел сайт, где функции вроде бы описаны, но не могу разобраться, как их применять, так же есть исходник, где видимо пытались реализовать алгоритм, но он тоже не работает, может кто-нибудь помочь? Вот сайт: http://www.cix.co.uk/~klockstone/wake.htm Исходник: #include <iostream> #include <stdio.h> using namespace std; void cypher (long... подробнее

Показать сообщение отдельно
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
07.12.2012, 17:21     Есть программа по кодированию и декодированию методом Хаффмана с помощью дерева, на я не совсем понимаю что здесь к чему!
Здравствуйте! Есть программа по кодированию и декодированию методом Хаффмана с помощью дерева, на я не совсем понимаю что здесь к чему! Прокомментируйте кто-то программу, буду очень благодарен)
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
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#define line  "*********************************"
 
typedef struct node_t {
    struct node_t *left, *right;
    int freq;
    char c;
} *node;
 
struct node_t pool[256] = {{0}};
node qqq[255], *q = qqq - 1;
int n_nodes = 0, qend = 1;
char *code[128] = {0}, buf[1024];
 
node new_node(int freq, char c, node a, node b)
{
    node n = pool + n_nodes++;
    if (freq) n->c = c, n->freq = freq;
    else {
        n->left = a, n->right = b;
        n->freq = a->freq + b->freq;
    }
    return n;
}
 
void qinsert(node n)
{
    int j, i = qend++;
    while ((j = i / 2)) {
        if (q[j]->freq <= n->freq) break;
        q[i] = q[j], i = j;
    }
    q[i] = n;
}
 
node qremove()
{
    int i, l;
    node n = q[i = 1];
 
    if (qend < 2) return 0;
    qend--;
    while ((l = i * 2) < qend) {
        if (l + 1 < qend && q[l + 1]->freq < q[l]->freq) l++;
        q[i] = q[l], i = l;
    }
    q[i] = q[qend];
    return n;
}
 
void build_code(node n, char *s, int len)
{
    static char *out = buf;
    if (n->c) {
        s[len] = 0;
        strcpy(out, s);
        code[n->c] = out;
        out += len + 1;
        return;
    }
 
    s[len] = '0'; build_code(n->left,  s, len + 1);
    s[len] = '1'; build_code(n->right, s, len + 1);
}
 
void init(char *s)
{
    int i, freq[128] = {0};
    char c[16];
 
    while (*s) freq[(int)*s++]++;
 
    for (i = 0; i < 128; i++)
        if (freq[i]) qinsert(new_node(freq[i], i, 0, 0));
 
    while (qend > 2) 
        qinsert(new_node(0, 0, qremove(), qremove()));
 
    build_code(q[1], c, 0);
}
 
void encode(char *s, char *out)
{
    while (*s) {
        strcpy(out, code[*s]);
        out += strlen(code[*s++]);
    }
}
 
void decode(char *s, node t)
{
    node n = t;
    while (*s) {
        if (*s++ == '0') n = n->left;
        else n = n->right;
 
        if (n->c) putchar(n->c), n = t;
    }
 
    putchar('\n');
    if (t != n) cout<<"garbage input\n";
}
 
int main(void)
{
    int i;
    cout<<line<<"\n\tHuffman Coding\n"<<line<<"\n";
    cout<<"    Enter text for coding:\n";
    char str[100], buf[1024];
     gets(str);
    init(str);
    for (i = 0; i < 128; i++)
        if (code[i]) printf("'%c': %s\n", i, code[i]);
    encode(str, buf);
    cout<<"encoded:  "<<buf<<"\n";
    cout<<"decoded:  ";
    decode(buf, q[1]);
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru