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

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

Войти
Регистрация
Восстановить пароль
 
Yedil_38
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 27
#1

Код шеннон или хаффмана в dev c++ - C++

30.09.2016, 12:32. Просмотров 295. Ответов 2
Метки нет (Все метки)

всем добрый день; сможете помочь с кодом, надо написать код шеннон или хаффмана в dev c++, плиииз. по братский
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2016, 12:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Код шеннон или хаффмана в dev c++ (C++):

Код написан в Dev C. Не работает в Visual. Как нужно переделать код? - C++
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт ошибку. ...

Код Хаффмана - C++
Люди подскажите, что это за зверь? и как его реализовать на с?

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

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

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

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

2
nmcf
5776 / 5087 / 1739
Регистрация: 14.04.2014
Сообщений: 20,830
30.09.2016, 16:52 #2
Запись в файл кодового дерева при сжатии по методу Хаффмана
0
ture
443 / 336 / 127
Регистрация: 27.11.2014
Сообщений: 1,042
30.09.2016, 17:00 #3
Было дело на степике
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
/*По данной непустой строке ss длины не более 10^4, состоящей из строчных букв латинского алфавита, постройте оптимальный беспрефиксный код. В первой строке выведите количество различных букв kk, встречающихся в строке, и размер получившейся закодированной строки. В следующих kk строках запишите коды букв в формате "letter: code". В последней строке выведите закодированную строку.*/
#include <iostream>
#include <string>
#include <map>
#include <vector>
 
class Node {
public:
    const char c;
    unsigned long long cnt;
    Node * zero, *one;
 
    Node(unsigned long long cnt, const char c, Node * zero = NULL, Node * one = NULL):cnt(cnt), c(c), zero(zero), one(one) {};
    ~Node() {
        delete zero, one;
    }
};
 
unsigned long long fill(std::map<const char, std::vector<bool>> & map_char, Node * tree, std::vector<bool> path);
 
int main() {
    //спрашиваем строку
    std::string str;
    std::getline(std::cin, str);
 
    //строим карту частот
    std::map<const char, unsigned long long> mp;
    for(size_t i = 0; i<str.length(); ++i)
        mp[str[i]] += 1;
    //складываем в map
    std::multimap<unsigned long long, Node *> mp_tree;
    for(auto x = mp.begin(); x != mp.end(); ++x)
        mp_tree.insert(std::pair<unsigned int, Node *>(x->second, new Node(x->second, x->first)));
    mp.clear();
    //строим дерево
    if(mp_tree.size() == 1) {
        Node * fst = mp_tree.begin()->second;
        Node * nd = new Node(fst->cnt, 0, fst);
        //удаляем первый и добавляем снова, но с учетом ветви, чтоб потом путь выстроить
        mp_tree.erase(mp_tree.begin());
        mp_tree.insert(std::pair<unsigned int, Node *>(nd->cnt, nd));
    } else
        while(mp_tree.size()>1) {
            //берем первые два и складываем в один
            Node * fst = mp_tree.begin()->second;
            Node * snd = (++mp_tree.begin())->second;
            Node * nd = new Node(fst->cnt + snd->cnt, 0, fst, snd);
            //удаляем первые два и добавляем сводный узел
            mp_tree.erase(mp_tree.begin());
            mp_tree.erase(mp_tree.begin());
            mp_tree.insert(std::pair<unsigned int, Node *>(nd->cnt, nd));
        }
    Node * tree = mp_tree.begin()->second;
    mp_tree.clear();
    //собираем карту по дереву
    std::map<const char, std::vector<bool>> map_char;
    std::vector<bool> path;
    unsigned long long len = fill(map_char, tree, path);
 
    //пишем результат
    std::cout << map_char.size() << " " << len << std::endl;
    //карта
    for(auto x = map_char.begin(); x != map_char.end(); ++x) {
        std::cout << x->first << ": ";
        for(size_t j = 0; j<x->second.size(); ++j)
            std::cout << x->second[j];
        std::cout << std::endl;
    }
    //закодированная строка
    for(size_t i = 0; i<str.length(); ++i)
        for(size_t j = 0; j<map_char[str[i]].size(); ++j)
            std::cout << map_char[str[i]][j];
 
    system("pause");
    return 0;
}
 
unsigned long long fill(std::map<const char, std::vector<bool>> & map_char, Node * tree, std::vector<bool> path) {
    unsigned long long cnt = 0;
    if(tree->zero == NULL && tree->one == NULL) {
        map_char[tree->c] = path;
        cnt = tree->cnt*path.size();
    } else {
        if(tree->zero != NULL) {
            path.push_back(false);
            cnt += fill(map_char, tree->zero, path);
            path.pop_back();
        }
 
        if(tree->one != NULL) {
            path.push_back(true);
            cnt += fill(map_char, tree->one, path);
            path.pop_back();
        }
    }
 
    return cnt;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2016, 17:00
Привет! Вот еще темы с ответами:

Код Хэмминга (Dev C++) - C++
всем добрый день; сможете помочь с кодом, надо написать код хэмминга в dev c++, плиииз. по братский

Код не компилируется (Dev-C++) - C++
Здравствуйте, у меня проблема в следующем: когда компилирую прогу в dev c++ мне пишет что прога не откомпилирована, хотя я до этого...

Переписать код из dev-C++ в Turbo C - C++
помогите переделать из dev-C++ в Turbo C #include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;conio.h&gt; #include &lt;graphics.h&gt; int...

Программный код С++ не компилируется в Dev-C++ - C++
ругается на 9 строку #include &lt;cstdlib&gt; #include &lt;iostream&gt; void Kramer(double C,double D);//Prototip funkcii void...


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

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

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