|
Труд вопреки насмешкам
|
|
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, скорее всего, вылетит. Исправление в разработке. - Интересно, а какие недостатки или проблемы обнаружите вы?
0
|
|
| 08.12.2018, 15:11 | |
|
Ответы с готовыми решениями:
11
Перестала работать кнопка пуск в Windows 10 Pro Technical Preview Build 9926 Windows 10 Technical Preview доступна для скачивания Новые возможности консоли CMD в Windows 10 Technical Preview |
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
||
| 08.12.2018, 16:25 | ||
|
Etyuhibosecyu, скачал, протестировал.
1.VirusTotal (0/69) 2. Программа работает. 3. 4. Какова конечная цель этого проекта? 5. В чем смысл сжимать файлы по одному? Это же ой как не удобно и имеет очень узкое приминение. 6. Программа не использует несколько ядер, т.е. работает в 1 потоке. 7. Зачем целых 3 полоски? Либо 1, и тогда понятно зачем она, либо 3 с подписями, какая какой процесс показывает. 8. Желательно было бы выложить исходный код, который как я понял написан на C# и С++. 9. Прикрепляю архив с 7 тестами по сжиманию текстовых файлов FileCompressorом и обычным zip через WinRAR. (файлы есть и с случайным набором символов, не смотря на примечание в первом посту)
0
|
||
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
|
| 08.12.2018, 16:34 | |
|
А как же собственный язык? Ведь столько было энтузиазма? Прошло 2 недели и УСЁ?
Что касается темы. Честно пытался прочитать и понять. Но после всяких миллибитов терпения не хватило. (обычно алгоритмы компрессии описывают математическими формулами, но я так понимаю не этот случай) Чем ваш компрессор лучше например бесплатного 7z? Вы тесты делали? А вообще есть 2 типа сжатия, с полным восстановлением и неполным. К неполным относятся всякие jpg, mpeg, mp3 и т.п. Я надеюсь вы понимаете что там сжатие идёт основываясь на совершенно других принципах. P.S. TM - это торговая марка. Вы уже свою зарегистрировали? Не боитесь что кто то вперёд зарегистрирует и заберёт все миллионы себе?
0
|
|
|
Труд вопреки насмешкам
|
|||||||
| 08.12.2018, 16:49 [ТС] | |||||||
|
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
|
|
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
||
| 08.12.2018, 17:27 | ||
|
Добавлено через 3 минуты И еще насчет интерфейса. Он сейчас простой, но не удобный. Нужно чтобы, например, программа создавала ассоциации в проводнике, и по двойному клику на filename.ext.filecompress программа в фоне его распаковывала и открывала пользователю в нужной ему программе (для txt - Блокнот, для mp4 - плеер, и т.д.). Добавлено через 1 минуту Не по теме:
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
|
|
|
Труд вопреки насмешкам
|
|
| 08.12.2018, 17:50 [ТС] | |
|
Ругать можете, а предложить дельные советы, как сделать, чтобы степень сжатия конкурировала как минимум с 7z-средним - нет? Есть расхожая фраза, что в любом деле 10% успеха - это талант, а 90% - з***ца. Вот в данном случае талант - это технология PseudoByte™, а з***ца - это неисчислимое множество мелких потерь - по 20 миллибит на символ, по 250 миллибит на блок Лемпеля-Зива и т. д., которые в сумме увеличивают размер файла в несколько раз. Правильно я понял? Если да, то где можно почитать списки типичных мелких ошибок, уменьшающих степень сжатия без потерь?
0
|
|
|
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
|
|||
| 09.12.2018, 11:07 | |
|
Помогаю со студенческими работами здесь
12
Почему в Eclipse неактивно действие Build Project и Build All? Новые свойства Version Information: ProgramID Webpack "npm run build" выдает ошибку: "npm ERR! missing script: build" Technical information «stop»:0Х0000007B Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Пошагово создадим проект для загрузки изображения. . .
|