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

Алгоритмы *

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

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

Сжатие без потерь — главная концепция в нашей жизни

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

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

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

Все мы знаем и используем компьютерные архиваторы: ZIP, RAR, Brotli и т. д. Но мало кто видит в них модель интеллекта. Это даже как-то странно на первый взгляд. Хотя если подумать, то идеальное сжатие — это синоним понимания.
Читать дальше →

From Zero to Hero: определите ваш уровень решения LeetCode задач от 1 до 5

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

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

А какой у вас уровень?

Читать далее

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

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

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

Я за свою карьеру имел возможность быть по обе стороны баррикад. С одной стороны я провёл сотни алгоритмических интервью в компаниях, где работал. С другой стороны сам успешно проходил такие интервью и получал оффер в Google, Facebook, Amazon, Uber, Yandex и Mail.Ru.

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

Читать далее

Boson — разработка СУБД «с нуля» (часть II)

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

В первой части статьи мы обсуждали разработку самого нижнего слоя СУБД Boson - CachedFileIO. Как упоминалось, статистика такого явления как Locality of Reference говорит о том, что в реальных приложениях ~95% запросов к данным локализованы в 10-15% базы данных. При этом среднее соотношение чтения/записи - 70%/30%. Это делает эффективным использование кэша (cache) работающего на основе алгоритма Least Recently Used (LRU). Реализовав его, мы получили 260%-600% прироста скорости чтения при 87%-97% cache hits.

Следующим после кэша слоем СУБД Boson является хранилище записей RecordFileIO. Это уже первый прообраз базы данных, который начинает приносить прикладную пользу. Сформулируем верхнеуровневую спецификацию требований:

Читать далее

Клинические алгоритмы при пандемии COVID-19 на медицинском языке ДРАКОН. Часть 1

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

Рассматривается проблема COVID-19 и респираторная терапия дыхательной недостаточности, ассоциированной с COVID-19. Даны примеры клинических алгоритмов на медицинском алгоритмическом языке ДРАКОН.

Счет погибших от коронавирусной инфекции COVID-19 идет на миллионы. Борьба с этим злом потребовала от человечества чрезвычайных усилий: финансовых, организационных, научных. Потребовались не только новые методы вакцинации и лечения, но и новые формы сотрудничества медицины и ИТ-отрасли или, как говорят, новые формы цифровой трансформации медицины.

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

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

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

Увы, таких инструментов пока нет.

Между тем в эпоху цифровой медицины... 

Читать далее

Связный список в Swift

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

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

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

Читать далее

Алгоритм поиска «одинаковых» геометрий

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

Привет! Меня зовут Мацкевич Евгений, я бекэнд-разработчик 3D-движка компании «Бимейстер». Хоть это и не очевидно на первый взгляд, но элементы загружаемых пользователями 3D-моделей зачастую повторяются, имея при этом различные положение в пространстве, масштабирование и вращение. Я расскажу о том, как мы научили нашу систему распознавать такие элементы как «одинаковые», выделять из них уникальный, а для остальных – вычислять матрицы трансформации. Это дало возможность однократно загружать уникальный элемент, а вместо прочих одинаковых – их матрицы, что сократило трафик и объем занимаемой оперативной памяти.

Читать далее

Как найти часть суши, окруженную водой

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

Уже очень давно создана и работает программа, отображающая космонавтам движение МКС на карте земной поверхности.

МКС, конечно, двигается вовсе не по земной поверхности, а по орбите. Но если соединить станцию и центр Земли прямой, то точка пересечения этой прямой с земной поверхностью будет являться т.н. «подспутниковой» точкой. Совокупность этих точек составляет «трассу» полета. Другими словами, трасса – это проекция на земную поверхность плоскости орбиты. Если земная поверхность представлена схематичным изображением континентов в цилиндрической проекции, то трасса МКС (наклонение ее орбиты 51,8°) отобразится кривой, напоминающей синусоиду. И где-то на этой «синусоиде» обычно красным кружочком отображается текущее положение МКС...

Читать далее

Основные приемы работы с Canvas [Part 2]

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

Привет! Мы продолжаем цикл статей по базовым принципам работы с canvas. Сегодня мы рассмотрим L-системы в качестве примера для создания различных интересных визуализаций.

Так что же такое L-ситемы? L-системы (или системы Линденмайера) — это набор простых правил, которые используются для моделирования роста водорослей (и не только), созданные венгерским биологом Аристидом Линденмайером в 1968 году.

Читать далее

Горячие следы на тернистом пути

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

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

Где я?

