Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,627
Записей в блоге: 14

FileCompressor Technical Preview build 13041 (ProgramId 0)

08.12.2018, 15:11. Показов 1120. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то меня утянуло в сторону от языка программирования... И я написал новую программу - компрессор файлов.
Как доказывается теоремами, абсолютно оптимальное количество бит, необходимое для представления какого-либо файла, начиная с некоторого числа является невычислимым, и это число также является невычислимым. Поэтому споры о том, какой метод сжатия лучше, наверное, не прекратятся никогда... И я подумал, что мне тоже не помешает внести свой вклад в них. Вот так и появился FileCompressor - программа, сочетающая проверенные временем методы - метод Хаффмана, метод Лемпеля-Зива, RLE (в разработке E-RLE), возможно, BWT (в разработке, но здесь мне не нравится длительная распаковка), однобитная гарантия - с авторскими - PseudoByte™ и FlexRegimes™ (в разработке). Абсолютный минимум размера файла составляет 8-9 байт, абсолютный максимум раздувания - 2 байта (байт для однобитных гарантий для четырех методов сжатия - не разрывать же байт! - и байт для версии - вдруг в этой версии компрессор раздувает, а в будущей будет сжимать?).

Как пользоваться:
- Нажмите "Открыть для сжатия" и дождитесь заполнения всех трех полос, чтобы поместить в ту же папку сжатый файл с расширением .filecompressor.
- Нажмите "Открыть", чтобы распаковать файл с расширением .filecompressor во временную папку и сразу же открыть.
- Нажмите "Открыть для распаковки", чтобы распаковать в ту же папку.
- Нажмите Esc, чтобы прервать процесс (он прервется после заполнения нижней полосы загрузки).
- Не изменяйте расширение сжатого файла, стоящее перед .filecompressor, так как программа использует его для идентификации файла (внутри файла не хранится информация о расширении).

Преимущества в отношении степени сжатия:
- Авторская технология PseudoByte™, позволяющая добиться экономии, выраженной в долях бита (это может показаться абсурдным, но в контексте этой технологии это реально) - псевдобайт может иметь не 256 состояний (как байт), и даже не 2 (как бит), а абсолютно любое число, например, 147 или 25675, причем все псевдобайты в одном файле могут иметь разное число состояний.
Важно: "экономия, выраженная в долях бита" абсолютно не обозначает маленькую экономию, а означает только, что эта экономия выражается нецелым (и даже иррациональным) числом бит - например, 71.969173.
- Благодаря отсутствию архивации (только сжатие) экономится еще некоторое количество байт (невычислимое).
- Максимальные значения каких-либо величин в пределах файла (например, длины серии в методе RLE) хранятся отдельно, и все величины этого вида закодированы по "основанию" этого максимума (если нет порога - читайте ниже), что позволяет убить двух зайцев - не ограничиваться числом 255, если значение больше, и экономить 1-3 бита на каждом значении, если они маленькие.
- Также присутствует пороговое значение, отображающее, используются ли чаще значения, близкие к минимуму (к нулю) или к максимуму, и большинство значений закодированы по "основанию" порога, а меньшинство - по произведению: порог * (максимум - порог), что позволяет не использовать максимальный размер псевдобайта там, где можно обойтись меньшим (средняя экономия 2.573 бит на блок).
- При кодировании методом Лемпеля-Зива не выделяется память для дистанции меньше длины (средняя экономия 1 бит на блок) и для длины меньше 2 (средняя экономия 29 миллибит на блок).
- При RLE-кодировании не кодируются символы, которые Хаффман определил как очень редкие (вероятность, что они образуют серию, ничтожна, и средняя экономия 3.322 бит на каждый очень редкий символ или 100 миллибит на каждый символ).
- При кодировании Хаффмана (которое как раз и формирует псевдобайты) первый псевдобайт каждого блока имеет одно "лишнее" состояние, которое затем использует Лемпель-Зив, благодаря чему исключена иллюзия блока Лемпеля-Зива (встреча в тексте символа, совпадающего с управляющим для блока Лемпеля-Зива, но таким не являющегося) (при условии, что средний текст содержит 100 уникальных символов, и вероятность встретить конфликтный около 1/1000, а чтобы его раскрыть, требуется 2 символа, к чему можно добавить еще 1/50000 вероятности встретить иллюзию комбинации, которая "разоблачает" иллюзию, со средней длиной "разоблачения" около 5 символов, средняя экономия в моем методе 14 миллибит на каждый символ).

