Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.98/49: Рейтинг темы: голосов - 49, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 46
1

Алгоритм сжатия Хаффмана

03.03.2013, 00:21. Просмотров 9697. Ответов 9
Метки нет (Все метки)


Может кто сталкивался с таким алгоритмом?
Может у кого нибудь есть исходник, или подробный алгоритм?
На разных сайтах смотрел, не понято как реализовать данный алгоритм.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2013, 00:21
Ответы с готовыми решениями:

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

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

Алгоритм сжатия данных
Помогите пожалуйста, необходимо создать программное приложение сжатия данных алгоритмом LZ77

Алгоритм сжатия RLE
Здравствуйте, очень нужна помощь в задании! Просто очень срочно, пожалуйста! Написать программу...

9
143 / 143 / 39
Регистрация: 17.08.2012
Сообщений: 411
03.03.2013, 00:39 2
посмотрите тут и тут
0
Заблокирован
03.03.2013, 01:10 3
у меня на C++ есть надо?
0
0 / 0 / 0
Регистрация: 01.03.2013
Сообщений: 46
03.03.2013, 01:17  [ТС] 4
Цитата Сообщение от adm_loro Посмотреть сообщение
у меня на C++ есть надо?
Давайте, попробую переделать
0
143 / 143 / 39
Регистрация: 17.08.2012
Сообщений: 411
03.03.2013, 01:34 5
Цитата Сообщение от myself Посмотреть сообщение
Давайте, попробую переделать
я Вам уже готовое скинул, осталось только скопировать и вставить к себе в проект...
0
Заблокирован
03.03.2013, 01:39 6
придется ждать до понедельника. у меня на рабочем компе, а я на выходные его выключаю. сейчас неохота запариваться. уже позабывал все.

Добавлено через 30 секунд
извини, если че.
0
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 4
12.05.2013, 20:21 7
Ребят, а вы не могли бы мне сбросить алгоритм хаффмана на с++? очень нужно!
0
143 / 143 / 39
Регистрация: 17.08.2012
Сообщений: 411
12.05.2013, 20:31 8
juli_J,
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
char *str="HEFB";
 
#define CODETYPE char
struct hash{
  char symb;
  CODETYPE code; // Код. Пусть будет char - общности не нарушит.
  char codelen;  // Длина в битах
};
 
#define TABLEN 4
struct hash table[]={
  {'H',0x00,1}, // 0
  {'E',0x07,3}, // 111
  {'F',0x18,5}, // 11000
  {'B',0x19,5}};// 11001
// итого, от строки HEBF должно получиться:
//Первый байт '1000][111][0]' Второй байт: '00[11001][1'.
 
#define BUFLEN 255
char buf[BUFLEN];     // буфер, накапливает коды
 
unsigned int i,j,k=0; // i - индекс символа в строке str
                      // j - индекс элемента массива table
                      // k - индекс текущего байта в буфере buf
char cb1,cb2, cbc=0;  // cb2 и cb1 - буферные байты
                      // cbc - число зполненных бит в cb2
                      // cb2 - скидывается в buf по заполнению всех 8 битов
CODETYPE cod;         // буфер для кода
char len;             // кода в буфере cod
 
int main(){
for (i=0;i<strlen(str);i++){                          //проходим строку посимвольно
  for (j=0; (j<TABLEN)&&(table[j].symb!=str[i]); j++); //определяем элемент table, соответствующей текущему символу
  len=table[j].codelen;   // сохраняем длину кода
  cod=table[j].code;      // и сам код в буферах
  do{ 
    if (cbc+len>8){           // Если у нас остатки кода не влезают cb2
      cb1=(char)cod<<cbc;     // Производим  
      cod>>=cbc;              // слабообъяснимые
      len-=8-cbc;             // манипуляции
      cbc=8;                  // Которые заполняют буфер cb2 до конца
    }
    else{                     // Если код вмещается в буфер целиком
      cb1=(char)cod<<cbc;     // Сдвигаем его на число заполенных бит
      cbc+=len;               // Засчитываем увеличение числа запоненных бит в cb2
      len=0;                  // А буфер кода - пуст.
    }
    cb2|=cb1;                 // Заполняем пустые биты куском кода
    if (cbc==8){              // Если буфер cb2 полностью заполнен
      buf[k]=cb2;             // Скидываем его в buf
      cb2=0;                  // обнуляем
      k++;                    // Переходим к следующему байту в buf
      cbc=0;                  // Отмечаем обнуление cb2
      if (k==BUFLEN){         // Если buf заполнен
        k=0;                  // J,yekztv cx`nxbr
        //скидываем буфер buf в файл
        strnset(buf,0,BUFLEN); // очищаем buf
      }
    }
  }while(len!=0);
}
buf[k]=cb2;                   // заключительный аккорд
//скидываем буфер buf в файл
}
Добавлено через 12 секунд
juli_J,
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
char *str="HEFB";
 
