Подробно об алгоритме LZSS

Тема в разделе "WASM.A&O", создана пользователем MAPTbIH, 6 июл 2007.

  1. MAPTbIH

    MAPTbIH Member

    Публикаций:
    0
    Регистрация:
    3 янв 2006
    Сообщения:
    84
    Нигде не видел самого подробного объяснения алгоритма LZSS. На www.compression.ru хорошо объясняется этот алгоритм, но не полностью: какой оптимальный размер представления ссылки и размера повторяющейся фразы лучше использовать, какой использовать порог количества символов при котором фраза заменяется ссылкой и размером, а так же есть и другие вопросы. Поэтому я решил создать этот топик, чтобы освятить в нём все вопросы косающиеся LZSS. Если есть исходники этого алгоритма на MASM'е прошу выкладывать :)
     
  2. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    почему бы этот момент не сделать опциональным??
     
  3. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    может быть потому, что у каждого свое понятие "оптимальности"? И под каждую из этих оптимальностей нет оптимальных значений? ;)
     
  4. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    А алгоритме не описано какой размер выбирать и как представлять свои данные. Поэтому весь выбор на твоей совести. Оптимальный выбор зависит от исходных данных и размеры можно подбирать чисто под них.

    > какой использовать порог количества символов при котором фраза заменяется ссылкой и размером

    Ссылку надо вставлять если она уменьшет размер данных.
    Если ссылка и размер в сумме, меньше/или равна, количеству байт которые они занимают плюс ещё 1 байт (который нужен чтобы объявить о новом количестве неповторяющихся байт), то ты очевидно эту ссылку вставлять не должен.

    Я бы например с выбором не морочился. Потому как сам алгоритм мало эффективен, и долго с ним возиться не стоит. Определённо сделать так, чтобы их границы совпадали с границами байт, и успокоиться. Сделать к примеру так:

    А ещё лучше, чуть-чуть отлониться от начальной консепции и сделать так:

     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    вообще, поиск подстрок наибольшей длины не даёт гарантии лучшего результа, напротив, он может ухудшать ситуацию, зато увеличение ресурсоёмкости алгоса гарантировано на все 100 пудов. лучше юзай блоки равной длины, а саму длину сделай опциональной.