[Перевод] Сжатые структуры данных

Введение Несколько месяцев назад в поисках идей по ускорению кода я изучал множество научных статей по computer science. Не буду притворяться, что хорошо их понимал, но меня не пугает непонятное, и я готов признать своё невежество 1 . Я обнаружил статью, написанную пятнадцать лет назад 2 , в которой было множество новых для меня концепций. Мне никак не удавалось в них разобраться. Что же делать дальше? Можно искать другие статьи, чтобы они заполнили мои пробелы. Это рискованное предприятие, потому что они могут запутать ещё больше, но избежать этого нельзя. Я нашёл статью с нужной структурой данных, в которой упоминался исходный код с веб-сайта. Код был написан на C++, а я работаю на Rust, но решил, что всё равно стоит на него взглянуть. Однако зайдя на сайт, я не обнаружил там ресурс, поэтому я написал владельцу веб-сайта, который оказался преподавателем computer science. Этот преподаватель ( Гонсало Наварро ) очень тепло меня принял и сразу же ответил мне 3 4 . И только в процессе общения с ним я осознал, что видел его фамилию на множестве статей в этой области. Оказалось, я познакомился с одним из специалистов мирового уровня в области сжатых структур данных (succinct data structure). Невежество может завести очень далеко. Что же такое сжатые структуры данных? Если вы изучали в последние десятилетия computer science, то могли сталкиваться с ними, но мне не доводилось встречаться с ними в процессе работы программистом, а если и доводилось, то я сразу же о них забыл. Но я считаю, что эти структуры данных обладают потрясающими свойствами. Все мы пользуемся массивами и хэш-таблицами 5 , популярны также различные деревья. Нам не нужно полностью понимать их устройство, чтобы эффективно пользоваться их свойствами. А теперь я задаюсь вопросом, почему же люди не используют сжатые структуры данных чаще. Я решил, что стоит немного о них рассказать.

https://habr.com/ru/companies/ruvds/articles/890232/

#xml #json #деревья #abstract_syntax_tree #ast #днк #сжатие_данных #ruvds_переводы

Сжатые структуры данных

Введение Несколько месяцев назад в поисках идей по ускорению кода я изучал множество научных статей по computer science. Не буду притворяться, что хорошо их понимал, но меня не пугает непонятное, и я...

Хабр

Синтаксический анализатор — модифицированный Shunting Yard

Алгоритм синтаксического анализа кода на основе Shunting Yard — скажем "нет" рекурсии Преимущество модифицированного Shunting Yard над рекурсивным спуском заключается в его способности эффективно работать с более сложными синтаксическими конструкциями и грамматиками, которые не поддерживаются рекурсивным спуском. Благодаря использованию стеков для управления состояниями и операторами, алгоритм избегает проблем с глубокой рекурсией и может обрабатывать конструкции, требующие динамического изменения контекста. Это делает его более универсальным и производительным решением для построения абстрактного синтаксического дерева (AST) без ограничений на тип грамматик, характерных для рекурсивного спуска.

https://habr.com/ru/articles/844252/

#анализатор_кода #парсер #компилятор #интерпретатор #алгоритм #shunting_yard #дейкстра #ast #abstract_syntax_tree

Синтаксический анализатор — модифицированный Shunting Yard

Перед чтением статьи рекомендуется изучить следующие материалы: алгоритм Дейкстры Shunting Yard Algorithm Модифицированный Shunting Yard — это алгоритм синтаксического анализа, который расширяет...

Хабр

Гибкая обработка арифметических выражений с AST на Scala

Обработка арифметических выражений с AST в Scala В данной статье мы глубоко исследуем применение абстрактного синтаксического дерева (AST) для организации и обработки арифметических выражений в языке программирования Scala. AST является мощным инструментом, который позволяет структурировать и анализировать синтаксическую структуру выражений, играя важную роль в компиляторах, интерпретаторах и других инструментах обработки кода. Наш подход будет учитывать различные аспекты, такие как управление приоритетами операций, корректное обращение с унарными операторами, а также внедрение пользовательских функций и констант. В конечном итоге, мы получим гибкое и мощное средство для обработки и вычисления сложных математических выражений в приложениях, написанных на Scala (во всяком случае мне бы хотелось так думать)

https://habr.com/ru/articles/822533/

#scala #функциональное_программирование #математика #ast #Парсинг_выражений_на_Scala #abstract_syntax_tree #деревья

Гибкая обработка арифметических выражений с AST на Scala

О каких выражениях идет речь? Прежде чем начать обсуждать сам проект и его создание, нужно определиться с предметной областью. Под выражением понимается математическая формула, состоящая из...

Хабр