0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
|
||||||
1 | ||||||
Проблемы с алгоритмом Хаффмана21.05.2009, 22:16. Показов 2218. Ответов 11
Метки нет (Все метки)
Ве4ер добрый всем. Я реализую программу на Visual Studio - сжатие файлов по лагоритму Хаффмана. Программу написать было не сложно. Но проблемы оказались при проверке. Когда входной файл относительно(по меркам байт) большой - обходы дерева и построение дерева оказываются процессами скажем прямо не быстрыми. Я завел эту тему ,потому что хо4у ,чтобы программа работала быстрее. Ниже приведен код. Надеюсь на вашу помощь.
0
|
21.05.2009, 22:16 | |
Ответы с готовыми решениями:
11
Архивация алгоритмом Хаффмана. Кодирование алгоритмом Хаффмана Сжатие данных алгоритмом Хаффмана Сжатие текста алгоритмом Хаффмана. Где же ошибка? |
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
21.05.2009, 22:46 | 2 |
Товарищ!
А может, просто разбивать файл на части, и работать с каждой по-отдельности? Понимаю, что будет уже не то, но... Иначе, что ещё можно сделать, сам алгоритм уже врят ли улучшишь, ведь так? То есть, всё что остаётся - это оптимизация на уровне кода (реализации)... Добавлено через 15 минут 55 секунд Не по теме: А за то, что выложен исходник для оптимального дерева Хаффмана - большое спасибо.
0
|
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
|
|
21.05.2009, 23:25 [ТС] | 3 |
Ну здесь думаю да, остается оптимизировать код. Либо еще может измениться структура дерева. Я строю дерево по принципу = из массива берем два самих редких символа и объединяем в узел. и записываем в конец файла
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
22.05.2009, 11:36 | 4 |
Не понял.
В результате получается, что все листья (1 лист==1 буква) находятся на одном (самом нижнем) ярусе, да? Добавлено через 30 минут 25 секунд Два... в 1 узел? А можно алгоритм ?
0
|
65 / 65 / 5
Регистрация: 11.01.2009
Сообщений: 130
|
|
22.05.2009, 12:16 | 5 |
Исходники сжатия LZW,алгоритм Хаффмана
Servantes, вот специально выкладывал, разбирайтесь, там все просто
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
22.05.2009, 14:36 | 6 |
А, всё, понял. Беру свои слова обратно.
А теперь, посмотри 60-ю строку. На больших файлах это будет работать о-очень медленно. Не надо файл в память, алгоритм всё равно (при подсчёте частот) делает только один проход. (А динамическая память не предназначена для выделения таких "кусков"...) Добавлено через 30 минут 15 секунд И, для начала, какая именно функция сейчас тормозит?
0
|
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
|
|
22.05.2009, 17:48 [ТС] | 7 |
Проблема заключается в чтении файла. Я хотел избавиться от постоянного чтения путем единократного обращения к файлу и потом работать с памятою. просто 5 мб это уже 5 миллионов байт + обращение в си и команды = около минуты читает файл
Добавлено через 3 минуты 41 секунду Кстати оказалось не универсально это чтение. при чтении ехе файлов , в чар как только встречается байт со значение 0 то строка обрывается. Придется как я понял всеже побайтно читать файл(((
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
22.05.2009, 18:57 | 8 |
Именно так...
А кроме чтения, проблема именно в расшифровке (тормозит в обходах дерева)? Если да, то надо сделать "промежуточный" этап - разместить (уже построенное) дерево в одномерный массив (В Кнуте есть, как бинарное дерево хранить в массиве и как с ним работать). Массив интов, в каждой ячейке - 2 байта (младший-"узел/лист", старший-собсно код символа, если это лист). По массиву бегать будет намного быстрее, нежели по структурам с указателями. (к тому же, смещение вычислять там, * 2 или / 2, т.е. используя побитовые операции << и >>).
0
|
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 5
|
|
22.05.2009, 20:55 [ТС] | 9 |
Проблема еще и в обходе при составлении кодов
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
22.05.2009, 21:36 | 10 |
Сам алгоритм построения - врят ли принципиально можно улучшить уже...
0
|
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
|
|
27.05.2009, 22:07 | 11 |
Люди! Помогите, действительно, с более быстрым алгоритмом...
(Вот, например, что быстрее: отсортировать список методом слияния и затем дальше работать, или оставить как есть. При беглом анализе кажется, будто первый вариант быстрее, но при подсчёте сложности всего алгоритма "в целом" - не тут-то было...) А вообще, автору хотелось бы сказать следующее: где комментарии ?
0
|
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
|
||||||
23.06.2009, 18:17 | 12 | |||||
Может кто небудь сделать EXE файл с этого исходника и выложить, а то у меня нет C++:
0
|
23.06.2009, 18:17 | |
23.06.2009, 18:17 | |
Помогаю со студенческими работами здесь
12
Сжатие изображения алгоритмом Хаффмана с использованием бинарного дерева Проблемы с алгоритмом решения задачи Шифрование алгоритмом моноалфавитной подстановки и Алгоритмом Цезаря Алгоритм Хаффмана Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |