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

Алгоритмы *

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

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

Книга: «System Design: пережить интервью»

Время на прочтение3 мин
Количество просмотров13K
Привет, Хаброжители!

Собеседования по проектированию систем — это боль. Даже опытные разработчики спотыкаются о бесконечные open-ended вопросы и доску, на которой нужно за 45 минут набросать архитектуру, способную пережить апокалипсис.

Хорошая новость: наша новинка поможет успешно пройти интервью.

Книга Чжиюна Таня «System Design: пережить интервью» — это гайд по выживанию. В ней нет воды, только практика: как разбирать задачи, выбирать решения и уверенно их продавать эксперту. Автор знает, о чем говорит — его подход помог разработчикам попасть в Amazon, Apple, ByteDance, PayPal и Uber.
Читать дальше →

SQL HowTo: немного двоичной логики (Advent of Code 2024, Day 24: Crossed Wires)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

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

Читать далее

JavaScript: структуры данных и алгоритмы. Часть 9

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


Привет, друзья!


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


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


Код, представленный в этой и других статьях серии, можно найти в этом репозитории.


Интересно? Тогда прошу под кат.

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

Часть 3. Робот Вертер в медицине

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

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

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

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

Робот-абилитолог может предложить постоянную доступность (работает 24/7 без усталости), точную повторяемость движений для тренировки, мгновенную обратную связь в реальном времени, персонализированные программы на основе данных о прогрессе, а также снижение нагрузки на медиков, позволяя им сосредоточиться на сложных случаях. Однако он не заменяет специалиста, а дополняет его, обеспечивая системность, безопасность и психологический комфорт за счет отсутствия субъективных оценок.

Читать далее

Старый конь борозды не испортит: классические методы обработки изображений все ещё актуальны

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

Что такое цифровая обработка изображений? Зачем нам вообще знать про алгоритмы обработки, когда есть фотошоп и фильтры в телефоне? Или всё можно отдать нейросети и получить крутой результат? И при чём тут Julia, наконец? Будем разбираться!

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

В первой части ознакомимся с основами на примере сегментации спутникового снимка.

Читать далее

Великий и могучий: как мы учим нашу систему находить нецензурную лексику в ФИО

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

Привет, Хабр! Меня зовут Макс Траулько, я занимаюсь анализом данных и проработкой новый фичей в команде RnD в HFLabs. Прямо сейчас я работаю над нетривиальной задачей — учу наши алгоритмы распознавать в именах и фамилиях русский мат и прочие ругательства.

Как появилась эта задача? В одной крупной компании клиенты могут оставить обращения во фронт-системе. И иногда пишут в полях ФИО, прямо скажем, черт знает что. А у бизнеса риски: если при ответе на обращение автоматически использовать данные из поля «Имя», можно стать героем насмешливых или гневных постов. 

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

В статье расскажу, как мы решаем эту задачу.

Читать далее

Код, который не ест батарейку: программируем с умом и экономим ресурсы

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

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

Читать далее

NVIDIA cuDF и 100-кратное ускорение чтения данных формата JSON Lines в pandas

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

JSON — это широко распространённый формат, применяемый для хранения информации, основанной на обычном тексте. Он поддерживается самыми разными системами, обеспечивая их взаимодействие. Чаще всего это — веб-приложения и большие языковые модели (Large Language Model, LLM). Хотя JSON-данные удобны для восприятия человеком, их сложно обрабатывать, используя инструменты из сфер Data Science (наука о данных) и Data Engineering (инженерия данных).

JSON-данные часто существуют в виде JSON-строк (формат JSON Lines), отделённых друг от друга символами перевода строки (NDJSON, Newline-Delimited JSON). NDJSON используется для представления записей, входящих в состав набора данных. Часто первым этапом обработки данных является чтение файлов формата JSON Lines и преобразование их в объекты DataFrame (датафрейм).

В это материале мы сравним производительность и функционал API, доступных в Python и применяемых для преобразования формата JSON Lines в датафреймы.

Читать далее

Румынская нейросеть личной предикации Emerald AI

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

В 2023 международная группа студентов и аспирантов, на базе Королевского Технологического Университете имени Жоржа Асаши в Яссах (Румыния), начала исследования возможности создания личных предикативных систем на базе нейросетей. Изначально, цель группы была доказать, что достоверные предсказания поведения окружения невозможны. Но две из пяти моделей, использованных в первоначальном эксперименте, дали неожиданный результат в 67.1% и 74.5% соответственно. Моделям удалось предсказывать оценки на экзаменах, личные впечатления о поездках, походах в кино, результатов собеседований, личных отношений и, даже реакции на запросах на гранты. Предсказания делались в закрытом для участника виде и результат учитывался по прошествии времени, для предотвращения обратной связи (эффект пифии).

И что дальше?

Библиотека для кэширования Caffeine: анализ кода

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

То и дело, прожигая время за чтением reddit, я натыкаюсь на очередной пост, в котором упоминается метод S3 FIFO и говорится, что он лучше LRU (вытеснение реже всего используемых значений) — потому, что даёт более низкий процент промахов кэша. Видные компании, в частности, RedPandas, Rising Wave и Cloudflare уже внедрили S3 FIFO у себя на различных мощностях, что только подогрело мой интерес к нему. Кэши — чертовски интересная тема, а по работе мне приходится сильно полагаться на работу с кэшами при обслуживании нескольких сервисов. Так что я был уверен, что рано или поздно мне потребуется протестировать S3 FIFO или, как минимум, удостовериться, что я понимаю ключевые идеи, заложенные в этой технологии.

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

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

