Всё про Алгоритмы и Структуры данных – Telegram
Всё про Алгоритмы и Структуры данных
7.93K subscribers
329 photos
36 videos
5 files
2.8K links
Мы не претендуем на оригинальность контента, мы лишь собираем материал из открытых источников.

Ссылка: @Portal_v_IT

Сотрудничество, авторские права: @oleginc, @tatiana_inc

Канал на бирже: https://telega.in/c/structuredata
Download Telegram
ИИ-поиск в 2ГИС: как учим нейросети понимать настроение, фото и смыслы

Поиск — одна из ключевых функций в 2ГИС. Он помогает миллионам пользователей каждый день находить нужные места в городе. Долгое время мы опирались на классические методы: морфологию, справочник организаций, геопозицию и популярность объектов. Это позволяло покрывать множество сценариев, но со временем стало понятно — этого недостаточно.

Пользователи хотят искать так, как думают: по настроению, по смыслу или вообще без слов — по фотографии блюда или интерьера. Мы решили переосмыслить подход к поиску. В этой статье рассказываем, как мы решали три задачи:

https://habr.com/ru/companies/2gis/articles/951008/

Алгоритмы и Структуры данных
Музыка и математика: как аккорды вдохновляют архитектуру алгоритмов

Эта статья — эксперимент на стыке музыки, математики и программирования. Мы попробуем взглянуть на аккорды не как на набор звуков, а как на архитектурные паттерны. Я покажу, как гармонические последовательности могут подсказать нам структуру алгоритмов, приведу примеры кода и проведу параллели между миром нот и миром вычислений.

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

Алгоритмы и Структуры данных
Как JPEG стал стандартом изображений в интернете

JPEG — формат-динозавр. Ему уже за тридцать, но он по-прежнему живее всех живых: даже в 2025 году изображения в JPEG встречаются повсюду.

В конце 80-х инженерам нужно было как-то справляться с растущими размерами файлов. Интернет был медленным, а фотографии — всё тяжелее. Тогда и придумали решение: сжатие с потерями, основанное на дискретном косинусном преобразовании (DCT). Если по-простому, DCT — это способ выкинуть из картинки то, чего наш глаз почти не заметит, и оставить главное. В итоге получаем файл в разы меньше, а картинка всё ещё выглядит прилично.

Почему именно этот подход победил конкурентов, кто его протолкнул и как JPEG стал «языком» интернета для изображений — обо всём этом дальше.

https://habr.com/ru/companies/first/articles/951960/

Алгоритмы и Структуры данных
👍1
Алгоритмы, базы и порядок: практическая подборка книг для разработчиков

Алгоритмы, базы данных и качество данных — три темы, без которых сегодня не обходится ни один проект. От того, как разработчик обращается с ними, зависит не только скорость работы приложений, но и то, насколько вообще можно доверять системе. Если алгоритм выбран неправильно — система будет тормозить; если база построена на «костылях» — она станет источником ошибок; если данные не проверять на качество — отчеты превратятся в хаос.

Чтобы помочь разобраться в этом, команда Read IT Club собрала подборку из трех книг, которые проверили рецензенты клуба — эксперты из ведущих технологических компаний. В них нет академической скуки, зато есть практические советы: как выбрать правильный алгоритм, не угробить архитектуру базы и научиться бороться с «грязными» данными. Каждая из них решает свою часть головоломки, но вместе они дают цельную картину того, как работать с данными и кодом надежно, эффективно и без лишних драм.

https://habr.com/ru/companies/croc/articles/952010/

Алгоритмы и Структуры данных
Хватит писать «чистый» код. Пора писать понятный код

Да, это очередная статья по чистому коду. Но по разным источникам, соотношение времени, затрачиваемого на чтение и написание кода, может достигать 7 к 1 и даже больше. Когда вы исправляете ошибку, добавляете новую функциональность или проводите рефакторинг, вы сначала погружаетесь в логику, написанную другими людьми (или вами же, но несколько месяцев назад). Именно поэтому читаемость кода становится более важным фактором, чем скорость его первоначального написания. Нечитаемый код - это технический долг, который замедляет всю команду и увеличивает стоимость разработки в долгосрочной перспективе.

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

Алгоритмы и Структуры данных
Двадцать вопросов, которые помогают разработать алгоритм

Как разработать алгоритм, решающий сложную задачу? Многие считают, что для этого нужно «испытать озарение», что процесс этот не вполне рационален и зависит от творческой силы или таланта.

На самом деле решение любой задачи сводится к сбору информации о наблюдаемом объекте. Причем этот принцип применим как для решения самых сложных научно-исследовательских задач, так и для решения прикладных задач. Работа изобретателя напоминает не столько работу волшебника, сколько путешествие первооткрывателя по неизведанной территории. Главное качество хорошего изобретателя – умение собирать информацию.

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

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

Алгоритмы и Структуры данных
Бэктестер для торговых стратегий на GPU со скоростью просчёта 150 тыс стратегий за 1 секунду