В прошедшие две недели успешно прошёл секции написания кода в Яндекс, жду финалок. Это уже моя пятая попытка попасть в компанию, причём третья после прохождения курса Яндекс.Практикума по алгоритмам, который я закончил в конце 21-го года, т. е. чуть больше года назад. Задачки в этот раз по моему субъективному ощущению оказались чуть сложнее, чем ожидал и чем попадались в предыдущих попытках. Первая задача была близка к medium, а вторая где-то между medium и hard. Темы: массивы, строки и, конечно же, обожаемые Яндексом хеш-таблицы. Ещё попалась одна задача с матрицей.

Читать далее

Wave Function Collapse для процедурной генерации в Unity

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

Wave Function Collapse – это алгоритм, c помощью которого можно реализовать генерацию чего угодно, что можно было бы описать с помощью правил или конкретным примером. В этой статье мы рассмотрим, как использовать WFC для генерации карты в Unity.

Читать далее

Dynamic Programming, или как использовать предыдущий computation-опыт

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

Меня зовут Аят, я Android-инженер команды антифрода в inDrive. Эта статья не связана с продукционной разработкой, но будет касаться программирования. Я расскажу о Dynamic Programming (DP) и о том, как эффективно использовать предыдущий computation-опыт. Надеюсь, будет интересно. 

Порешать задачи с использованием DP

Алгоритм внешней сортировки слиянием

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

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

Читать далее

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

Задача коммивояжера (TSP) точное решение — метод целочисленного линейного программирования (Integer programming)

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

Дочитав эту статью до конца, вы сможете решать точно задачу коммивояжёра на сотню элементов за считанные секунды!

Заинтригованы? Тогда, добро пожаловать под кат.

Читать далее

Визуализация весов в машинном обучении на примере алгоритма Random Forest и Decision Tree

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

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

Меня зовут Александр Серов, я Data Scientist и являюсь участником профессионального сообщества NTA.  Сегодня загляну «под капот» алгоритмов, использующих в своей основе деревья решений. Один из самых мощных алгоритмов контролируемого машинного обучения на сегодня – градиентный бустинг (Catboost, XBGR), построен на столь казалось легком и базовом элементе, как бинарное дерево, или же дерево решений. Оно является строительным блоком данного алгоритма, в данном случае можно привести притчу про веник и его части, но в этом случае, иногда даже одно дерево решений способно выдать неплохой результат в решениях задач классификации и регрессии. Сегодня я рассмотрю его подробнее, на примере Decision Tree и Random Forest из библиотеки sklearn, а также визуализирую работу.

Читать далее

Простое (не очень) увлажнение квартиры

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

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

Читать далее

Алгоритм HyperLogLog, или Оцениваем мощность множества за O(1)

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


Привет, Хабр! Меня зовут Максим, я учусь на третьем курсе МФТИ. Этим летом я участвовал в студенческой программе, которую проводила команда Tarantool. Если кратко, суть программы в том, чтобы самостоятельно или в команде решить исследовательскую задачу в определенный срок. 

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

Подводные камни компараторов в С++

Время на прочтение9 мин
Количество просмотров11K
При использовании компаратора в алгоритмах boost::sort и std::sort важно учитывать некоторые особенности работы этих алгоритмов, игнорирование которых может привести к неожиданным последствиям, в том числе к segmentation fault.

image

Чаще всего при сортировке объектов пользовательских типов написание кода сравнения элементов коллекции не вызывает вопросов. Компаратор должен возвращать true, если первый аргумент меньше второго, то есть в отсортированном массиве первый аргумент должен идти перед вторым. Алгоритмы сначала вызывают компаратор для пары элементов x и y. Если компаратор вернул true, значит, элемент x меньше y и он должен идти в коллекции перед элементом y, если false, то компаратор вызывается повторно для пары y и x. Если компаратор опять вернул false, значит, элементы равны, иначе порядок определен.

Меня зовут Олег Игнатов, я — Development Team Lead в команде KICS (Kaspersky Industrial CyberSecurity) «Лаборатории Касперского». Мы защищаем промышленные инфраструктуры и сети от специализированных киберугроз. В этой статье расскажу о некоторых особенностях использования компараторов в С++, знание которых позволит не наступить на различные грабли и сэкономить время при разборе багов.
Читать дальше →

Как нейросети обманывают врачей

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

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

Читать далее

Мой опыт разработки программы для игры в шашки с помощью алгоритма минимакс

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

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

Мне захотелось написать программу, которая будет играть в шашки на относительно высоком уровне. Для этого я использовал алгоритм минимакс и Unity.

Читать далее

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