Как стать автором
Поиск
Написать публикацию
Обновить
131.11

Алгоритмы *

Все об алгоритмах

Сначала показывать
Порог рейтинга
Уровень сложности

Траст-менеджер здорового человека

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.7K

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

Читать далее

Популярный, но неправильный способ перевода строки в нижний регистр

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров6.7K

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

Но он ошибочен по многим причинам.

Во-первых, std::tolower — это неадресуемая функция. Среди прочего, это значит, что мы не можем брать адрес функции, как мы делаем это здесь, когда передаём указатель на функцию std::transform. То есть нам нужно использовать лямбду.

Читать далее

Почему важно оптимизировать формат данных

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров18K
image

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

Алгоритмы — важнейшая часть программы: замена «горячего» алгоритма O(n) менее сложным, например, O(log n), обеспечивает практически произвольное увеличение производительности. Однако существенно влияет на производительность и структурированность данных: программы выполняются на физических машинах с физическими свойствами, например, разными задержками чтения/записи данных в кэши, на диски или в ОЗУ. После оптимизации алгоритмов стоит изучить эти свойства, чтобы достичь наибольшей производительности. Оптимизированный формат данных учитывает используемые алгоритмы и паттерны доступа при выборе того, как сохранять структуру данных на физическом носителе. Благодаря этому можно увеличить скорость алгоритмов в несколько раз. В этом посте мы покажем пример, в котором нам удалось достичь четырёхкратного повышения скорости чтения простым изменением формата данных в соответствии с паттерном доступа.

Сравнение хранилищ данных AoS и SoA


Современное оборудование, и, в частности CPU, спроектировано так, чтобы обрабатывать данные определённым образом. Расположение данных в памяти влияет на то, насколько эффективно программа сможет использовать кэш CPU, как часто она сталкивается с промахами кэша и насколько оптимально она сможет задействовать векторные команды (SIMD). Даже при использовании оптимальных алгоритмов выбор неподходящего формата данных может приводить к частым перезагрузкам кэша, простаивающим конвейерам и чрезвычайно большому объёму передач содержимого памяти; всё это снижает производительность.
Читать дальше →

Её величество Сортировка

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров3.3K

Можно ли сортировать несортируемое? Почему декоратор в питоне называется "total_ordering"? Как отсортировать тексты по смыслу? Надо ли сохраняться, перед использованием "compare function"?

Сортировка используется настолько часто, что мы порой забываем об этом фундаментальном алгоритме.

В статье сделан обзор различных тем, которые могут встретиться в контексте разного рода сортировок.

Читать далее

Как я искал рекомендации аналитиков по покупке российских ценных бумаг в JSON формате

Уровень сложностиСложный
Время на прочтение4 мин
Количество просмотров3.5K

Четыре года назад я написал систему поиска поиска недооцененных американских акций, используя данные Яху Финанс, ведь на американском рынке торгуется больше 10 тысяч бумаг, из которых 4 тысяч бумаг имеют рекомендации аналитиков о прогнозируемой цене. Это большие цифры, с которыми сложно работать. Но что по России?

Я вялотекуще пытался найти систему которая бы также отдавала рекомендации аналитиков, пока недавно не нашёл:

{
"uid": "b993e814-9986-4434-ae88-b086066714a0",
"ticker": "WUSH",
"company": "Финам",
"recommendation": "RECOMMENDATION_HOLD",
"recommendationDate": "2024-09-26T00:00:00Z",
"currency": "rub",
"currentPrice": {
"units": "192",
"nano": 0
},
"targetPrice": {
"units": "250",
"nano": 0
},
"priceChange": {
"units": "58",
"nano": 0
},
"priceChangeRel": {
"units": "30",
"nano": 210000000
},
"showName": "Whoosh"
}

Правда есть один нюанс в количестве. На московской бирже представлено 170 бумаг, из которых имеют рекомендации всего 89 акций.

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

Но мне было больше интересно составить сводную таблицу по всем доступным 89 акциям.

Код представлен на GitHub.

Ищем 🧈

Как готовить EdgeAI в 2024/2025 году

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров7.4K

Есть у меня такое развлечение - разные платы для AI тестировать.

Очень много того с чем я работаю - про Computer Vision на Edge. В какой то момент я понял что мне не хватает информации. Нет ничего кроме восторженного пресс-релизов. Дай бог ещё есть видео как официальные примеры запускают. Но обычно без этого.

Так что в какой-то момент начал тестировать всё сам. Просто чтобы понимать какие есть альтернативы, что можно а что нельзя.
Иногда (раз в год-два) я пишу обзорную статью. И это именно она. Тут я попробую рассмотреть критерии, которые можно считать важными для AI плат. А так же кратко рассмотреть основные платы на рынке.

Читать далее

Изучение различных видов сортировок

Уровень сложностиПростой
Время на прочтение22 мин
Количество просмотров9.5K

Цель данной лабораторной работы – посмотреть на алгоритмы с различной асимптотикой, научиться анализировать время работы алгоритмов и включать разные степени оптимизации.

Читать далее

Как извлечь квадратный корень из перестановки чисел?

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров7.1K