Меня зовут Андрей Счастливый. Пишу на Python. Месяц назад разбираясь с одним пакетом для бэктестинга торговых стратегий на C был очень разочарован в низкой скорости. А ведь в пакете для бэктестинга самое главное скорость и вообще возможность массово пакетами тестировать торговые стратегии. Решил написать на Python свой бэктестер с GPU.

За месяц написал пакет и вот ближе к делу, хочу рассказать о нём. Тянуть не буду сразу в лоб, цифры в факты.

WarpTrade - высокопроизводительный GPU-бэктестинг торговых стратегий, написанный на Python с использованием Taichi. Проект построен на модульной архитектуре с универсальным движком, способным запускать любые торговые стратегии через систему регистрации ядер. В основе лежит алгоритм собственной разработки.

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

Алгоритмы и Структуры данных
Обучение скрытых слоёв S–A–R перцептрона без вычисления градиентов

Аннотация. Классический перцептрон Розенблатта с архитектурой S–A–R исторически не имел устойчивого алгоритма обучения многослойных структур. В результате в современном машинном обучении доминирует метод обратного распространения ошибки (backpropagation), основанный на градиентном спуске. Несмотря на успехи, этот подход имеет фундаментальные ограничения: необходимость вычисления производных нелинейных функций и высокая вычислительная сложность. В данной работе показано, что при интерпретации работы нейросети через алгоритм ID3 (Rule Extraction) скрытый слой автоматически формирует чистые окрестности в смысле кластерного анализа — признаки группируются по классам ещё до завершения обучения. На основе этого наблюдения автором предложен новый стохастический алгоритм обучения, восходящий к идеям Розенблатта, но принципиально расширяющий их: он позволяет обучать скрытые слои перцептрона без вычисления градиентов. Таким образом, впервые решается классическая проблема обучения архитектуры S–A–R без градиентных методов. Это открывает путь к созданию принципиально новых алгоритмов обучения нейросетей с более простой и интерпретируемой динамикой.

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

Алгоритмы и Структуры данных
🤯1
ESP32: Базовые алгоритмы машинного обучения

ESP32 давно зарекомендовал себя как универсальный микроконтроллер для IoT: он умеет работать с Wi-Fi и Bluetooth, управлять сенсорами и исполнительными устройствами. Но за последние годы стало ясно, что даже на таких простых устройствах можно запускать алгоритмы машинного обучения.

В этой статье рассмотрим, как на ESP32 можно реализовать три базовых алгоритма классификации — дерево решений, метод К-ближайших соседей (KNN) и полносвязную нейросеть на TensorFlow Lite.

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

Алгоритмы и Структуры данных
Нормированные пространства и рендеринг трёхмерных фрактальных множеств: ray marching, поле расстояний, базовые примеры

Как и любому ИТ‑специалисту, мне приходится сталкиваться с новыми нестандартными задачами, для решения которых нужно погрузиться в новую для себя область, взглянуть на работу под другим углом, активизировать весь свой бэкграунд, в особенности математический.

Для меня самыми интересными из таких задач всегда являются те, которые связаны с визуализацией данных. Вот один из примеров. Я работал в команде Platform V Monitor — это кроссплатформенный ИТ‑мониторинг и сервисы телеметрии, для которого нужно было визуализировать представление данных в виде ориентированного графа с большим количество (1000+) вершин и еще большим количеством рёбер.

Каждая вершина должна была иметь подпись‑название и являлась управляющим элементом интерфейса. Одним из возможных вариантов решения, было использование методов компьютерной графики, «выход в 3D». И хотя в итоге удалось решить задачу, оставаясь в 2D, трёхмерный вариант решения имел свои достоинства.

https://habr.com/ru/companies/sberbank/articles/952102/

Алгоритмы и Структуры данных
Зубрить сложно, понимать легко: бинарный поиск

Как правило, обучающие материалы сводятся к показу одного «правильного» решения. Такие решения можно попробовать запомнить, но они быстро забываются и не помогают по-настоящему понять алгоритм.

Меня интригует вопрос: возможно ли объяснение, которое позволит не просто заучивать формулы, а понять саму логику? И если такое объяснение существует, даст ли оно возможность решать похожие задачи — или даже помогает становиться лучшим программистом?

Сразу оговорюсь: мы не будем останавливаться на тривиальных проверках,
вроде пустого массива или некорректных параметров. Фокус статьи — на сути алгоритма.

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

Алгоритмы и Структуры данных
Задачи по алгоритмам: ищем непростые числа

Я не математик, но люблю решать задачи. Я люблю трудные задачи, которые не знаешь, как решать, а если и знаешь, трудно написать код верно.

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

Говорят "У человека феноменальная память - он помнит все". Он записывает. Не помните, что делали три дня назад? Ведите дневник, а не покупайте "таблетки для памяти".

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

Алгоритмы и Структуры данных
ESP32 + LD2410: Архитектуры нейронных сетей для классификации движений

Микроконтроллеры давно перестали быть простыми устройствами для управления датчиками и исполнительными механизмами. Сегодня, благодаря библиотекам вроде TensorFlow Lite, даже компактный ESP32 способен выполнять инференс нейросетей в реальном времени. В этой статье я расскажу о серии экспериментов по классификации движений человека с помощью сверхширокополосного радарного датчика LD2410 и различных базовых архитектур машинного обучения, таких как полносвязная, свёрточная, рекуррентная нейронные сети и трансформер (механизм внимания).

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

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

