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

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

30.10.2011, 22:10. Показов 4236. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru