Вадим Великодный Статьи и заметки

Схема лифтинга

У меня уже был пост, в котором я попытался кратко изложить взгляд на вейвлет-преобразование с точки зрения сжатия изображений. Однако та статья совершенно незаслуженно обходит стороной такой интересный подход к сжатию, как схема лифтинга. Хотя этот подход и связан с вейвлетами, для его понимания уже не нужно прибегать к матрицам. Всё можно объяснить очень наглядно, что я и попытаюсь сделать в этой небольшой статье. Я попытался написать её самодостаточной, так что читать предыдущую не обязательно.

Читать дальше

Абстрактные синтаксические деревья и генерация LaTeX

В этой статье мы попробуем разобраться, как работать с абстрактным синтаксическим деревом, представляющим код на языке Python, а заодно написать конвертер из Python в язык разметки математических текстов LaTeX. Разумеется, это сложная задача, и мы будем конвертировать только маленькое подмножество — арифметические и логические выражения. Не то, чтобы это было очень полезно с практической точки зрения, но зато поможет разобраться, как работают библиотеки наподобие Numba.

Читать дальше

Корректирующие коды на пальцах

Корректирующие (или помехоустойчивые) коды — это коды, которые могут обнаружить и, если повезёт, исправить ошибки, возникшие при передаче данных. Даже если вы ничего не слышали о них, то наверняка встречали аббревиатуру CRC в списке файлов в ZIP-архиве или даже надпись ECC на планке памяти. А кто-то, может быть, задумывался, как так получается, что если поцарапать DVD-диск, то данные всё равно считываются без ошибок. Конечно, если царапина не в сантиметр толщиной и не разрезала диск пополам. Как нетрудно догадаться, ко всему этому причастны корректирующие коды. Собственно, ECC так и расшифровывается — «error-correcting code», то есть «код, исправляющий ошибки». А CRC — это один из алгоритмов, обнаруживающих ошибки в данных. Исправить он их не может, но часто это и не требуется. Давайте выясним, что это такое. Первую версию этой статьи я написал для «Хабра». Привожу её здесь с минимальными изменениями.

Читать дальше

Вейвлет-сжатие на пальцах

Когда-то давно, ещё в феврале 2013 года я опубликовал две статьи на Хабре, посвящённые вейвлет-сжатию. Моей целью было максимально просто и доступно, на уровне школы или первого курса рассказать о вейвлетах. Во второй, практической части многое нужно уже исправить и переработать. А вот первая часть всё ещё годится в качестве начального введения. Привожу её с исправлениями и дополнениями.

Читать дальше

Вычисления на GPU с помощью OpenGL

Как известно, современная видеокарта — это устройство, которое позволяет быстро обрабатывать огромное количество данных за счёт параллельных вычислений. Расчётами в ней занимаются сотни (а в новых моделях и тысячи) процессоров. То, что они работают одновременно, позволяет получить огромное быстродействие. Разумеется, эти процессоры не настолько мощные и универсальные, как центральный процессор компьютера (CPU). Но для обработки изображений часто требуется лишь набор только самых базовых команд и операций из линейной алгебры. Так что, видеокарты берут вопреки завету Суворова не умением, а числом. И тут возникает естественное желание всей это мощью воспользоваться для решения каких-то задач не связанных с графикой. И такая возможность, конечно, есть.

Читать дальше