Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Yedil_38
0 / 0 / 0
Регистрация: 03.04.2016
Сообщений: 27
#1

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

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

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

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

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

Код Хаффмана
Всем доброго дня! имеется код хафманна, работает, но считает неправильно! кто...

Модифицированный код Хаффмана
Каждому числу соответствует любое двоичное (специальная таблица пример 1...

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

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

2
nmcf
6240 / 5552 / 2527
Регистрация: 14.04.2014
Сообщений: 23,345
30.09.2016, 16:52 #2
http://www.cyberforum.ru/cpp-beginners/thread1748209.html
0
ture
528 / 336 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
30.09.2016, 17:00 #3
Лучший ответ Сообщение было отмечено Yedil_38 как решение

Решение

Было дело на степике
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++)
всем добрый день; сможете помочь с кодом, надо написать код хэмминга в dev c++,...

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

Поиск наименьших двух элементов массива или алгоритм Хаффмана
Приветствую! Дали задачу, сделать прогу в котором изначально есть массив из...

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


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

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

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