В этой статье мы исследуем проблему извлечения квадратного корня из перестановки p, иными словами задачу нахождения всех таких перестановок x, что x \cdot x = p. Будет сформулирован критерий возможности извлечения квадратного корня, алгоритм нахождения корней и формула их подсчёта в общем виде.

Читать далее

Учимся читать QR-коды без компьютера

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров55K

Задавались ли вы когда-нибудь вопросом, как работают QR-коды? Если да, то эта статья для вас. Здесь вас ждёт интерактивное объяснение*, которое мы составили для семинара, проводившегося в рамках Всемирного конгресса хакеров 37C3, но вы также можете использовать его самостоятельно.

Прочитав статью, вы узнаете:

  • Из чего состоят QR-коды.
  • Как декодировать QR-коды вручную (используя нашу шпаргалку).
Читать дальше →

Поиск соседей в двумерном массиве

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров3.9K

Поиск соседей в программировании — это процесс поиска элементов, расположенных рядом с заданным элементом в структуре данных (например, матрице или графе). Этот подход применяется для анализа взаимосвязей между элементами, определения их свойств на основе окружения и выполнения различных алгоритмов (например, поиск пути, кластеризация, фильтрация данных).

Читать далее

В поиске собственных значений (матриц)

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров9.5K


Как найти собственные числа и собственные значения матрицы? Методы, излагаемые в курсе линейной алгебры, основанные на определении — применимы ли они к реальным данным? Существует ли простой алгоритм поиска этих величин, который можно понять, а не просто поверить?
Об этом мы поговорим под катом

Вычисления на RISC-V: исследуем производительность OpenCL на CPU и совместимых GPU

Уровень сложностиСложный
Время на прочтение12 мин
Количество просмотров4.6K

Привет! Меня зовут Михаил Козлов, я инженер-стажер в группе разработки математических библиотек в YADRO. Эта сфера активно развивается на RISC-V: известные математические библиотеки, такие как OpenBLAS, Eigen и многие другие, портируют и оптимизируют под открытую архитектуру. Большой интерес представляет OpenCL — открытый стандарт разработки программного обеспечения для гетерогенных вычислений. Он используется во многих областях: HPC, AI/ML, AR/VR, линейной алгебре, где он наиболее широко представлен с помощью библиотек clBLAS и CLBlast. 

В линейной алгебре OpenCL наиболее широко представлен с помощью библиотек clBLAS и CLBlast. Первая — более старая, вторая — более современная, со встроенным тюнером для оптимизации под конкретное железо. Далее я расскажу о своем проекте с летней стажировки: исследовании производительности этих библиотек на GPU

Читать далее

Заявка на участие в клубе создателей алгоритма объединения многоугольника и треугольника

Уровень сложностиПростой
Время на прочтение24 мин
Количество просмотров2.6K

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

Читать далее

Ближайшие события

Создание прототипа библиотеки для визуализации алгоритмов на Python

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров3.1K

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

Читать далее

Муравьиный алгоритм. Решение задачи коммивояжера

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров11K

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

Читать далее

Нейронные оптимизаторы запросов в реляционных БД (Часть 2): На пути к продуктивизации

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров4.9K

Нельзя просто взять и заменить нейросетями миллионы человеко-часов, вложенных в разработку классических оптимизаторов запросов реляционных СУБД. Надёжность, гибкость и скорость — ключевые характеристики экспертных систем, которые нарабатывались и отлаживались десятилетиями.

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

Читать далее

Графы, растры и море: как школьники создают будущее геоаналитики

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.5K

Привет, Хабр! Меня зовут Алексей Пустынников, я руководитель команды геоаналитики в банке ВТБ. Сегодня я хочу рассказать вам об интересном проекте, в котором участники конкурса «Большие Вызовы» решали сложные задачи в сфере геоаналитики и машинного обучения.

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

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

Читать далее

Как у нейросетей работает внимание? Статья про self-attention и cross-attention

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5.2K

Удивительно, как нейросети похожи на нас. У них тоже есть внимание, и на примере коня на ракете я расскажу, как оно работает!

Читать далее

Футбольные алгоритмы глобальной оптимизации (часть 2)

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров1.3K

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

Алгоритм футбольной оптимизации (Football Optimization Algorithm, FOA)

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

Читать далее

VLM в Нейро: как мы создавали мультимодальную нейросеть для поиска по картинкам

Время на прочтение11 мин
Количество просмотров17K

Сегодня у Поиска большое обновление. Например, ответы Нейро теперь будут появляться сразу в поисковых результатах — для тех запросов, где это полезно и экономит время. Но в рамках этой статьи нас интересует другая часть обновления: Нейро поможет найти ответы в Поиске по картинкам и в Умной камере — с помощью новой мультимодальной модели Яндекса. Пользователь может не только узнать, что изображено на картинке, но и задать вопрос по каждой её детали. Например, гуляя по музею, можно сфотографировать натюрморт голландского живописца и спросить, что символизирует тот или иной предмет на картине.

Меня зовут Роман Исаченко, я работаю в команде компьютерного зрения Яндекса. В этой статье я расскажу, что такое визуально‑текстовые мультимодальные модели (Visual Language Models или VLM), как у нас в Яндексе организован процесс их обучения и какая у них архитектура. Вы узнаете, как Нейро работал с картинками и текстами раньше, и что изменилось с появлением VLM.

Читать далее

Вклад авторов