Simple brute-force implementation #94
Conversation
Я очень сильно прокачал перебор (многопоточность, отсутствие вызовов sh), но в итоге за час он смог продвинутся только на Жалко, направление оказалось тупиковым. |
Перебор такого алфавита изначально является запредельно ресурсоёмкой задачей. Если я правильно помню комбинаторику, то это факториал длинны ряда. А для 64 символьного алфавита это ~1.2*10^89. Это очень много перебора. Задачу проще решить аналитически. gzip это два алгоритма:
lz77 заменяет повторы в тексте на обратную ссылку на сегмент где встречается оригинальный сегмент. Huffman coding строит дерево частоты вхождения символов и дальше кодирует самые популярные меньшим числом бит. Очевидно что перестановка не будет иметь никакого эффекта на Huffman coding. Значит необходимо оптимизировать для LZ77. В первую очередь необходимо поставить алфавит или в самый конец файла или в самое начало, это даст больше возможностей для обратных ссылок. Дальше прогнать LZ77 без алфавита и составить карту произведённых замен. Потом подобрать несколько наиболее эффективную комбинацию замен, которые можно составить из алфавита и протестировать какая из них лучше. Альтернатива: тупо перебрать все возможные комбинации встречающихся в файле строк, длинной больше чем обратная ссылка. Это будет явно меньше комбинаций чем перебор всего алфавита. Ну и переписать исходники так, чтоб было максимально много повторяющихся блоков текста :) Вот онлайн демка lz77: |
Есть ещё варианты — генетический алгоритм |
Я написал новый брутфорсер, который быстрее 21b99f7 |
FYI: в гзипе бэкреференс не может быть короче 3 байт (нет даже способа закодировать длину 2) Возможно, есть смысл извлечь из окружения триграммы (только "полезные":
и уже плясать от них: склеивать и комбинировать в разном порядке |
Изначальная задача напомнила мне вот эту статью-визуализацию факториала пятидесяти двух https://czep.net/weblog/52cards.html Интересное чтиво, рекомендую :) |
I've created a simple console-output-based brute-force script. It looks like a crypto mining now.
