Как стать автором
Обновить
243.36

Алгоритмы *

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

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

Обратная польская нотация, что ты такое? Или как вывести производную сложной функции

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

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

Читать далее
Всего голосов 6: ↑3 и ↓30
Комментарии8

Новости

Равновесное ранжирование со смещением к целевой метрике

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

Постановка задачи:

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

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

В сухом остатке имеем n признаков. Что с ними нужно сделать, чтобы достичь желаемого? Можно суммировать значение всех признаков для объекта и получить итоговую оценку, которая отражает совокупный итог всех знаний об объекте. Но что не так в таком простом подходе?

Читать далее
Всего голосов 2: ↑3.5 и ↓-1.5+5
Комментарии1

Похоже, я придумал свой алгоритм поиска кратчайшего пути (upd_1: увы, но нет. upd_2: или да?)

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

Всем привет! Я реализовал похоже собственный алгоритм поиска кратчайшего пути с отрицательными ребрами графа.
Почему собственный? Я искал подобное решение, но не нашел, возможно, оно уже было реализовано, просто плохо поискал. Жду Нобелевскую премию =)
Додумался я до него путем модификации классического Дейкстры. Прошу адекватно отнестись к содержимому, ибо это моя первая статья, и, возможно, я ничего не придумывал и, вообще, этот алгоритм не работает вовсе (но по моим тестам он работает правильно).

Повторюсь, алгоритм работает с отрицательными ребрами графа (но не с циклическими отрицательными). Чем этот алгоритм отличается от известного Беллмана-Форда? Сложностью! У известного алгоритма сложность составляет O(n3). У "моего" алгоритма по моим расчетам сложность не превышает оригинальной сложности алгоритма Дейкстры, а именно O(n2). Если это не так, поправьте, пожалуйста, после ознакомления с реализацией на языке Python.

Читать далее
Всего голосов 65: ↑64.5 и ↓0.5+64
Комментарии68

Как мы в 2 раза ускорили решение MILP-проблем за счет ML

Время на прочтение8 мин
Количество просмотров780

Многие задачи, с которыми мы имеем дело при цифровизации производства (неважно какого), – это задачи оптимизации: оптимизация производственного расписания, оптимизация цепочек поставок и размещения объектов, оптимизационное планирование и прочее. Многие из них сводятся к проблемам смешанного линейно-целочисленного типа (MILP – Mixed Integer Linear Problem). Конечно же мы хотим их решать быстрее и эффективнее, поэтому год назад начали разработку ML-модулей для этого. В этой статье мы познакомим вас с концептом одного такого модуля – для упрощения MILP методом обнуления переменных – и расскажем о том, насколько нам удалось с его помощью сократить время работы решателя.

Читать далее
Всего голосов 1: ↑2 и ↓-1+3
Комментарии0

Истории

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

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

Что такое конечные автоматы?


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

Конечные автоматы часто используются в разработке программ для моделирования сложных потоков задач. С помощью конечных автоматов можно чётко и структурированно определить поведение системы. Тогда о системе становится проще рассуждать, её удобнее отлаживать и поддерживать.
Читать дальше →
Всего голосов 7: ↑9 и ↓-2+11
Комментарии14

Решение проблемы дымки на изображениях с использованием .NET: Простой и эффективный подход

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

Простое .NET решение для четких фото: избавьтесь от дымки или тумана на изображениях всего за несколько шагов!

Читать далее
Всего голосов 10: ↑10.5 и ↓-0.5+11
Комментарии18

«А» и «Б» сидели на трубе. «А» упало, «Б» пропало. Что осталось на трубе? (алгоритм получения ответа в частном случае)

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

Началось всё с того, что не нашел я библиотеки для JavaScript, которая вычисляет собственные векторы для комплекснозначной матрицы 4х4. Пришлось писать самому.

