propels
1

Как разобраться? Кодирование по Хаффману(

09.01.2014, 20:51. Показов 341. Ответов 0
Метки нет (Все метки)

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
void    getmin2(int n, int *i1, int *i2) //нахождение двух минимальных частот
//в неиспользованных узлах метода Хаффмана
{
 int    i, min1, min2;
 
 *i1=*i2=-1;
 for (i=0,min1=min2=1000000;i<n;i++) 
  if (!uses[i]) //данный узел еще не использовался
   if (frs[i]<=min1) { //частота узла меньше или равна первого минимума
    *i2=*i1;    //текущий первый минимум делаем вторым
    min2=min1;
    *i1=i;      //запоминаем индекс и значение нового первого минимума
    min1=frs[i];
   }
   else
    if (frs[i]<min2) { //найден новый второй минимум 
     *i2=i;     //запоминаем индекс и значение нового второго минимума
     min2=frs[i];
    }
}
 
void    getbinarycode(char *dstptr, int l, int c) //построение символьного вида кода c длиной l
{
 int f;
 
 dstptr+=l;
 *dstptr--=0;
 for (f=1;l;f<<=1,l--) *dstptr--=(c&f)?'1':'0';
}
 
void    getcode(int i, int l, int c) //рекурсивная процедура формирования кода Хаффмана
{
 int    j;
 
 if ((j=nodes[i][0])<nsymbol) {//левый потомок узла соответствует входному символу
  codes[j]=c<<1; //дописываем 0 к конецу кода
  lens[j]=l+1; //увеличиваем длину кода на 1
 }
 else //продолжаем формирование кода из левого потомка узла j, увеличив длину кода на 1 и дописав к концу кода 0
  getcode(j,l+1,c<<1);
 c=(c<<1)|1; //дописываем 1 к концу кода
 l++; //увеличиваем длину кода на 1
 if ((j=nodes[i][1])<nsymbol) {//правый потомок соответствует входному символу
  codes[j]=c; //записываем код
  lens[j]=l;  //и длину
 }
 else
  getcode(j,l,c); //продолжаем формирование кода из правого потомка узла j
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.01.2014, 20:51
Ответы с готовыми решениями:

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

Кодирование по Хаффману
Кто умеет кодировать по Хаффману?!

Архивация по Хаффману
Есть такая задачка: Напишите архиватор, который рассматривает любой входной файл как...

Сжатие данных по Хаффману
Решая задачку кодирования методом Хаффмана, столкнулась с проблемой записи получившейся кодировки в...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.01.2014, 20:51
Помогаю со студенческими работами здесь

Ребятушки, у кого-ниудь есть алгоритм кодирования и декодирования по Хаффману?
декодирование у меня есть я как бы среднячок, но сама написать не осилю)

Как подписать комментарии и разобраться с работой кода? Дали задание разобраться и объяснить, а я совсем новичок
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Запись чёрно-белого изображения bmp в двумерный массив и его сжатие/разжатие по Хаффману
Помогите, у меня задание: есть картинка (чёрно-белое изображение бмп) её необходимо записать в...

Задали работу, не могу разобраться. Используется делфи 10, не могу разобраться, как это сделать
В одномерном массиве, состоящем из n вещественных элементов, вычислить: минимальный элемент массива...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru