Files
ARSV/Docs/more/raw_data.md
T
2026-07-20 21:58:04 +03:00

47 lines
4.8 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# raw_data
## messages from tg
[6/23/26 9:57PM] Arseny: Кстати. У меня есть серьёзная математическая, она же очень серьёзная алгоритмическая задача на исследование. ALT set:version (https://git.altlinux.org/gears/r/rpm.git?a=blob;f=lib/set.c) нужен майнтейнер.
[6/23/26 9:57PM] Arseny: Вы хотели алгоритмов? Вот, расскажите мне про этот.
[6/23/26 9:57PM] Arseny: весь алгоритм можно разбить на 4 последовательных стадии.
0) Задача в том, чтобы проверять, выполняется ли R ⊂ P.
множества, стоящие в позиции P, даются командой навроде nm --dynamic -j -U /usr/lib64/libyourfavourite.so.N.
множества, стоящие в позиции R, даются командой навроде nm --dynamic -j -u /usr/bin/yourfavouriteprog, или там может быть иной .so.
Тут, наверное, ещё и введение в предметную область должно быть.
1) hash: N элементов сбрасываются в этот самый хеш; его эффективность бы стоило оценить хорошенько. (гипотеза от меня: он вообще-то плохой и даёт много коллизий на интересных нам инпутах), в результате K <= N отсортированных хешей, чисел из [0; 2**10) (по умолчанию 10 бит на хеш);
2) delta: K <= N чисел из прошлого шага заменяются на разности с предыдущими, и получаются по-другому распределённые числа, чаще маленькие и очень, очень мало сверхбольших; есть мнение, что они для равномерно распределённых хешей распределены геометрически;
3) golomb: эти K разностей кодируются по Rice-Golomb (https://en.wikipedia.org/wiki/Golomb_coding), делитель по умолчанию 2**7; получается префиксный код из K битострок, которые можно слева направо прочесть без lookahead и восстановить массив разностей;
4) (якобы) base62: их конкатенация кодируется в буквы.
(2) и (3) близки к очевидно-понятным; я поизучал, реализовал на питоне (https://altlinux.space/arseny/atsv-research) и снова поизучал.
А вот (1) и (4) я не занимался совсем.
От (4) у меня тоже башка взрывается, а (1) можно очень хорошо так поизучать, и существует, наверное, обширная литература.
[6/23/26 9:57PM] Arseny: grep -A16 Jenkins lib/set.c
вот в этом дереве исходников (https://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=lib/set.c;h=9474a2ee6d7c;hb=a01a87db6e8a)
[6/23/26 9:57PM] Arseny: Пусть параметр-делитель равен M, и энкодеру на вход поступает число A. Тогда ищутся такие q и r < q, что A = qM + r. Частное кодируется унарной кодировкой из единиц, за ним следует нулик, а далее ровно log₂M бит на остаток. Подобрать M нужно с умом.
```sh
python3 stringset.py 10 7 <<EOF
foo
bar
quux
EOF
hashes=[298, 487, 588]
deltas=[298, 189, 101]
codes=[b'1100101010', b'100111101', b'01100101']
golomb divisor: 128 (minimum word bit length: 8)
total bit length: 27
per-elem bit length: 9.000
```
Но здесь не хеш из файла выше, а питонический hash() обычный. Чтобы смотреть на актуальные результаты, нужно подсунуть актуальный.
[6/23/26 9:58PM] Arseny: А вот страничка set:version на ALT Wiki (https://www.altlinux.org/Set-version)
[6/23/26 9:58PM] Arseny: Putze, F.; Sanders, P.; Singler, J. (2007),
253 * "Cache-, Hash- and Space-Efficient Bloom Filters",
254 * http://algo2.iti.uni-karlsruhe.de/singler/publications/cacheefficientbloomfilters-wea2007.pdf
[6/23/26 9:58PM] Arseny: Сайта нет, но статью поискать https://t.me/c/1622441719/1359/9771
[6/23/26 9:59PM] Arseny: И ещё наследие Алексея Турбина:
https://ftp.altlinux.org/pub/people/at/
https://github.com/svpv