DEV//UNIT

LZW-сжатие

Словарь фраз растёт на ходу; словарь не хранится — decoder строит его сам.

время O(n)память O(словарь)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function lzwEncode(input: string): number[] {
2 const dict = new Map<string, number>()
3 let next = 256
4 for (let i = 0; i < 256; i++) dict.set(String.fromCharCode(i), i)
5
6 const out: number[] = []
7 let w = ''
8 for (const ch of input) {
9 const wc = w + ch
10 if (dict.has(wc)) {
11 w = wc // фраза уже в словаре — растим
12 } else {
13 out.push(dict.get(w)!) // выдать код w
14 dict.set(wc, next++) // и выучить wc
15 w = ch
16 }
17 }
18 if (w) out.push(dict.get(w)!)
19 return out
20}

Проблема

Словарь фраз растёт на ходу; словарь не хранится — decoder строит его сам.

Что вы видите

Видим знакомую фразу — растим; новую — выдаём код и выучиваем.

Как это работает

Каждая новая фраза получает код 256+. Декодер строит идентичный словарь из потока кодов — файл не хранит словарь. Повторяющиеся паттерны сжимаются экспоненциально.

Пошаговый разбор

  1. 01

    Рост

    Знакомая фраза — длиннее.

  2. 02

    Выдача

    Код текущей фразы.

  3. 03

    Обучение

    Новая фраза в словарь.

Complexity и ограничения

time
O(n)
space
O(словарь)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

GIF/TIFF

Классический формат с LZW.

compress

UNIX-утилита.

Modem

V.42bis сжатие.

Связанные алгоритмы

Shorts

«GIF сжимает без словаря в файле»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

GIF сжимает без словаря в файле
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/lzw