И в ходе реализации встала передо мной этакая бодренькая микрозадачка – из набора чисел «1, 2, 3, 4» вычеркнули два числа «x, y» (неодинаковых – кто-то придет завтра и задаст эти два числа, а мы сегодня должны приготовиться), требуется объяснить компьютеру, как определить оставшиеся, невычеркнутые числа. И я завис – все идеи, которые приходили мне в голову, казались «неспортивными и чрезмерными» – ну не пузырьковой же сортировкой перебирать четыре числа, должно же быть что-то элегантное. Например, если вычеркнуто не два, а три числа «x, y, z» из четырех «x, y, z, t» (которые «1, 2, 3, 4»), то оставшееся число «t» находится так: t = 10 – (x+y+z). Потому что t+x+y+z = 10 (всегда: 10=1+2+3+4). Вполне элегантно для одного оставшегося числа. А для двух чисел – как быть с элегантностью?!

Решение я нашел – озарило по дороге домой – прям шарахнуло с неба по башке; я даже не поверил сначала, что это оно – показалось мороком усталого мозга. И оно работает не только для четырех чисел – можно решить задачу «из n последовательных чисел вычеркнуто k различных чисел, требуется вернуть остаток» (что осталось на трубе).

Я предложил эту задачку с «n, k»-условием знакомым программистам в качестве застольного анекдота, для развлечения (сам я не программист, честно – мне просто сильно занадобилось объяснить Яваскрипту, как вычислять собственные векторы комплекснозначной матрицы 4х4). Сначала я выслушал их предложения (предлагали «упорядочивание k чисел с последующим перебором n чисел» и «воспользоваться встроенной функцией вычитания множеств»). Потом я рассказал свое решение. Они сказали: «Ну круто, да».

Не думаю, что я совершил великое открытие – скорее всего, этот подход где-нибудь преподается студентам и давно вшит во все языки программирования – но заинтересованные люди, которые эту мелочь не знали (например, я не знал, мои друзья не знали), мне кажется, получат удовольствие – когда ознакомятся.

Читать далее
Всего голосов 6: ↑6.5 и ↓-0.5+7
Комментарии40

Как увеличить прибыль на 1 миллион рублей или зачем нужен блок CRM в Конструкторе ботов?

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

Представьте большой отель с собственным сайтом. Огромное число клиентов: старых, новых и потенциальных. Менеджеров атакуют с вопросами от «а можно забронировать двухместный номер на 5-е число» до «а когда будет завтрак».

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

Всем известна простая истина бизнеса: теряется клиент = теряются деньги.

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

В чем заключалась проблема?

Рассмотрим дело в разрезе чисел. Собрали статистику и выяснили, что недополученная прибыль составила порядка 1 миллиона рублей. Из-за отвлечения на типичные вопросы менеджеры не успевают обрабатывать 30% заказов. С технологической точки зрения процесс не меняется: отель работает в том же режиме, затраты на оплату труда не стали больше или меньше. Но без обработки 100% потока желающих гостиница не получила миллион рублей. Отчет аналитика показал неутешительные выводы: конверсия падает, отель теряет деньги. Было два пути решения этой проблемы: найти новых сотрудников или оптимизировать труд уже нанятых. Искать и обучать новых людей было затратно по времени и финансам, поэтому решили сделать более эффективной работу менеджеров.

Что мы сделали?

Так как вся система отеля находилась в Битрикс24, и там же была установлена связь с виджетом от ChatApp, нам оставалось только настроить автоматизированные ответы на часто задаваемые вопросы - что мы и сделали!

Читать далее
Всего голосов 7: ↑4 и ↓3+1
Комментарии3

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

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

Современные томографы позволяют получать высокоточные трехмерные изображения внутренней структуры большого размера, предоставляя ценную информацию о геометрии, составе и дефектах исследуемых образцов. Размеры одной реконструкции обычно колеблются от 512 мегабайт до 1 терабайта. Для анализа таких данных используются специализированные инструменты, но традиционная визуализация трёхмерного объема реконструкции до сих пор является важным этапам оценки качества реконструкции и её интерпретации специалистом.

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

Читать далее
Всего голосов 20: ↑22.5 и ↓-2.5+25
Комментарии8

Сказ о том, как РП репликацию на Марии из зеркал состряпал…

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


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

Читать далее
Всего голосов 3: ↑4 и ↓-1+5
Комментарии0

Музыкальное время и MIDI

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

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

Читать далее
Всего голосов 4: ↑5 и ↓-1+6
Комментарии6

Миллер, Рабин, вектор

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

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

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

Читать далее
Всего голосов 22: ↑24.5 и ↓-2.5+27
Комментарии12

