Важная информация

User Tag List

Страница 3 из 12 ПерваяПервая 1234567 ... ПоследняяПоследняя
Показано с 21 по 30 из 114

Тема: Сжатие и упаковка. hrum3.5, hrust1, hrust2, laser compact x.x.

  1. #21
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hrumer, не не Хруст это другое... А именно официальная версия. Чтобы с бесстековым форматом как в Hrust 2 и компактным распаковщиком меньше чем в MegaLZ
    С уважением,
    Jerri / Red Triangle.

  2. #22
    Member
    Регистрация
    17.01.2005
    Адрес
    Gorno-Altaysk
    Сообщений
    82
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Hrumer, не не Хруст это другое... А именно официальная версия. Чтобы с бесстековым форматом как в Hrust 2 и компактным распаковщиком меньше чем в MegaLZ
    Jerri, я тут взглянул на кодирование hrum и megalz. Последний более универсальный вроде бы. А у hrum формат как бы должен жать лучше плохопакуемые данные, а на включениях текста, графики он начинает проигрывать, так, не? Я протестил на mhmt несколько файлов, вроде megalz лучше сжимает, причем байтов на 100(Несколько байт-десятков байт можно отвести на то, что в hrum окно могло бы быть на 256 больше, всего то вставить надо команду типа DEC H). Или мне попались не те тестовые файлы?

  3. #23
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hrumer, Хрум лучше жмет код. Да. графику лучше жмет Хруст.
    МегаЛЗ хз. я еще статистику не накопил.
    С уважением,
    Jerri / Red Triangle.

  4. #24
    Member
    Регистрация
    17.01.2005
    Адрес
    Gorno-Altaysk
    Сообщений
    82
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    jerri, Всё, до меня дошло. Посмотрел внимательно, как устроены депакеры у других. EXX нету. Как будто не для z80 писали. Формат hrum'а+увеличение dist на 256 (т.к. это ограничение фактически придуманное для скорости паковки)+депакер типа hrust2+пакер OLZH и своя ниша есть. Последние X байт явно ведь не надо хранить где нибудь, это же не модно сейчас.

  5. #25
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hrumer, ну последние байты это нужно только если чужой снапшот кусками сжимаешь.
    А если свое что-то то тут до бита известно что где лежит
    С уважением,
    Jerri / Red Triangle.

  6. #26
    Member
    Регистрация
    17.01.2005
    Адрес
    Gorno-Altaysk
    Сообщений
    82
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если кому интересно, (типа похвалюсь!) почему сжатие было быстрым, и почему на некоторых файлах в режиме best тормозилось. Без заумных слов, одни схемы:

    Код:
    Файл:      |   Таблица зацикленная,
               |   Указывает на предыдущее
               |   вхождение символа:
    
    #8000   A<----+   #0000
    #8001   B     |   #0000
    #8002   C     |   #0000
    #8003   D     |   #0000
    ...           |
                  |
    #8010   A<--+ +-- #8000
    #8011   E   | 
    #8012   C   | 
    ...         |
                |
    #8030   A   +---- #8010
    #8031   F
    #8032   D
    ... 
    
    #8070   A   <--- Мы тут.
    #8071   B
    #8072   C
    
    
    Таблица последних вхождений символов:
    
    A	#8030
    B       #8001
    ...
    --------------------------
    
    Всё ОК, но есть фейл на таких вот данных:
    
    #8000   A<------+ #0000
    #8001   A<----+ +-#8000
    #8002   A<--+ +---#8001
    #8003   A<+ +-----#8002
    ....      +---+
                  |
    #8010   A<-   +---#8003
    #8011   A<-     <-#8010
    #8012   A<--+   <-#8011
    ....        |
                |
    #8030   A   +---- #8012
    #8031   A         #8030
    #8032   A         #8031
    ....
    
    #8070   A   <--- Мы тут. Впереди печаль.
    #8071   A
    #8072   A
    В пакере в режимах fast и good эти таблицы заполнялись частично, чтобы скорость не падала. В 95 году это типа было крута. Сейчас все проще - в свободном доступе много инфы, в т.ч. на русском. Например, кандидатская Кадача. Там много всего написано, читать в общем, интересно.

    В хрусте2 поиск идет не по одному символу, а по символу и нескольким битам следующего символа.

    Позже выложу схему, алгоритм, который без потери коэффициента сжатия решает вопрос по скорости с такими "рыхлыми" файлами.

  7. #27
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Почитал про нибблы Титуса, и пришла в голову новая идея.

    Что если у нас есть ветка, которая вставляет L байтов (i=0..L-1) следующим образом:
    mem[pointer+i] = mem[pointer+i-disp] xor <data[i]>
    Где <data[i]> - только младшие N битов, причём N вычисляется так (вариация на тему DAKX):

    N=curN[L]
    Читаем из потока биты и считаем число единиц M - до первого нуля или пока N+M-1 < 8
    N=N+M-1
    curN[pointer mod disp]=N

    Такое кодирование может оптимизировать много вызовов типа:
    ld hl,nn
    ld a,n
    call nn

    или развёрнутых лупов типа
    add hl,bc
    ld a,h
    ld e,n
    ld (de),a

    В последнем случае L=disp.

  8. #28
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,554
    Спасибо Благодарностей отдано 
    1,219
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    mem[pointer+i] = mem[pointer+i-disp] xor <data[i]>
    Где <data[i]> - только младшие N битов, причём N вычисляется так (вариация на тему DAKX):
    Почему XOR, а не ADD?

  9. #29
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Потому что, например, между значениями 2 и 7 нужно ксорить всего 3 бита, а для сложения надо 3 бита и знак, т.е. 4 бита.

    ---------- Post added at 14:01 ---------- Previous post was at 14:00 ----------

    Вообще интересно было бы послушать идеи, как в рамках этой концепции кодировать ксоры типа #80 (1 сдвинутый бит).

  10. #30
    Member
    Регистрация
    17.01.2005
    Адрес
    Gorno-Altaysk
    Сообщений
    82
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я б тоже предпочел XOR. С одно стороны. С другой - бывают таблицы с увеличивающимися значениями. С третьей - надо же тестировать! И тут возникает вопрос на чем. Предлагаю в соседней ветке обсудить набор тестовых файлов, в т.ч. подброку игр, дем, текстов, графики, смешанных данных.

    Но эта ветка о другом. А вы читали http://cbloomrants.blogspot.ru/2010/...ing-lzma.html? Вот этот кусок интересен:



    ADDENDUM : here's an illustration of how the special LZMA modes help on structured data. Say you have a file of structs; the structs are 72 bytes long. Within each struct are a bunch of uint32, floats, stuff like that. Within something like a float, you will have a byte which is often very correlated, and some bytes that are near random. So we might have something like :


    [00,00,40,00] [7F 00 3F 71] ... 72-8 bytes ... [00,00,40,00] [7E 00 4C 2F]
    ... history ... * start here

    we will encode :

    00,00,40,00 :
    4 byte match at offset 72
    (offset 72 is probably offset0 so this is a rep0 match)

    7E :
    delta literal
    encode 7E ^ 7F = 1

    00 :
    one byte match to offset 72 (rep0)

    4C :
    delta literal
    encode 4C ^ 3F = 0x73

    2F :
    regular literal

    Also because of the position and state-based coding, if certain literals occur often in the same spot in the pattern, that will be captured very well.

    Note that this is not really the "holy grail" of compression which is a compressor that figures out the state-structure of the data and uses that, but it is much closer than anything in the past. (eg. it doesn't actually figure out that the first dword of the structure is a float, and you could easily confuse it, if your struct was 73 bytes long for example, the positions would no longer work in simple bottom-bits cycles).

    В хруст1, особенно в реализации mhmt подобного рода структурность сжимается кодом вида AxC(вставной байт). Надо бы просчитать закономерность, как изменяется вставной байт, если всего на 1-2бита, то можно выиграть.

    А, формат hrum4 расписал. Ннадо сюда?
    Это улучшенный hrum3.5:
    Нет неиспользованных кодов.
    Две переменных, передающихся от кодера к декодеру, для оптимизации дистанций и длин.

Страница 3 из 12 ПерваяПервая 1234567 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Архивирование, сжатие, упаковка.
    от GriV в разделе Программирование
    Ответов: 30
    Последнее: 22.07.2019, 17:25
  2. ɹǀɩ ATARI. Упаковка данных
    от breeze в разделе Atari
    Ответов: 4
    Последнее: 16.11.2014, 15:55
  3. Баг в depacker от hrust1.3?
    от moroz1999 в разделе Программирование
    Ответов: 65
    Последнее: 17.04.2014, 10:39
  4. Упаковка текстов
    от Shadow Maker в разделе Программирование
    Ответов: 18
    Последнее: 10.10.2008, 21:43

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •