Обновить
214.22

Алгоритмы *

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

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

Как в Netflix сделали поиск по федеративному графу

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

За последние несколько лет те, кто занимается в Netflix направлением Content Engineering, перевели множество служб компании на использование федеративной платформы GraphQL. Этот процесс продолжается и сегодня. Применение федерации GraphQL даёт командам, отвечающим за различные предметные области, новые возможности. Теперь они могут, независимо от других команд, создавать и использовать собственные графовые службы, относящихся к сфере их деятельности (Domain Graph Service, DGS). Команды, кроме того, могут связывать свои предметные области с другими областями в унифицированной схеме GraphQL, доступ к которой даёт федеративный шлюз.

Давайте, в качестве примера, рассмотрим три главнейшие сущности этого графа.

Читать далее

Как я ускорила парсинг строк в serde_json на 20%

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

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

serde — основной фреймворк для сериализации и десериализации в Rust. Его используют как крейт по умолчанию во всей экосистеме. serde_json — это официальный serde-миксин для JSON, так что каждый раз, когда нужно что-то парсить, люди обращаются именно к нему. Конечно, есть и другие библиотеки, специализующиеся на парсинге JSON, например simd-json, но популярность у них, мягко говоря, удручающая. serde_json значительно популярнее: на момент написания от него зависят аж целых 26916 крейта, а от simd-json — всего 66.

Это делает serde_json хорошей мишенью (не как у Jia Tan) для оптимизаций. Велик шанс того, что многим из тысяч пользователей переход на simd-json позволил бы добиться ускорения, но, пока они этого не делают, более мелкие оптимизации — лучше, чем совсем ничего, и такие улучшения — глобальный выигрыш для экосистемы.

Читать далее

Бинарный поиск на пальцах

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

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

Читать далее

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

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

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

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

Читать далее

strlcpy, или как CPU противоречат здравому смыслу

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

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

«В общем случае, когда исходная строка умещается в конечный буфер, strlcpy будет обходить строку только один раз, а strlen + memcpy будут обходить её дважды».

Под этим аргументом скрывается допущение о том, что однократный обход строки выполняется быстрее. И, честно говоря, это вполне разумное допущение. Но справедливо ли оно? Об этом мы и поговорим в статье.

Читать далее

Цифровое моделирование

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

Все три российских углеводорода – нефть, газ и уголь – будут востребованы на мировых рынках на десятки лет вперед. Такой вывод напрашивается исходя из энергетической стратегии России, которая сейчас разрабатывается вплоть до 2050 года.
не только Китай, но и Европа в этом году покупает больше российского газа. 
Задача совершенствования разведки месторождений, разработки его инфраструктуры, добычи, переработки, транспортировки, поставки заказчикам договорных объемов требует от специалистов внедрения самых современных технологий на всех этапах проектирования и сопровождения существующих добывающих комплексов. Там, где таких технологий нет, их приходится создавать практически с нуля самостоятельно. Очень важно при этом использовать наработки в области цифрового моделирования объектов, всех процессов, включая управление месторождением в целом.

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

Читать далее

Читать далее

Стала ли AlphaGeometry прорывом в ИИ?

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

Примерно полгода назад математическое сообщество услышало новость о том, что исследователи DeepMind создали ИИ-систему, решающую геометрические задачи с Международной математической олимпиады на уровне, близком к золотым медалистам ММО. (Эту новость обсуждали в сабреддите \math, см., например, здесь и здесь.) За этими новостями, как часто бывает с новостями о прогрессе ИИ, последовала волна страха и ужаса, усиленная множеством громких газетных статей с картинками (разумеется, сгенерированными ИИ), на которых искусственные мозги решают ужасно сложные уравнения. По коллективной спине математического сообщества побежали мурашки, снова всплыли на поверхность обычные экзистенциальные вопросы о будущем человеческого интеллекта, а Интернет заполнили мемы о грядущем восстании машин.

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

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

Читать далее

Решение головоломки из университетского квеста с помощью Python

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

Cat Walk — одна из интересных головоломок игры Puzzle Hunt Мельбурнского Университета 2012 года. Это задание было частью второго акта игры, и ему предшествовало небольшое повествование, которое продолжало ее сюжет. В соответствии с ним вы получаете от вашего странного компаньона небольшой сверток. Развернув его, вы находите внутри флешку, после чего выше внимание переключается на обертку: она, кажется, представляет собой страницу, которая была вырвана из книги с головоломками для детей. Вы долго и упорно разглядываете головоломку, изображенную на странице, и, похоже, вам удается ее решить. После этого вы обращаетесь к вашему компаньону, чтобы проверить свою догадку. Тот смотрит на вас в изумлении, быстро вставляет флешку в ноутбук, а затем радостно сообщает: «Это потрясающе! Ты разгадал пароль — это же всё, что нам требовалось...» Как оказалось, флешка содержала чрезвычайно важную информацию, а разгадка «детской» головоломки служила паролем для ее получения...

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

Читать далее

Книга: «Алгоритмы? Аха!»

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

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

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

Функция setdefault() в Python: для чего нужна и как её использовать

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

Словари Python — мощные инструменты для работы с данными. Они поддерживают разные методы, но функция setdefault() выделяется способностью упрощать код и эффективно работать со значениями по умолчанию.

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

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