Читать далее

Более быстрые хеш-таблицы: претенденты на место SwissTable

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

24 ноября 2021 года на сайте ArXiv.org была опубликована научная статья «Крошечные указатели» (Tiny Pointers) с описанием новой структуры данных — «крошечных» указателей, которые указывают путь к фрагменту хранимых данных и занимают меньше памяти, чем традиционные указатели.

Осенью 2021 года эту статью заметил Андрей Крапивин (Andrew Krapivin), студент Ратгерского университета в Нью-Джерси, и не придал ей особого значения, пишет Quanta Magazine, журнал о последних достижениях в математике (перевод статьи на Хабре). Только через два года он нашёл время, чтобы внимательно ознакомиться с материалом. И понял, насколько это прорывное изобретение, если применить его для оптимизации хеш-таблиц.

Данная тема уже упоминалась на Хабре, но заслуживает более подробного обсуждения.
Читать дальше →

SQL HowTo: работаем с массивами (Advent of Code 2024, Day 23: LAN Party)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

Применяем простые операции над массивами, чтобы определить связность графов.

Читать далее

Правильная скобочная последовательность

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

Когда-то однажды я встретил классическую задачу с правильной скобочной последовательностью. Задача звучала как-то так: "Сгенерировать k-ю в лексикографическом порядке правильную скобочную последовательность длины 2n". Эта была одна из первых задач на алгоритмы, которую я встретил. До сих пор не понимаю общепринятое решение, потому придумал свое. Эта статья про это самое решение.

Читать далее

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

Алгоритмы поиска аномалий HBOS и ECOD

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

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

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

Читать далее

Применение ML Pricing в ритейле: хвост виляет собакой

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

Привет, Habr! Мы Катя и Оля, продакт-менеджеры BigData в компании «Лента», отвечаем за развитие цифровых продуктов блоков «Ассортимент» и «Ценообразование».

В этой статье расскажем про внедрение ML-модели и алгоритма ценообразования товаров «хвоста», а также - трудности, с которыми столкнулись.

Читать далее

Закрытие уязвимости Spectre в режиме безопасных вычислений на Эльбрусе

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

Приветствуем!

Уязвимость Spectre обнаружили ещё в 2017 году. С тех пор разработчики Intel, AMD и ARM пытаются её закрыть программными средствами. Пока не очень удачно — программные заплатки не защищают полностью, а производительность процессоров снижается. Разберемся, есть ли уязвимость Spectre на российских процессорах Эльбрус и что с ней делать.

Читать далее

работа с Kafka в Go: практическое применение

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

Автор статьи Якушков Федор.

Apache Kafka — это мощная распределённая платформа для обработки потоков данных, которая завоевала популярность благодаря своей способности эффективно управлять большими объёмами информации в реальном времени. В этой статье мы подробно разберём, как использовать Kafka в языке программирования Go с помощью библиотеки kafka-go. Мы рассмотрим все ключевые аспекты: от event-driven архитектуры до топиков и партиций, от создания продюсеров и консьюмеров до управления оффсетами и обработки ошибок. Разберем гарантии доставки, а также обсудим, где и как применять Kafka в проектах.

Читать далее

SQL HowTo: оконные функции (Advent of Code 2024, Day 22: Monkey Market)

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

В этой челлендж-серии статей попробуем использовать PostgreSQL как среду для решения задач Advent of Code 2024.

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

Используем оконные функции, чтобы вычислить "третью производную".

Читать далее

Упрощать сложно. История одного провала

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

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

В общем, проблема оказалась отнюдь не мала

Три теоремы о сортировках

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

Я знаю многих программистов и руководителей в IT компаниях, которые недолюбливают математиков и в частности считают их далёкими от жизни идиотами из-за их утверждений в духе "нельзя отсортировать последовательность быстрее, чем за nlogn" -- ведь это очевидным образом неверно, есть же сортировка подсчетом и radix sort. Нюанс в том, что описанное выше -- это распространённая некорректная трактовка одной из ключевых теорем об алгоритмах сортировок, корректное утверждение выглядит так: "не существует алгоритма, который бы гарантированно находил перестановку n элементов, приводящую к возрастающему порядку, быстрее чем за nlogn используя только операции попарного сравнения". В этом утверждении больше слов, оно более сложно в плане когнитивного восприятия, ключевой момент обозначил жирным шрифтом, чувствуете разницу?

В статье хочу рассказать об этой теореме и ещё о двух, на которые я наткнулся когда вел занятия по информатике в 9-11 классах будучи студентом старших курсов. Эти теоремы для меня были удивительным открытием, радовался вне себя когда вывел сам одну из них - её я не встречал ни в одном учебнике по информатике. В последствии все три теоремы были найдены в недрах Кнута, но чёрт побери, их поиск был сложнее, чем вывод!

Если я ещё не убедил Вас прочитать статью, то вот моя последняя попытка: в статье объясню почему пузырёк -- это бесполезная фигня, но внезапно практически также работающая сортировка вставками -- это супер важная сортировка, являющаяся частью std::sort в MSVC, GCC и Clang. Расскажу, каким интересным свойством оптимальности обладает сортировка выбором, являющаяся в теории такой же неэффективной как пузырёк.

Читать далее

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