From 53332b0f622efc1f91f1051014ecb57ae3bd0971 Mon Sep 17 00:00:00 2001 From: Dmitrii Krosh Date: Tue, 11 Aug 2026 03:58:29 +0300 Subject: [PATCH] WIP plan.md for asvk --- articles/for-asvk/plan.md | 173 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 articles/for-asvk/plan.md diff --git a/articles/for-asvk/plan.md b/articles/for-asvk/plan.md new file mode 100644 index 0000000..31577e7 --- /dev/null +++ b/articles/for-asvk/plan.md @@ -0,0 +1,173 @@ +# Исследование алгоритма разрешения зависимостей в ALT RPM + +## Замысел и структура статьи + +Статья будет как решение одной формальной задачи. В ALT RPM пакет-потребитель задаёт множество +требуемых символов $R$ (`Requires`), а пакет-поставщик - множество предоставляемых +символов $P$ (`Provides`). Зависимость выполнима тогда и только тогда, когда + +$$ +R \subseteq P. +$$ + +Явное перечисление тысяч ELF-, Python- и файловых символов раздувает RPM-метаданные, +поэтому множества представлены компактными set-строками. + +## 1. Постановка задачи и данные ALT Linux + +Ввести обозначения для bpp(b), множеств, хэш функций(H), длин строк и т.д. + +Проверяемое программой условие имеет вид + +$$ +H_b(R)\subseteq H_b(P). +$$ + +Отмечаем вероятностную природу: из $R\subseteq P$ следует +$H_b(R)\subseteq H_b(P)$, поэтому коллизия не создаёт ложного отказа. Обратное +неверно: отсутствующий символ может совпасть по хешу с символом из $P$ и дать +ложное принятие зависимости. + +(Представить данные ниже табличкой) +Привести срез Sisyphus `x86_64 + noarch`: 47 367 пакетов, 14 761 `Provides`-отношение и 68 857 +`Requires`-отношений. Для 68 198 реально сопоставимых пар медианы равны +$p=480$, $r=13$, $p/r=28.1$; p75 - 1886, 37 и 80; p90 - 6219, 104 и 257. +В 92.4% пар выполняется $p/r\ge 4$. Это к теме, почему рассматриваем разреженные множества. + +## 2. Устройство существующей `set:`-строки + +Даём схему формата: + +``` +массив строк + | (Jenkins OAAT) + v +массив хэшей + | (qsort) + v +отсортированный массив хэшей + | (вычисление разницы между элементами) + v +массив delta + | (Rice-Golomb преобразование) + v +битовый массив + | (base62 преобразование) + v +set-строка +``` + +Нужно отдельно разобрать заголовок, диапазоны `bpp` и `Mshift`, внешний префикс +`set:` и роль Base62: строка должна оставаться допустимым токеном версии RPM. +Полезна небольшая иллюстрация на 5-8 символах: исходные имена, хеши, +отсортированный массив, дельты, биты кода и итоговая строка. +Но. Это много альт-специфики, может настолько глубоко не стоит (хотя и не очень глубоко) + +### 2.1. Хеширование и вероятность коллизий + +! Всё ещё нет нормального анализа коллизий + +Текущий код использует 32-битный Jenkins OAAT и оставляет $b$ бит. Для модели +равномерного независимого хеширования ожидаемое число столкнувшихся пар среди +$n$ различных символов равно + +(будет мудрёная формула, теория) + +В статье формулы дополняем разными табличками по реальным данным из Sisyphus: распределения $p,r,b$, ожидаемые коллизии, реальные. + +(Другие хэши идут далее) + +### 2.2. Кодирование Golomb-Rice + +Для отсортированных значений $0\le x_1<\dots