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

Алгоритмы *

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

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

Как мы выбираем задания на отбор Route 256: подход и разбор задач

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

Однажды мы решили, что грамотных инженеров эффективнее всего растить самим. Так 3 года назад родился Route 256 — курсы Ozon для разработчиков и тестировщиков уровней junior и middle.

Во время курса ведущие специалисты Ozon погружают в индустрию e-com, знакомят с актуальным стеком и бизнес-задачами. Самые успешные выпускники получают оффер в команду Ozon.

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

Читать далее

Шахматные задачи от Поколения

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

Уже много лет, начиная с 1966 года, во всем мире 20 июля отмечают Международный день шахмат. В честь недавно прошедшего праздника мы решили написать статью, в которой поговорим о шахматных задачах из курсов "Поколение Python".

Так получилось, что шахматные задачи являются одной из главных визиток наших курсов. Мы любим эти задачи потому, что они учат строить алгоритмы, находить закономерности, а также позволяют отточить работу с условными (if-else) и логическими (and и or) операторами.

Читать далее

Алгоритм Чена — новая квантовая угроза? Разбираем риски раскрытия данных с криптографами компании «Криптонит»

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

Каждый день мы пользуемся криптографическими схемами, не особо задумываясь об этом. Именно криптография обеспечивает защиту наших коммуникаций через интернет, включая все B2B, B2C и G2C взаимодействия. Без неё не было бы безналичных платежей и онлайн-торговли, электронных госуслуг и других современных технологий, способствующих развитию рынка и общества.

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

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

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

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

Читать далее

Что не так с расчётом биологического возраста?

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

Привет, Хабр! Меня зовут Дмитрий Крюков, я — научный сотрудник лаборатории «Сильный ИИ в медицине» в AIRI. Недавно мы опубликовали статью на стыке биологии старения и машинного обучения, в которой раскритиковали использование так называемых эпигенетических часов старения для измерения омоложения клеток в процессе клеточного репрограммирования. Тема часов старения уже поднималась на Хабре (раз, два, три) — настолько она стала популярной в современной биологии с приходом в неё методов машинного обучения. А уж тема репрограммирования клеток, которую Юрий Дейгин (кстати, рекомендую его блог на Хабре) с легкой руки назвал «эпиоткатом», так вообще превратилась в гигантское направление клеточной биологии и инженерии тканей. 

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

Читать далее

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

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


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


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



Сегодня мы будем говорить о таких структурах данных, как деревья. В этой статье мы рассмотрим двоичное дерево поиска, АВЛ-дерево и красно-черное дерево.


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


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

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

Полезные курсы по ИИ

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

Лето — прекрасное время для того, чтобы неспешно заниматься тем, что нам нравится. А что нам нравится? Конечно же, ИИ!

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

1. Coursera “Deep Learning Specialization” (Специализация глубокое обучение)

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

2. Coursera “ChatGPT Prompt Engineering for Developers” (Промт инжиниринг ChatGPT для разработчиков)

Маленький урок, в рамках которого вы научитесь быстро и эффективно создавать новые приложения с использованием LLM. Курс охватывает работу LLM, практики инженерии запросов и использование API LLM для различных задач. Знаете, кто ведет этот курс? Лиза Фулфорд (OpenAI) и Эндрю Нг (DeepLearningAI) —неплохой каст, да?

3. edX “HarvardX: Data Science: Machine Learning” (ГарвардХ: Наука о данных: Машинное обучение)

Крутой бесплатный курс от Гарвардского университета по машинному обучению — надо! Здесь вы пройдетесь по основам машинного обучения; узнаете, как выполнять кросс-валидацию; изучите несколько популярных алгоритмов машинного обучения и др.

4. Harvard University “Machine Learning and AI with Python” (Машинное обучение и ИИ на Python)

Читать далее

Нахождение сильно преобладающего элемента последовательности >n/2 (алгоритм большинства голосов Бойера-Мура)

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

Пару статей назад я уже рассматривала один из алгоритмов Бойера-Мура, с помощью которого можно было найти подстроку в строке.

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

Предлагаю сразу использовать его на примере задачи «Majority Element» с leetcode.

Условие здесь: https://leetcode.com/problems/most-frequent-even-element/description/

Кстати, у меня есть телеграм-канал, где пишу подходы к решениям всяких задачек с LeetCode, там больше разборов конкретных задач, чем здесь, потому что не всегда нужна статья. В общем, если интересно - жду здесь - t.me/crushiteasy :)

Возвращаемся к Муру!

Кратко: на вход мы получаем массив, состоящий из чисел. Нужно найти число, которое встречается наибольшее количество раз. 

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

Читать далее

Алгоритмы — самый провальный этап собеседований

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

Уже много лет IT компании проводят алгоритмические собеседования при найме технических специалистов. Подход введенный в FAANG плавно перетек в большинство крупных компаний. Яндекс, Авито, Т-Банк и многие другие хотят проверить алгоритмические знания кандидатов. Но на практике такое собеседование оказывается бесполезным созвоном на 45 минут, который ничего не говорит о кандидате.

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

Но очень мало можно встретить критики и конкретного разбора проблем алгоритмических собеседований и их внедрения в воронку найма. Эта статья будет первой в цикле “в чем проблема алгоритмов”.

Кто-то может сказать: “О, человека не приняли в компанию из-за алгоритмов и он решил обидеться и сказать всем, что алгоритмы бесполезны”. Отчасти это так и было, но я решил не останавливаться на своем чувстве несправедливости и пошел дальше: адаптировал алгоритмы в компании, прошел все этапы в Google и даже решал алгоритмы на протяжении года.

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