Как Google обрабатывает JavaScript в процессе индексации веб-страниц

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



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

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

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

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

Совсем недавно закончился Евро-2024 и, если честно, оставил после себя смешанные чувства. Я, конечно, больше по хоккею, однако такое событие, как чемпионат Европы по футболу, не могло остаться совсем за бортом.

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

Читать далее

Как я создал систему поиска недооцененных американских акций, используя данные Яху Финанс: мой путь к разумному выбору

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

Хочу рассказать о своем опыте поиска ценных бумаг на американском рынке, которые торгуются на NYSE, NASDAQ и AMEX.

Из России покупать акции иностранных компаний в 2024 году сложно, но варианты до сих пор остаются: иностранный брокер, страховая или некоторые российские брокеры, которые не попали под санкции.

Обычно я покупаю индексные фонды, но иногда хочется купить конкретные акции. Акции какой конкретной компании выбрать, ведь на американском рынке на август 2024 года их торгуется 10'522 штуки? Ответ на вопрос сложен и зависит от многих факторов. Правда, часто не хочется тратить много времени на анализ, но и совсем случайную акцию покупать не хочется.

Существует популярный ресурс Яху Финанс, который предоставляет различные данные по акциям, включая фундаментальные данные, а ещё сводные рекомендации аналитиков различных инвестиционных компаний: прогнозируемую цену бумаги и рекомендацию: покупать / продавать / держать. Все эти данные представлены на Яху в структурированном виде. По одной компании может быть дано множество прогнозов, например для Apple Inc. (AAPL) в августе 2024 таких прогнозов было дано 38 от различных инвестиционных компаний.

Мне пришла идея - а почему бы не собрать эти данные по каждой бумаге, отфильтровать по потенциалу роста - проценту между текущей и прогнозируемой по мнению этих аналитиков ценой, а ещё учесть сколько компаний-аналитиков проводило анализ за два последних месяца. Обязательно фильтровать и учитывать текущую дивидендную доходностью. При практических исследованиях оказалось, что не все акции имеют такие данные о прогнозной цене, а только 4'250 из 10'522 бумаг. Оставшиеся 6'272 акции не имеют данных о прогнозируемой цене.

Акции с прогнозными ценами - можно перебирать каждую из 4'250 бумаг и если она отвечает требованиям - включать в выборку. Ну а с выборкой уже работать самому, когда механический отбор произведён.

Ищем варианты инвестиций в💲

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

Пуск I2S Трансивера на Artery [часть 2] (DMA, FSM, PipeLine)

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

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

Да... Именно так. А также зачем программисту микроконтроллеров конвейеры и цифровые фильтры.

В тексте изложено про то, как источать звук при помощи I2S + DMA.

Читать далее

Матрица Вандермонда

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

Александр Теофил Вандермонд (28 февраля 1735 - 1 января 1796) - французский музыкант и математик, известный благодаря своей работе в области высшей алгебры.

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

В честь Александра Теофила был назван специальный класс матриц - матрицы Вандермонда, о котором пойдет речь в данной статье. [1]

Читать далее

Математика надёжности. Доклад Яндекса

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

Вадим Мартынов, руководитель команды платформы надёжности в Яндекс Go, в своём докладе рассказал, как влияют те или иные решения на надёжность системы и как это учитывать при разработке.

Читать далее

Головоломка «Сапёр» на Python в 66 строк и ее решение вероятностным алгоритмом

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

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

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

Читать далее

Как нейросети выдают кредиты?

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

Ни для кого не секрет, что кредитный скоринг — это вполне распространенная практика оценки заемщика. Чтобы условный чернорабочий с зарплатой 40 тысяч не взял 5 ипотек, а страна не превратилась в одну большую "Игру на понижение"... 

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

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

Читать далее

Феномен Рунге

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

Введение

Карл Давид Тольме Рунге (30 августа 1856 - 3 января 1927) - выдающийся немецкий математик, физик и спектроскопист. Обучался в Берлинском университете, где получил степень PhD, являлся профессором математики в Ганноверском университете, а также главой кафедры прикладной математики в Гёттингене. [1]

в 1901 году Карл открыл "Феномен Рунге" - в численном анализе эффект нежелательных колебаний, возникающий при интерполяции полиномами высоких степеней - о котором пойдёт речь в данной статье. [2]

Но прежде, чем мы окунёмся глубже в изучение данного феномена, давайте поговорим об интерполяционном многочлене Лагранжа, на примере которого мы и разберём Феномен Рунге.

Интерполяционный многочлен Лагранжа

Полином Лагранжа - это математическая функция, позволяющая записать полином n-степени, который будет соединять все заданные точки из набора значений, полученных опытным путём или методом случайной выборки. Многочлен в форме Лагранжа в явном виде содержит значения функций в узлах интерполяции, поэтому он удобен, когда значения функций меняются, а узлы интерполяции неизменны. Число арифметических операции, необходимых для построения многочлена Лагранжа, пропорционально и является наименьшим для всех форм записи. [3]

Полином Лагранжа в общем виде выглядит следующим образом:

Читать далее

Книга: «Алгоритмы и структуры данных на Python»

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

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

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

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