Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/22: Рейтинг темы: голосов - 22, средняя оценка - 4.64
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 46

Алгоритм Хаффмана (количество информации)

30.10.2011, 22:10. Показов 4291. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте коллеги.
Тут пытаюсь решить такую задачку!
1 У нас есть файл (пусть для начало текстовый) мы его прочитаем
2 Найдем частоты каждого СИМВОЛА
3 По формуле ищем количество информации.
3 Далее создадим массив, элементы которого буду содержать ссылку "направо" и "налево" "частоту" символа и сам "символ".
4 (С ЭТОГО ПУНКТА Я ЗАСТРЯЛ)
нужно построить дерево из этих элементов по методике ХАФФМАНА (ищем 2 мин складываем ссылку назначаем и так до корня дерева) (проблема + еще сортировать нельзя массив, тк энергозатраты большие)
те как я понял имеем массив заполненный элементами (ЛевоПравоЧастотаСимвол) и теперь нужно искать 2 минимальных по частоте(в этом проблемы нет) их складывать перенаправлять ссылки и так пока частота не будет равно примерно 1(те корень дерева) НО где мне хранить новые элементы частота которых сложенна из 2х минимальных на данном этапе!(вот это не понятно вообще)

Так то езе потом пройтись по дереву и 1 и 0 ветвям присвоить но это болие-или-мение закладывается в голове думаю если предыдущий шаг будет решен это не вызовет проблем.

Заранее благодарен за помощь(чувствую что наглость зашкаливает но хотелось бы видеть как будет организован код выполняющий поиск 2мин и постройку дерева)

Вот мой код класс main (клас elemnt создал но там все просто поля левоправо доубл "частота" чар "символ")
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
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader File = new StreamReader("File1.txt", Encoding.Default);
            string s = File.ReadLine(); Console.WriteLine(s);
            int n = s.Length; double c = 0; int q = 0; int countmas = 0; int k, j, io = 0;
 
            int[] count = new int[65536];
            Element min1 = new Element(2, ' ');//для поиска 2хминимальныхуй
            Element min2 = new Element(2, ' ');//для поиска 2хминимальныхуй
 
            for (int i = 0; i < n; i++)
                count[s[i] - '\0']++;//получаем код символа в аски таблице
 
            for (int i = 0; i < 65536; i++)
            {
                if (count[i] != 0)
                {
                    Console.WriteLine("{0:f3} - {1} ", (double)count[i] / n, (char)i); //вывел для приличия
                    double z = - (((count[i] * 1.0 / n) * Math.Log((count[i] * 1.0 / n), 2))) * n;//считаеться без переменных
                    c += z;//типо алгебраическая сумма
                    countmas++;//этот счетчик чтобы узнать сколько не нулевых элементов для дальнейщего запихивания в массив
                }
            }
            Console.WriteLine("Количество информации {0:f3} бит", c); Console.WriteLine();//ВОТ ОНО ЧО НАДО ТО!!!!! 45% прифит!
 
            Element[] m = new Element[countmas];
 
            for (int i = 0; i < 65536; i++)
            {
                if (count[i] != 0)
                {
                    m[q] = new Element((double)count[i] / n, (char)i);//запихиваем символ его частоту и ссылки праволево в элемент массива
                    q++;
                }
            }
            //недопоиск
            for (k = 0; k < m.Length; k++)
            {
                if (m[k].P < min1.P)
                {
                    min1 = m[k];
                    io = k;
                }
            }
            for (j = 0; j < m.Length; j++)
            {
                {
                    if ((m[j].P >= min1.P) && (io != j))
                        min2 = m[j];
                }
            }
            //далее идет сплошная туппоость это нужно АРГОНИЗОВАТЬ КАК ТО!!1
            /*
            Element tmp = new Element(min1.P + min2.P, ' ');
            tmp.Left = min1;
            tmp.Right = min2;
            int blya = countmas+1;
            Element[] mtmp = new Element[blya];
            m.CopyTo(mtmp, 0);
            mtmp[countmas] = tmp;
            //mtmp[min1].Del; mtmp[min2].Del;*/
 
            Console.ReadKey();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.10.2011, 22:10
Ответы с готовыми решениями:

Сжатие графической информации использую алгоритм Хаффмана
Здравствуйте, помогите составить алгоритм сжатия графической информации при помощи алгоритма Хаффмана для C#. Пишу курсовую работу...

Алгоритм Хаффмана
Помогите пожалуйста с реализацией алгоритма хаффмана. Я зык C#

Алгоритм сжатия Хаффмана
Может кто сталкивался с таким алгоритмом? Может у кого нибудь есть исходник, или подробный алгоритм? На разных сайтах смотрел, не...

2
1 / 1 / 1
Регистрация: 17.05.2011
Сообщений: 46
31.10.2011, 23:09  [ТС]
Все тема закрыта я сам догадался как что сделать
0
4tuna
01.12.2011, 21:29
SanYek, будьте добры, выложите окончательный работающий код) Буду очень благодарен
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2011, 21:29
Помогаю со студенческими работами здесь

Алгоритм Хаффмана, реализация
Всем здравствуйте, нужна помощь в реализации алгоритма Хаффмана. Приведу пример с с++ : есть класс X с переменными a float и s string и...

Алгоритм сжатия Хаффмана
помогите пожалуйста с данным алгоритмом, моя программа работает, вот только не сжимет, а наоборот, размер становится больше! Этот алгоритм...

Реализовать алгоритм шифрования Хаффмана
2. Шифрование Хаффмана namespace System.Algorithm { public static class Huffman { /// &lt;summary&gt; /// Шифровка...

Алгоритм Хаффмана с использованием бинарного дерева
Здравствуйте. Задали написать алгоритм Хаффмана. Что я реализовал: 1) Определение набора букв, используемых в сообщение. 2) Подсчет...

Алгоритм Хаффмана. Вывод таблицы закодированных символов
Вообщем, не люблю так делать, но уже все перепробовала. Вот код, реализации алгоритма Хаффмана. Подскажите пожалуйста, как вывести...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru