vak: (бэсм-6)
Serge Vakulenko ([personal profile] vak) wrote2025-05-19 03:10 pm

AVL trees

Состряпал реализацию map<string, int> на скорую руку на Си, не без помощи ИИ. Грок неленивый программист, если ему прямо говорить что делать.Выбрано представление в виде AVL деревьев. Они компактнее по памяти и вроде эффективнее красно-чёрных деревьев на всех операциях. Хэш был бы неплох, но вычисление хэш функций на словном процессоре типа БЭСМ-6 неэффективно.

Заодно узнал, что AVL деревья представляют собой наследие советской науки. Изобретены в 1962 году Адельсон-Вельским и Ландисом, на десять лет раньше красно-чёрных деревьев.

Георгий Максимович Адельсон-Вельский стоял у истоков шахматной программы Каисса. В 1992 году эмигрировал в Израиль.

Евгений Михайлович Ландис родом из Харькова. В 1968 году подписал нашумевшее письмо в защиту А. С. Есенина-Вольпина.
spamsink: (Default)

[personal profile] spamsink 2025-05-19 10:33 pm (UTC)(link)
Хэш-функцию можно выбрать любую, в т. ч. быстро вычисляемую на БЭСМ-6. Она совершенно не обязана быть криптографически стойкой или достигать avalanche. Мучиться с деревьями не имеет смысла.
spamsink: (Default)

[personal profile] spamsink 2025-05-19 10:47 pm (UTC)(link)
Угадай с трех раз, почему в Паскаль-компиляторе используется хэш.
spamsink: (Default)

[personal profile] spamsink 2025-05-19 11:13 pm (UTC)(link)
В СССР про AVL деревья в курсе были все. Главный ответ: потому что идентификаторы были однословные!

Побочные ответы: потому, что реализация сбалансированных деревьев занимает безумное количество кода по сравнению с реализацией хэша, и потому, что удалять элементы из контейнера при закрытии scope тривиально, в отличие от дерева.