Каким может быть алгоритмическое собеседование и как к нему подготовиться

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

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

Мы попросили Самсонова Ивана рассказать о его критериях оценки кандидатов, а также поделиться советами по подготовке. На видео Иван выступал в роли тимлида, а в обычной жизни он разработчик со степенью в Computer Science и наставник курса «Алгоритмы и структуры данных».

Смотреть и читать
Всего голосов 17: ↑11 и ↓6+5
Комментарии28

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

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург

Potato Sorvor в $NOTCOIN или история одного реверса

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

Приветствую. Речь в статье пойдёт про мой опыт реверсинга и написания ботнета для $NotCoin.

Дело было вечером, делать было нечего, подружка села на заборе — и скинула мне ссылку на ноткоин в альфе.
Посмотрел, потыкал, недолго думая, я забыл про него на месяц.
И вот он уже набрал аудиторию и я подумал, что всё же стоит посмотреть что там да как.

Суть игры в одном слове: кликер.

И что же нужно делать?
У тебя есть монетка, на неё нужно кликать, чем больше монет - тем лучше.

Читать далее
Всего голосов 5: ↑5.5 и ↓-0.5+6
Комментарии2

Как найти баланс между интересами покупателей и продавцов: опыт разработчиков Яндекс Маркета

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

Привет, Хабр! Меня зовут Илья Ненахов, я руковожу разработкой платформы для продвижения товаров на Яндекс Маркете. Предлагаю взглянуть на площадку немного с другой стороны, а именно — как на механизм, который пытается найти оптимальную точку в пространстве с тремя измерениями:  интересы пользователя, интересы магазинов и интересы самого сервиса.

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

Читать далее
Всего голосов 18: ↑17 и ↓1+16
Комментарии27

Дерево отрезков

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

Всем привет. В этой статье я расскажу про дерево отрезков. Очень мощной структуры данных, которая позволяет делать много разных операций над массивом чисел. Я постараюсь по полочкам разложить эту тему и объяснить возможности дерева отрезков. Также я разберу несколько нетривиальных задач на дерево отрезков. Помимо самого дерева отрезков я расскажу и про связанные темы: дерево Фенвика и разреженные таблицы.

Читать далее
Всего голосов 22: ↑26 и ↓-4+30
Комментарии10

Оцениваем сложность алгоритмов на C# по памяти и времени с примерами

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

Продолжаем говорить о производительности и оптимизации кода. Сегодня поговорим о том, как и зачем оценивать сложность алгоритмов,  а также наглядно покажем, как эта сложность влияет на производительность кода.

Читать далее
Всего голосов 8: ↑6.5 и ↓1.5+5
Комментарии18

Яндекс запустил Нейро. Рассказываем, как он работает

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

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

Меня зовут Андрей Сюткин, и я отвечаю за ML-трек в Нейро. В этой статье покажу, как выглядит архитектура Нейро и как формируются ответы на технологическом уровне. Ну и, конечно же, поговорим о нейросетях, в том числе о YandexGPT 3, без обучения которых новый сервис просто не увидел бы свет.

Читать далее
Всего голосов 91: ↑90.5 и ↓0.5+90
Комментарии143

Библиотеки для реализации алгоритмов сжатия данных в Rust

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

Привет, Хабр!

Сегодня мы рассмотрим хорошие библиотеки для реализации алгоритмов сжатия данных на ЯП Rust. Сжатие данных позволяет уменьшать объемы данных без потери качества или с минимальными потерями. Различают две основные категории методов сжатия: с потерями и без потерь.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии10

Введение в цифровую обработку сигналов

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

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

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

Это статья сделана совместно с автором курса по Цифровой обработке сигналов в INZHENERKA.TECH Волченковым Владимиром, доцентом кафедры телекоммуникаций и основ радиотехники ФГБОУ ВО «РГРУ им. В.Ф. Уткина» и научным сотрудником ООО «Лаборатория Сфера». Больше информации в нашем сообществе инженеров.

Аналоговая обработка сигналов

Возможно, самым простым примером аналоговой обработки сигналов является знакомая RC-цепь, показанная на рисунке 1.

Читать далее
Всего голосов 7: ↑6.5 и ↓0.5+6
Комментарии8
1
23 ...

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