Что НЕ СЛЕДУЕТ делать с FileCompressor (это НЕ мои недоработки, а объективные невозможности любого подобного компрессора):
- Пытаться сжать уже сжатые файлы (например, PNG) - ничего не выйдет. Для сжатия необходимо предварительно разжать всеми другими методами, примененными к файлу.
- Сравнивать со сжатием с потерями - FileCompressor сжимает без потерь и точка.
- Сравнивать со специальными методами - универсальные средства всегда хуже специальных, вне зависимости от уровня разработчика.
- Сравнивать с методами, которые совершенствовались десятки лет, да еще и являются известными брендами (например, RAR) - FileCompressor разрабатывался лично мной и возможностей крупных корпораций у меня нет.
- Пытаться сжать белый шум или строку, сгенерированную из случайных символов - они являются несжимаемыми (во всяком случае, в настоящее время).

Недостатки в отношении степени сжатия:
- Если 60% файла являются "нормальными", а 40% - несжимаемыми, то файл либо сожмется на несколько процентов, либо сжатие будет заблокировано однобитной гарантией, и файл не сожмется совсем. Это могут устранить Flex-режимы, но эта авторская технология в разработке.
- При кодировании Лемпеля-Зива, если между исходным блоком и повтором есть другие блоки Лемпеля-Зива, они включаются в дистанцию полностью, а не как один символ, что уменьшает степень сжатия (средняя неиспользованная экономия 136 миллибит на блок). Исправление этого, опять же, находится в разработке.
- Если кодирование Хаффмана дало результат, а Лемпель-Зив "промолчал", лишнее состояние из первых псевдобайт в блоках Хаффмана не удаляется (исправление, опять же, в разработке) (средняя неиспользованная экономия 70 миллибит на блок Хаффмана, то есть на символ).
- Сильно ударяет по Хаффману таблица кодирования, где нужно передать незакодированными все встречающиеся в тексте символы. Возможно, стоит оптимизировать эту таблицу способом передачи только разности ANSI-кодов предыдущего и следующего символов или перечисления кодов Хаффмана всех подряд символов с указанием, какие символы не кодируются (не смог вычислить неиспользуемую экономию).
- Дистанция и длина по Лемпелю-Зиву ограничены 1000 символами, так как время сжатия этим методом в среднем случае пропорционально квадрату, в худшем - кубу этих величин.