#define CODETYPE char
struct hash{
  char symb;
  CODETYPE code; // Код. Пусть будет char - общности не нарушит.
  char codelen;  // Длина в битах
};
 
#define TABLEN 4
struct hash table[]={
  {'H',0x00,1}, // 0
  {'E',0x07,3}, // 111
  {'F',0x18,5}, // 11000
  {'B',0x19,5}};// 11001
// итого, от строки HEBF должно получиться:
//Первый байт '1000][111][0]' Второй байт: '00[11001][1'.
 
#define BUFLEN 255
char buf[BUFLEN];     // буфер, накапливает коды
 
unsigned int i,j,k=0; // i - индекс символа в строке str
                      // j - индекс элемента массива table
                      // k - индекс текущего байта в буфере buf
char cb1,cb2, cbc=0;  // cb2 и cb1 - буферные байты
                      // cbc - число зполненных бит в cb2
                      // cb2 - скидывается в buf по заполнению всех 8 битов
CODETYPE cod;         // буфер для кода
char len;             // кода в буфере cod
 
int main(){
for (i=0;i<strlen(str);i++){                          //проходим строку посимвольно
  for (j=0; (j<TABLEN)&&(table[j].symb!=str[i]); j++); //определяем элемент table, соответствующей текущему символу
  len=table[j].codelen;   // сохраняем длину кода
  cod=table[j].code;      // и сам код в буферах
  do{ 
    if (cbc+len>8){           // Если у нас остатки кода не влезают cb2
      cb1=(char)cod<<cbc;     // Производим  
      cod>>=cbc;              // слабообъяснимые
      len-=8-cbc;             // манипуляции
      cbc=8;                  // Которые заполняют буфер cb2 до конца
    }
    else{                     // Если код вмещается в буфер целиком
      cb1=(char)cod<<cbc;     // Сдвигаем его на число заполенных бит
      cbc+=len;               // Засчитываем увеличение числа запоненных бит в cb2
      len=0;                  // А буфер кода - пуст.
    }
    cb2|=cb1;                 // Заполняем пустые биты куском кода
    if (cbc==8){              // Если буфер cb2 полностью заполнен
      buf[k]=cb2;             // Скидываем его в buf
      cb2=0;                  // обнуляем
      k++;                    // Переходим к следующему байту в buf
      cbc=0;                  // Отмечаем обнуление cb2
      if (k==BUFLEN){         // Если buf заполнен
        k=0;                  // J,yekztv cx`nxbr
        //скидываем буфер buf в файл
        strnset(buf,0,BUFLEN); // очищаем buf
      }
    }
  }while(len!=0);
}
buf[k]=cb2;                   // заключительный аккорд
//скидываем буфер buf в файл
}
1
0 / 0 / 0
Регистрация: 09.01.2013
Сообщений: 4
12.05.2013, 22:42 9
vampire6666, спасибо большое))
0
vkru4a
13.12.2014, 17:57 10
vampire6666, не могли бы вы кинуть сюда код на c#, буду признателен
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2014, 17:57

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

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

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

Алгоритм Хаффмана (количество информации)
Здравствуйте коллеги. Тут пытаюсь решить такую задачку! 1 У нас есть файл (пусть для начало...

Алгоритм сжатия PPM - нужен пример
Доброго времени суток.. Ребята, у кого есть реализованный алгоритм сжатия pрm на С++/С# поделитесь...


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

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

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