Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Python Meetup №103. Мария Рубаненко (Fi...

Moscow Python Meetup №103. Мария Рубаненко (Fintech AI / Tech lead DS). Суперсжатие на строках

Мы продолжим доклад "Повышаем производительность программ: мой путь к succ[ess \| inct]" и затронем суперсжатие для полнотекстового поиска, в том числе реализуем его на Python и замерим производительность.

Видео: https://moscowpython.ru/meetup/103/string-supercompression/

Moscow Python: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru
Заявки на доклады: https://bit.ly/mp-speaker

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

July 23, 2025
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Содержание 2 • 1. Терминология сжатия • 2. Базовые понятия

    про суперсжатие ❏ 2.1. Операции access / rank / select ❏ 2.2. Как суперсжать битовый массив • 3. Суперсжатие на строках ❏ 3.1. Вейвлет-дерево ❏ 3.2. Преобразование Берроуза-Уилера ❏ 3.3. Обратное преобразование Берроуза-Уилера ❏ 3.4. FM-индекс ❏ 3.5. Графовое представление Берроуза-Уилера • 4. Как реализовать суперсжатие на строках ❏ 4.1 Pysdsl • 5. Выводы
  2. 1. Терминология сжатия 3 Compressed data structure = Сжатая структура

    данных • без потерь • с потерями Implicit data structure = Эффективная структура данных X + O(1) bit of Space, где X - нижняя граница теории информации Succinct data structure = Суперсжатая структура данных X + o(X) bit of Space, где X - нижняя граница теории информации Compact data structure = Компактная структура данных O(X) bit of Space, где X - нижняя граница теории информации
  3. * Идея суперсжатых структур 4 • Есть данные размера O(n).

    Но для выполнения некоторых операций (например, эффективного поиска) нужно строить дополнительную структуру данных на исходных данных размера O(n)[o-большое]. • Но мы хотим построить дополнительную структуру данных размера o(n)[o-малое], чтобы при n->∞ вспомогательная структура занимала константную по размеру память. • Такая доп. структура будет сжатой, но мы еще хотим, чтобы операции на доп. сжатой структуре по времени имели такую же асимптотику, что и операции на доп. не сжатой структуре, то есть хотим суперсжать. • Как достичь суперсжатия?
  4. * Идея суперсжатых структур 5 • Чтобы построить суперсжатие произвольной

    структуры данных нужно закодировать ее в битовый вектор, а операции на структуре выразить через комбинацию базовых методов суперсжатия: rank() и select().
  5. * Область применения суперсжатых структур данных 6 ▪ Поиск информации

    • поиск документов • поисков шаблонов в документе • автодополнение поискового запроса • индексы поиска ▪ ML • эмбеддинги языковой модели • ранжирование документов • генерация синтетической речи • распознавание речи на определенную тему ▪ Криптография • Неинтерактивные протоколы доказательства с нулевым разглашением • Гомоморфное шифрование
  6. 2. Базовые понятия про суперсжатие 7 • 1. Терминология сжатия

    • 2. Базовые понятия про суперсжатие ❏ 2.1. Операции access / rank / select ❏ 2.2. Как суперсжать битовый массив • 3. Суперсжатие на строках ❏ 3.1. Вейвлет-дерево ❏ 3.2. Преобразование Берроуза-Уилера ❏ 3.3. Обратное преобразование Берроуза-Уилера ❏ 3.4. FM-индекс ❏ 3.5. Графовое представление Берроуза-Уилера • 4. Как реализовать суперсжатие на строках ❏ 4.1 Pysdsl • 5. Выводы
  7. 3. Суперсжатие на строках 13 • 1. Терминология сжатия •

    2. Базовые понятия про суперсжатие ❏ 2.1. Операции access / rank / select ❏ 2.2. Как суперсжать битовый массив • 3. Суперсжатие на строках ❏ 3.1. Вейвлет-дерево ❏ 3.2. Преобразование Берроуза-Уилера ❏ 3.3. Обратное преобразование Берроуза-Уилера ❏ 3.4. FM-индекс ❏ 3.5. Графовое представление Берроуза-Уилера • 4. Как реализовать суперсжатие на строках ❏ 4.1 Pysdsl • 5. Выводы
  8. 4. Как реализовать суперсжатие на строках 68 • 1. Терминология

    сжатия • 2. Базовые понятия про суперсжатие ❏ 2.1. Операции access / rank / select ❏ 2.2. Как суперсжать битовый массив • 3. Суперсжатие на строках ❏ 3.1. Вейвлет-дерево ❏ 3.2. Преобразование Берроуза-Уилера ❏ 3.3. Обратное преобразование Берроуза-Уилера ❏ 3.4. FM-индекс ❏ 3.5. Графовое представление Берроуза-Уилера • 4. Как реализовать суперсжатие на строках ❏ 4.1 Pysdsl • 5. Выводы
  9. 5. Выводы 76 • 1. Терминология сжатия • 2. Базовые

    понятия про суперсжатие ❏ 2.1. Операции access / rank / select ❏ 2.2. Как суперсжать битовый массив • 3. Суперсжатие на строках ❏ 3.1. Вейвлет-дерево ❏ 3.2. Преобразование Берроуза-Уилера ❏ 3.3. Обратное преобразование Берроуза-Уилера ❏ 3.4. FM-индекс ❏ 3.5. Графовое представление Берроуза-Уилера • 4. Как реализовать суперсжатие на строках ❏ 4.1 Pysdsl • 5. Выводы