Все потоки
Поиск
Написать публикацию
Обновить
170.46

Алгоритмы *

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

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

Мой босс — робот. Все, что нужно знать о найме “цифровых работников”

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

Долгое время я руковожу развитием и разработкой платформой ТУРБО Х (направление бизнеса “Консист Бизнес Групп”), позволяющей автоматизировать многие процессы. Но в этом тексте я хочу поразмышлять о другом - о недавно возникшем феномене “цифровых сотрудников”. Они могут иметь навыки, отличающиеся от наших, и быть «натренированы» для выполнения различных задач. Цифровых сотрудников можно “вырастить” самим, а можно нанять в аутсорсинг. Об особенностях их найма, оценки эффективности и причинах возникновения, рассказываю ниже. 

Читать далее

Алгоритм Дейкстры. Разбор Задач

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


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

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

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

Решаем Wordle с 3,64 попыток в 99,4% случаев

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

Недавно я играл в головоломку Wordle, параллельно думая, как бы её могла решать программа.

[Прим. пер.: Wordle — игра в отгадывание слов, напоминающая «быки и коровы». Правила достаточно ясны по скриншоту выше.]

Первым делом я извлёк списки слов с сайта Wordle. Любопытно, что существует «целевой» список из 2315 слов, которые могут быть ответами, но и дополнительный список из 10657 возможных догадок — вариантов, которые могут вводить пользователи, но которые никогда не будут ответом. Если вам нужны эти списки, то в репозитории ниже есть пара set в формате Python.

Первым делом я подумал, что для управления моей стратегией угадываний стоит использовать частотность букв английского языка. Однако потом я осознал, что есть способ получше: использовать частотность букв в целевом списке! Ведь это самое важное? Никаких мне etaoin shrdlu!
Читать дальше →

Реализация алгоритма Краскала на С#

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

В данной статье для реализации алгоритма будут рассмотрены:

1. Система хранения графа на основе List<>

2. Сортировка рёбер графа по весу

3. Система непересекающихся множеств

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

План действий

1. Сортируем имеющиеся рёбра по весу.

2. Создаём новое множество и добавляем в него первое ребро.

3. Затем пытаемся добавить каждое новое ребро в имеющееся множество, если возникает цикл - пропускаем.

4. Итоговое множество рёбер и есть искомое минимальное остовное дерево.

По сути, это и есть формулировка алгоритма Краскала. Звучит совсем просто.

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

Но для начала давайте рассмотрим систему хранения графа в программе.

Читать полностью

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

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

Привет, Хаброжители! У нас вовсю продолжается распродажа «Старый Новый год»

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

Генераторы случайных чисел (ГСЧ) – важнейшая составляющая разнообразных процессов, связанных с компьютерными программами, таких как криптография, моделирование, машинное обучение, игры, программирование, азартные игры, научные исследования – список можно продолжать. Но может возникнуть вопрос: как именно получить по-настоящему случайное значение, и почему это важно?

Читать далее

Мой опыт собеседования в Amazon

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

О чём эта статья

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

Это история о моем опыте собеседования в Амазоне, почему мне в целом не понравилось по сравнению с другими FAANG. Так же тут будут ответы на “а что конкретно спрашивали на интервью, какие были задачки, что на систем дизайне было”, потому что мне не дали подписать NDA, все с пруфами, скринами и прочее.

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

Начало, предложение от Amazon

В один прекрасный день 6 сентября, мне пришел такой сообщение в Линкедин.

Читать далее

Градиенты в нейронных сетях для поиска аномалий в данных

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

В основе машинного обучения лежит предположение, что данные для обучения, тестирования и применения взяты из одного и того же распределения. К сожалению, в процессе применения модели это предположение может нарушаться, что приводит к необъяснимым последствиям — сдвигу распределения. Особенно такие нарушения опасны в областях, где требуется быстро и точно принимать решения: медицина, финансы, self-driving cars. 

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

Меня зовут Глеб Енгалыч, я аспирант Питерской Вышки первого года обучения. В этом посте я расскажу о своей магистерской диссертации «Анализ градиента нейронной сети для поиска аномалий в данных», которую сейчас активно дорабатываю для подачи на конференцию ICML-2022.

Читать далее

Оптимизация генплана. Какая математика под капотом?

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

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

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

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

Читать далее

Роль алертов в инфообмене с маркетплейсом

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

Ошибки, как ни старайся их избежать — спутник любого инфообмена. Человек может опечататься, канал — разорваться, сервис — зависнуть. А значит, очень важно узнавать об ошибках первым и вовремя их устранять. Всем привет, меня зовут Антон Баташов, я руководитель отдела интеграции и технической поддержки в компании XWAY, и в этой статье мы поговорим об алертах: зачем они нужны, какие бывают и как с их помощью настроить полноценный мониторинг инфообмена с маркетплейсом. 