Но все это отдельными статьями, ссылки на которые я приложу сюда позже.

Сейчас я просто хочу рассказать свою историю.

Читать далее

Кручу, верчу, выровнять ось вращения хочу! Или о том, как ось вращения объекта автоматически выравнивается в STE

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

Хабр, жаркий июльский привет тебе от отдела компьютерной томографии компании Smart Engines! Раньше мы тебе рассказывали о задаче поиска положения смещенной и наклоненной оси вращения объекта в компьютерной томографии. Мы обещали рассказать о нами разработанном методе решения этой задачи, и вот, мы здесь! Мы вернулись к тебе с опубликованной статьей о нашем методе и с полученным патентом РФ!

Читать далее

3 варианта решения популярной задачи

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

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

Читать далее

Решение задачи с собеседования Middle of the Linked List [+ ВИДЕО]

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

Всем салют! Давайте решим задачу "Middle of the Linked List"

Дан указатель head на начало односвязного списка, нужно вернуть средний узел списка.

Если средних узлов два, нужно вернуть второй средний узел.

Читать далее

Логистика. Часть 8. Почему GDS лидируют в оптимизации авиаперевозок: пример увеличения прибыльности код-шера

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

Когда реальность не соответствует ожиданиям — это всегда неприятно. Особенно неприятно, если за ожидаемую реальность заплачены деньги: покупаешь билет одной авиакомпании, но по какой-то причине тебя сажают в самолет совсем другой авиакомпании. Затем делаешь пересадку, а тебя там сажают в самолет какой-то непонятной третьей авиакомпании. Что происходит? Ведь на руках билет авиакомпании, который приобретен как раз потому, что знаешь, чего от нее ожидать, но летишь все равно самолетами совсем других авиакомпаний. Вроде бы покупал билет у крупной и хорошо себя зарекомендовавшей авиакомпании, а уже на борту выясняется, что у этой авиакомпании есть региональные дочерние компании и филиалы, которые далеко не так хороши. Первое знакомство с код-шеринговыми рейсами может оказаться очень неприятным.

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

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

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

Как поделить не деля или оптимизация деления компиляторам(и)

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

Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следущий snippet:

Смотреть код

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

Использование очередей (Queue/Deque) для решения алгоритмических задач на Java

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

Как всегда, сначала немного базовой теории для понимания того, с чем мы имеем дело. 

Queue - однонаправленная очередь, представляет собой структуру данных, которая строится по принципу FIFO (first-in-first-out). Другими словами, чем раньше элемент был добавлен в коллекцию, тем раньше он оттуда будет удален. 

Выжимка по методам:

Читать далее

Как мы прогнозируем спрос на заказы в Яндекс Лавке, чтобы эффективнее распределить нагрузку на курьеров. Доклад Яндекса

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

Всех приветствую! Меня зовут Александр Исаков, я аналитик-разработчик в Яндекс Лавке. Занимаюсь прогнозированием с применением методов машинного обучения, чтобы помочь Лавке вовремя подготовиться к пикам спроса. Мой доклад про то, как мы прогнозируем множество параметров для расчёта необходимого числа курьеров, чтобы у нас была возможность довезти все заказы вовремя.

Читать далее

Симметрии модели числа. Часть III

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

Продолжаем знакомство с моделью числа и ее свойствами, а конкретно, с симметриями на разном уровне представления модели: областей строк, отдельных строк, элементов одной строки и элементов разных строк. Для читателей, ознакомившимися с моими предыдущими статьей 1(О разложении модели числа), статьей 2 (О симметриях...) и др. предлагается продолжить знакомство с проблемой моделирования и исследования чисел. Прошелся по результатам анализа своих публикаций и очень благодарен разработчику этого объективного механизма оценивания чужого внимания к авторским работам. Как же порой мы ошибаемся!

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

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

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

Для уменьшения влияний прибор вынесли в другую комнату.

Замыкали цепь, в катушку вставляли стержень и оба с помощником шли к прибору смотреть показания. Прибор не показывал ничего. Так шло время, пока однажды помощник не застрял около прибора, и не увидел как его стрелка качнулась! Крикнул: что вы сделали, прибор ожил!.

Рано или поздно это должно было случиться и оно случилось!

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

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

Читать далее

Генерация Фракталов методом хаоса, UI на ScalaFX

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

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

Читать далее

Вычисление любого математического выражения в C# (.NET)

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

Для улучшения возможностей научных вычислений в C# я реализовал evaluator, способный вычислять любое математическое строковое выражение с исключительной производительностью. Он также поддерживает пользовательские переменные, операторы и функции. Библиотека .NET под названием MathEvaluator и её документация доступны на GitHub.

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

Читать далее

Как мы написали конкурентные структуры данных на C++ и научились их верифицировать

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

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

Для решения этой задачи команда ВКонтакте вместе со студентами из университетов ИТМО и СПбГУ работала над научно-исследовательским проектом — верификацией конкурентных структур данных на языке C++. В этой статье подробно расскажем, как мы в рамках проекта проверяли корректность наших конкурентных структур данных и заодно исправили найденную в нашем новом рантайме ошибку.

Читать далее

Опять Mikrotik и снова Telegram…

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

Здравствуйте Друзья!

Два года назад мною была написана статья, посвящённая разработке в RouterOS.

В рамках того проекта мы управляли устройствами Микротик через Телеграм-бота. Было получено много опыта и много кода, в виде библиотек на языке Mikrotik Script, для работы с API Телеги, функций обработчиков, и всевозможных форм.

Тогда же пришло понимание, что Микротик в связке с Телеграм, это мощно и есть вариант за недорого изобразить сервис. Нужна была идея...

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

Читать далее

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