Алгоритмы и Структуры данных
Визуализация алгоритмов стандартной библиотеки C++ (продолжение)

В стандартной библиотеке C++ много разных алгоритмов для работы с контейнерами. С помощью этих алгоритмов можно искать значения, сортировать последовательности, изменять их и делать многое другое. Среди такого большого количества алгоритмов есть довольно сложные, которые сходу не поймешь. Но если визуализировать их работу, то все становится ясно.

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

Алгоритмы и Структуры данных
2
Как не сломать продакшен: 8 основных паттернов распределенных систем

Распределeнные системы стали основой современных высоконагруженных и отказоустойчивых приложений. Однако их разработка сопряжена сo множеством вызовов – от управления состоянием и взаимодействия сервисов до обработки отказов и масштабирования. Чтобы упростить решение этих задач, инженеры используют проверенные временем архитектурные паттерны. В этой статье мы разберeм восемь ключевых шаблонов, помогающих строить надeжные и эффективные распределенные системы.

https://proglib.io/p/kak-ne-slomat-prodakshen-8-osnovnyh-patternov-raspredelennyh-sistem-2025-02-10

Алгоритмы и Структуры данных
Введение в трассировку лучей: простой метод создания 3D-изображений. Часть 2 — прямая трассировка

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

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

Алгоритмы и Структуры данных
1
Введение в трассировку лучей: простой метод создания 3D-изображений. Часть 1 — как создается изображение?

Первое, что нам нужно для создания изображения, - это двумерная поверхность (эта поверхность должна иметь некоторую площадь и не может быть точкой). С помощью этого, мы можем визуализировать изображение в виде разреза, сделанного через пирамиду, вершина которой расположена в центре нашего глаза, а высота параллельна линии нашего зрения (помните, чтобы что-то увидеть, мы должны смотреть вдоль линии, соединяющей глаз с этим объектом). Мы будем называть этот срез, упомянутый ранее, плоскостью изображения (эта плоскость изображения подписана как холст, из-за схожести с художественным холстом). Плоскость изображения - это концепция компьютерной графики, и мы будем использовать ее как двумерную поверхность для проецирования нашей трехмерной сцены. Возможно, кому-то всё это может показаться очевидным, однако, то, что мы только что описали, является одной из самых фундаментальных концепций, используемых для создания изображений на различных устройствах. Например, эквивалентом в фотографии является поверхность пленки (сенсор для цифровой камеры) или, как упоминалось ранее, холст, используемый художниками.

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

Алгоритмы и Структуры данных
1
Сжать и не пожалеть: как работает сжатие без потерь

Более 9 миллиардов гигабайт информации ежедневно путешествуют по интернету, заставляя постоянно искать все новые и новые методы упаковки данных. Самые эффективные решения используют подходы, которые позволяют достичь большей плотности за счет "потерь" информации в процессе сжатия. Google, например, недавно представили вариант сжатия с потерями, в котором отправляющий компьютер отбрасывает детали изображения, а ИИ на принимающей стороне их восстанавливает. Даже Netflix использует подход, допускающий потери, понижая качество как только становится известно, что пользователь использует устройство с низким разрешением.

В то же время очень мало внимания уделяется сжатию без потерь. Почему? Ответ прост - методы сжатия без потерь уже невероятно эффективны. С их помощью работает буквально всё, от формата PNG до утилиты PKZip. И это все благодаря студенту, что захотел пропустить экзамен.

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

Алгоритмы и Структуры данных
1👍1
Программист embedded лезет в FPGA (часть 3, чего не может ардуинка)

В этой статье мы будем работать на более низком уровне. Делать на коленке прозрачные электроды, и наклеивать поляризационные плёнки, наверное, не надо. Будем формировать видео-сигнал, который идёт на монитор / телевизор.

Но совсем нахрапом не получится. Придётся сделать небольшой экскурс в тему передачи видео изображений.

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

Алгоритмы и Структуры данных
Поиск с помощью регулярных выражений: подход с Виртуальной Машиной

Назовите самый используемый интерпретатор байт-кода или виртуальную машину (далее просто ВМ). JVM от SUN? Flash от Adobe? .NET и Mono? Perl? Python? PHP? Все они без сомнения популярны, но есть ещё одна ВМ, которая используется шире, чем все предыдущие вместе взятые. Этот интерпретатор байт-кода - библиотека регулярных выражений от Генри Спенсера (Henry Spencer) и её многочисленные наследники.

Первая статья из этой серии описывала два главных подхода к реализации поиска по регулярным выражениям: подход на основе конечных автоматов с линейной сложностью в худшем случае, который использовался в awk и egrep (а сейчас в большинстве реализаций grep); и подход на основе алгоритма с возвратом (бэктрекинг) с экспоненциальной сложностью в худшем случае, который используется почти везде, включая ed, sed, Perl, PCRE и Python.

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

Алгоритмы и Структуры данных