Читать далее

Адаптивное свойство одной строкой

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

Задача. Описать изменение значения CSS-свойства как функцию от ширины вьюпорта без использования медиа-запросов. Результатом работы миксина должна быть единственная строка вида <свойство>: <функция от ширины вьюпорта >. В качестве входных данных имеются заданные (табулированные) точки (ширина вьюпорта, значение свойства). Поведение CSS-свойства от точки к точке аппроксимируется прямой линией.

В сети достаточно много разных способов решений для частных случаев (см., например, https://habr.com/ru/post/501392/). Здесь же предлагается общее решение задачи.

Читать далее

Сравнение матричной факторизации с трансформерами на наборе данных MovieLens с применением библиотеки pytorch-acceleratd

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

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

Читать далее

Как в Java устроено выделение регистров в памяти

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

Привет, Хаброжители! Обратите внимание на большую распродажу в честь Старого Нового года.

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

Читать далее

Разумная слизь? Тварь, способная решать сложные задачи, что не под силу даже существам, обладающим развитым мозгом

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

Автор Лысый Камрад (@LKamrad)

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

Знакомьтесь, Physarum polycephalum  – не животное, не растение и даже не гриб...

Примечание: данную публикацию можно использовать для начала ознакомления учащихся с принципами динамического программирования.

Читать далее

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

Формула Бине без плавающей точки

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

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

Читать далее

Жизнь как граф

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

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

Читать далее

Big O нотация в Swift

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

Данная статья поможет начинающим iOS разработчикам разобраться в производительности алгоритмов в Swift.

Обозначение Big O нотация (или просто Big O) — это способ оценки относительной производительности структуры данных или алгоритма, обычно по двум осям: времени и пространству.

Читать далее

Ещё 20+ игр, которые прокачивают логику, алгоритмы и радуют умный мозг [по следам комментариев на Habr]

Время на прочтение9 мин
Количество просмотров142K
image

Я выложила вчера подборку «15 игр, которые прокачивают логику, алгоритмы, ассемблер и силу земли». И столько классных ссылок в комментарии накидали, что я чуток опухла, но сделала отдельную подборку, по горячим следам. Спасибо большое всем, кто внес свой вклад.

Еще я веду канал в Telegram: GameDEVils, делюсь там клевыми материалами (про геймдизайн, разработку и историю игр).
Читать дальше →

Как измерить количество информации?

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

Мы ежедневно работаем с информацией из разных источников и поэтому имеем интуитивные представления о том, что означает, когда один источник является более информативным, чем другой. Однако далеко не всегда понятно, как это правильно определить формально. Не всегда большое количество текста означает большое количество информации. Например, среди СМИ распространена практика, когда короткое сообщение из ленты информационного агентства переписывают в большую новость, но при этом не добавляют никакой «новой информации». Или другой пример: рассмотрим текстовый файл с романом «Война и мир» в кодировке UTF-8. Его размер — 3.2 Мб. Сколько информации содержится в этом файле? Изменится ли это количество, если файл перекодировать в другую кодировку? А если заархивировать? Сколько информации вы получите, если прочитаете этот файл? А если прочитаете его второй раз?

По мотивам открытой лекции для Computer Science центра рассказываю о том, как можно математически подойти к определению понятия "количество информации".

Читать далее

15 игр, которые прокачивают логику, алгоритмы, ассемблер и силу земли

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


Есть «Super Mario», признанная классика видео игр. Есть «Doom», который запускают на чайниках и тестах на беременность. Есть супер-популярные по статистике twitch.tv игры («League of Legends», «GTA V», «Fortnite», «Apex Legends») которые стримят пятая часть всех стриммеров.

А есть игры, на которые очень мало обзоров, но они супер крутые — игры про алгоритмы. Игры, в которых можно кодить на ретро-компьютере; игры, которые надо взламывать; игры, где можно программировать контроллеры или поведение персонажей; игры, где можно создавать свою игру внутри игры.

Под катом подборка классных игр про алгоритмы за последние 10 лет. Если что-то упустила — буду рада дополнениям.

Еще я создала канал в Telegram: GameDEVils, буду делиться там клевыми материалами (про геймдизайн, разработку и историю игр).
Читать дальше →

Интерпретация моделей и диагностика сдвига данных: LIME, SHAP и Shapley Flow

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

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

Также поговорим о проблемах метода SHAP и его дальнейшем развитии в виде метода Shapley Flow, объединяющего интерпретацию модели и многообразия данных.

Читать далее

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