Проблемы, не имеющие непосредственного отношения к степени сжатия:
- Чрезвычайно высокое время сжатия - по разным моим расчетам, при тактовой частоте процессора 2.7 ГГц (как у меня) файл размером 3 килобайта будет сжиматься от 30 секунд до минуты, 3 мегабайта - от 12 часов до суток, 3 гигабайта - несколько лет, при этом успех сжатия не гарантирован. Самый длительный процесс - преобразование псевдобайт в строку. Кто знает, как это исправить - пишите.
- Даже если вы нажали Esc, вам вероятно, все же придется ждать долго, если файл достаточно большой, ну или убить процесс.
- Если сжатый файл содержит больше 5000 псевдобайт, при его распаковке FileCompressor, скорее всего, вылетит. Исправление в разработке.
- Интересно, а какие недостатки или проблемы обнаружите вы?
Вложения
Тип файла: rar FileCompressor Technical Preview build 13041.rar (41.5 Кб, 9 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2018, 15:11
Ответы с готовыми решениями:

Перестала работать кнопка пуск в Windows 10 Pro Technical Preview Build 9926
Дела такое. Перестала работать кнопка пуск вообще. Походу залипание происходит из-за каких то проблем с реестром. ...

Windows 10 Technical Preview доступна для скачивания
Как и было обещано на прошедшем мероприятии с предварительным анонсом Windows 10, публичная ранняя сборка (Technical Preview) новой версии...

Новые возможности консоли CMD в Windows 10 Technical Preview
Windows 10: новые возможности и функции в командной строке Microsoft недавно представили предварительную версию Windows 10 для...

11
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
08.12.2018, 16:25
Etyuhibosecyu, скачал, протестировал.
1.VirusTotal (0/69)
2. Программа работает.
3.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Чрезвычайно высокое время сжатия
Подтверждаю.
4. Какова конечная цель этого проекта?
5. В чем смысл сжимать файлы по одному? Это же ой как не удобно и имеет очень узкое приминение.
6. Программа не использует несколько ядер, т.е. работает в 1 потоке.
7. Зачем целых 3 полоски? Либо 1, и тогда понятно зачем она, либо 3 с подписями, какая какой процесс показывает.
8. Желательно было бы выложить исходный код, который как я понял написан на C# и С++.
9. Прикрепляю архив с 7 тестами по сжиманию текстовых файлов FileCompressorом и обычным zip через WinRAR. (файлы есть и с случайным набором символов, не смотря на примечание в первом посту)
Вложения
Тип файла: zip FileCompressor Test.zip (26.3 Кб, 3 просмотров)
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
08.12.2018, 16:34
А как же собственный язык? Ведь столько было энтузиазма? Прошло 2 недели и УСЁ?

Что касается темы. Честно пытался прочитать и понять. Но после всяких миллибитов терпения не хватило. (обычно алгоритмы компрессии описывают математическими формулами, но я так понимаю не этот случай)

Чем ваш компрессор лучше например бесплатного 7z? Вы тесты делали?

А вообще есть 2 типа сжатия, с полным восстановлением и неполным. К неполным относятся всякие jpg, mpeg, mp3 и т.п. Я надеюсь вы понимаете что там сжатие идёт основываясь на совершенно других принципах.

P.S. TM - это торговая марка. Вы уже свою зарегистрировали? Не боитесь что кто то вперёд зарегистрирует и заберёт все миллионы себе?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,627
Записей в блоге: 14
08.12.2018, 16:49  [ТС]
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
1.VirusTotal (0/69)
Это намек та то, что программа вирусная?
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
4. Какова конечная цель этого проекта?
Вероятно, проект будет развиваться, и, возможно, когда-либо станет одним из лучших методов сжатия.
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
5. В чем смысл сжимать файлы по одному? Это же ой как не удобно и имеет очень узкое приминение.
Есть два совершенно разных процесса - сжатие и архивация. Меня вообще удивляет, почему их принято объединять.
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
6. Программа не использует несколько ядер, т.е. работает в 1 потоке.
Не угадали. Программа работает в двух потоках. Один - непосредственно сжатие, второй - отслеживание, не нажата ли клавиша Esc.
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
7. Зачем целых 3 полоски? Либо 1, и тогда понятно зачем она, либо 3 с подписями, какая какой процесс показывает.
Да, подписи не помешало бы расставить. Первая - полный процесс, вторая - текущий процесс, третья - статус (англ. Total, Current, Status).
Цитата Сообщение от MrOnlineCoder Посмотреть сообщение
9. Прикрепляю архив с 7 тестами по сжиманию текстовых файлов FileCompressorом и обычным zip через WinRAR. (файлы есть и с случайным набором символов, не смотря на примечание в первом посту)
Насколько я понял, степень сжатия почти во всех случаях подобна.
MrOnlineCoder, не знаете, какие есть общие способы повысить быстродействие длинного цикла? У меня когда-то был аналог шахмат, так там программа долго думала над ходом, а тут долго сжимает - не знаете, как увеличить эту скорость на том же компьютере?
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
08.12.2018, 17:08
Я не знаю как работает программа но у меня 12 потоков по 4-5ГГц - и в диспетчере задач используется только 1 поток 14% максимум. Запустил сжатия текстового файла 214 Кб. До сих пор жду пока программа закончит дела...

Добавлено через 18 минут
Ну что. Я наконец дождался пока программа завершится. Чуть не постарел. Итоги такие: Я тупо сохранил текущую страницу из браузера и получил file.html

Исходный файл: 219080 байт
Файл программы:82382 байт

Далее за архивировал 7z - сжатие максимальное. Время архивирования где то 0.2 секунды.

Размер: 38297 байт

Думаю без комментариев.
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
08.12.2018, 17:27
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Не угадали. Программа работает в двух потоках. Один - непосредственно сжатие, второй - отслеживание, не нажата ли клавиша Esc.
Я не об этих потоках, а о том что на многоядерном процессоре программа будет использовать только 1 ядро для сжатия. Например, на каком-то Intel Xeon с 16 ядрами по 3 Ггц (условно), программа будет использовать только то 1 ядро, что не эффективно.

Добавлено через 3 минуты
И еще насчет интерфейса. Он сейчас простой, но не удобный. Нужно чтобы, например, программа создавала ассоциации в проводнике, и по двойному клику на filename.ext.filecompress программа в фоне его распаковывала и открывала пользователю в нужной ему программе (для txt - Блокнот, для mp4 - плеер, и т.д.).

Добавлено через 1 минуту

Не по теме:


Еще ждите отзыва от Usaga о целесообразности и конкурентной способности этой софтины :)

0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
08.12.2018, 17:28
Человек скоро для себя откроет Task. И пойдут очередные откровения.
P.S. В современном C# уже практически не пользуются thread.
0
08.12.2018, 17:33  [ТС]

Не по теме:

Где вы берете такие мощные компьютеры? Сервера, что ли? 12 ядер по 4-5 ГГц, 16 ядер по 3 ГГц... У меня 2 ядра по 1.35 ГГц. Компьютер куплен в июне этого года.

0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
08.12.2018, 17:36
Intel Core i7-8700K - что то около 350$, вроде как каждый может себе позволить.

Сейчас вышла 9 серия - там полноценных 8 ядер - 16 потоков. И то же что то вроде 450$
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
430 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,627
Записей в блоге: 14
08.12.2018, 17:50  [ТС]
Ругать можете, а предложить дельные советы, как сделать, чтобы степень сжатия конкурировала как минимум с 7z-средним - нет? Есть расхожая фраза, что в любом деле 10% успеха - это талант, а 90% - з***ца. Вот в данном случае талант - это технология PseudoByte™, а з***ца - это неисчислимое множество мелких потерь - по 20 миллибит на символ, по 250 миллибит на блок Лемпеля-Зива и т. д., которые в сумме увеличивают размер файла в несколько раз. Правильно я понял? Если да, то где можно почитать списки типичных мелких ошибок, уменьшающих степень сжатия без потерь?
0
Эксперт .NET
 Аватар для Usaga
14147 / 9375 / 1351
Регистрация: 21.01.2016
Сообщений: 35,328
09.12.2018, 10:42

Не по теме:

MrOnlineCoder, не, в данном случае, я не против никак. Поэкспериментировать с алгоритмами сжатия может быть полезно и интересно для ТС-а. В шапке темы не засветились фразочки типа "лучший в мире архиватор" и подобные, написанные под действием воспалённого ЧСВ, так что пускай будет)



Etyuhibosecyu, я рад что вы бросили глупую затею с DCASF и кровоглазыми играми.
0
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
09.12.2018, 11:07
В шапке темы не засветились фразочки типа "лучший в мире архиватор" и подобные
Хоть и не в шапке, но:
Вероятно, проект будет развиваться, и, возможно, когда-либо станет одним из лучших методов сжатия.


А вообще на заре времён IT - была такая мода, каждый писал свой архиватор. Я было грешен тоже любил мозги подразмять - правда никаких прототипов не делал, исключительно как массаж для мозгов.

Идея крутилась вокруг следующей мысли. Есть такие математические функции которые порождают различные цифровые ряды. То же знак ПИ порождает бесконечный численный ряд. Значит ли это что ПИ архивирует этот ряд? В общем нахождения ряда функций кодирующих данные и есть архивирование. Вот только сложность задачи походу невыполнимая
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2018, 11:07
Помогаю со студенческими работами здесь

Win 8.1 build 9600 распознаётся как Windows 8 build 9200
Проблема с версией. Win 8.1 build 9600 распознаётся как Windows 8 build 9200 . Проверил ток что . #include <windows.h> ...

Почему в Eclipse неактивно действие Build Project и Build All?
Доброго времени суток) У меня вопрос такой: почему в Eclipse неактивно действие Build Project и Build All?

Новые свойства Version Information: ProgramID
В XE 10.2 (может быть, раньше) в настройках проекта "Include Version Information" появилось новое свойство ProgramID, имеющее значение по...

Webpack "npm run build" выдает ошибку: "npm ERR! missing script: build"
Помогите пожалуйста! npm run build выдает ошибку npm ERR! missing script: build npm ERR! A complete log of this run can be found...

Technical information «stop»:0Х0000007B
доброй ночи! столкнулся с такой проблемой Technical information «stop»:0Х0000007B при установке windows xp 32-розрядную на ноут. у меня уже...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru