Обновить
215.44

Алгоритмы *

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

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

Вычисление стихотворного размера

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

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

Читать далее

Граф знаний LinkedIn’s Economic Graph и его Star2Vec-эмбеддинги

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

В этой публикации я представляю поверхностный обзор статьи от исследователей LinkedIn «Representation Learning in Heterogeneous Professional Social Networks with Ambiguous Social Connections». В указанной статье частично представлена структура графа знаний LinkedIn’s Economic Graph и относительно подробно описан метод обучения эмбеддингов Star2Vec. Я попытаюсь объяснить основные этапы построения векторных представлений, что называется "на пальцах".

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

1. Skip-gram и его адаптация под графы (word2veс, LINE, DeepWalk);

2. общие понятия о графах знаний.

Поехали!

Компрессия битового потока

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

Всем привет! Расскажу про нашу разработку, которая изменит подход к обработке данных в корне.

Мы разработали новый математический алгоритм обработки данных и программный продукт на его базе (кодек), позволяющий работать со сжатием битовых потоков любого формата (статические/динамические) – то есть, кодек позволяет проводить более глубокое сжатие уже существующих файлов (видео, изображения, архивы и т.д.), так и осуществлять сжатие исходных «сырых» данных.

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

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

Читать далее

Proof-of-Union — алгоритм консенсуса в блокчейн системах базируемый на сотрудничестве узлов

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

В настоящее время существует огромное количество консенсус алгоритмов для блокчейн систем, каждый из которых имеет свои преимущества и недостатки присущие только ему, либо целому классу сходных алгоритмов. Так или иначе, в данное время лидирует две концепции консенсуса - основанные на майнинге (PoW) [1] и форжинге (PoS) [2], которые в свою очередь представляют конкурентную и последовательную модели генерации блоков непосредственно. Такое разделение либо предполагает крайне большое расходование материальных ресурсов, либо представляет собой необходимость комбинации с другими методами консенсуса [3], что приводит к сложности реализации, а следовательно и к проблеме доказуемой безопасности конечного решения [4, с.319]. Альтернативной моделью конкуренции и последовательности может являться алгоритм объединения узлов (PoU), решающий общую задачу сообща и главным преимуществом которого является простота реализации, сродни PoW и быстрота генерации блоков, эквивалентная PoS.

Читать далее

Градиентный поиск коэффициентов квадратической регрессии

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

Продолжаем скрещивать javascript с матаном для развития ракетных наук. На очереди - методы численной оптимизации

Читать далее

Решение задачи транспортной логистики с помощью IBM CPLEX Solver

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

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

Есть грузовые машины, которые изначально готовы стартовать в разное время из разных географических точек.

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

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

Поскольку я работала на тот момент с IBM Cplex Solver, то его и взяла в качестве ядра решателя. А как я решала эту задачу – всё под катом.

Читать далее

Инженерный подход к тестированию алгоритмов: исследовательский анализ рабочего процесса. Часть 1

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

Что из себя представляет тестирование и анализ алгоритмов? Давайте разберемся в этом на практике.

Читать далее

Большой обзор стратегий решения для Wordle и подобных игр

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

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

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

Кликай, если твой винрейт в Wordle <90%

Находим более качественные решения при помощи boost

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

Каждый C++-разработчик хотя бы слышал о Boost – это, пожалуй, наиболее распространенный набор внешних библиотек, используемый в мире C++. Истоки большинства стандартных библиотек восходят к Boost, поскольку многие разработчики Boost также входят в состав комитета по стандартам C++ и именно они определяют, в каком направлении будет развиваться язык – поэтому можете считать Boost своеобразным дорожным указателем. Возвращаясь к заголовку этой статьи - 'Boost' содержит много популярного функционала, вспомогательных библиотек, так, что, если вы столкнулись с какой-нибудь распространенной проблемой – первым делом обращайтесь к Boost, так как велики шансы, что там для вас найдется готовое решение.

Читать далее

Самый простой (и неожиданный) алгоритм сортировки?

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

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

1. Алгоритм


Большинству из нас хорошо известны такие простые алгоритмы сортировки, как сортировка пузырьком. По крайней мере, нам так кажется. Оказывались ли вы когда-нибудь в ситуации, когда вам нужно записать псевдокод сортировки пузырьком, и вы осознавали, что он не так прост, как кажется, и с первого раза правильно написать его не удаётся? Нужно внимательно следить за тем, чтобы индексы циклов начинались и заканчивались нужными значениями и не выходили за границы, а также правильно обрабатывать флаговые переменные. Разве не было бы здорово иметь простой алгоритм без всей этой возни? Ниже представлен такой алгоритм, сортирующий массив A из n элементов в неубывающем порядке. Для простоты доказательства массив начинается с 1, то есть имеет элементы A[1],..., A[n].

Алгоритм 1 ICan’tBelieveItCanSort(A[1..n]):

for i = 1 to n do
  for j = 1 to n do
    if A[i] < A[j] then
      swap A[i] and A[j]

Вот, собственно, и всё. Он просто обходит в цикле каждую пару значений (i, j) стандартным способом из двойного цикла for, выполняет сравнение и обмен значениями. Разве можно придумать что-то ещё более простое? Возможно первой реакцией увидевшего этот алгоритм будет что-то типа «это не может быть верно» или «знак неравенства направлен в другую сторону, да и индексы цикла указаны неверно». Но нет, он действительно правильно сортирует в возрастающем порядке.
Читать дальше →

Биоинформатика — это наука или всё же метод?

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

Про биоинформатику слышали многие. Кто-то знает больше, кто-то меньше. Мы постарались раскрыть вопрос этой, относительно новой, науки. Так сказать, дать общие представления читателю об основных вехах развития, методах и проблемах: решённых и существующих на нынешнее время.
Читать дальше →

Почему нельзя перевернуть строку с флагом-эмодзи?

Время на прочтение11 мин
Количество просмотров7.7K
Каким, по-вашему, будет результат выполнения следующего кода на Python?


Подобные вопросы заставляют меня сразу же открыть Python REPL и проверить код, потому что я думаю, что знаю правильный ответ, но не очень в нём уверен.

Вот как я рассуждал, когда впервые увидел этот вопрос:

  • Строкаflag содержит один символ.
  • [::-1] переворачивает строку flag.
  • Строка, обратная строке с одним символом, будет такой же, как и исходная.
  • Следовательно, reversed_flag должна быть равна "".
Читать дальше →

Как мы преуспели на международном конкурсе по выращиванию цифрового салата

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

Настоящее всё больше походит на то, что некогда представлялось фантастикой. Меня зовут Павел Дудукин, руководитель Data Science-направления в Центре развития финансовых технологий (ЦРФТ) Россельхозбанка, и в этой статье расскажу, как мы вышли в финал международного конкурса Autonomous Greenhouse Challenge и что нас ждет дальше. 

Объединённая команда Россельхозбанка (РСХБ) и Московского физико-технического института (МФТИ) приняла участие в хакатоне Autonomous Greenhouse Challenge в 2021 году. Там собрался народ, заинтересованный в автоматизации тепличного выращивания сельхозкультур. Наша команда заняла второе место, уступив лишь объединённой команде университетов из Китая. Мы опередили участников из Стэнфордского университета, MIT, международного концерна BASF, Технического университета Мюнхена и др.

Интересно, что смогла придумать наша команда? Тогда добро пожаловать в нашу теплицу.

Перейти в теплицу

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

Сравниваем кривые линии по форме

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

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

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

Читать далее

Ускоряем работу с графами в 20000 раз

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

Использовать стандартные библиотеки и общеизвестные реализации алгоритмов — признак хорошего тона. Вместо изобретения своего алгоритма шифрования данных или своей хэш функции лучше взять уже готовое решение. Избегаем ошибок и не изобретаем велосипед заново. Но что если готового решения нет? В наше время это что-то невероятное. Есть github.com, есть набор платных решений.Тем интереснее обсудить необычную проблему. В данной статье расскажу о своем опыте оптимизации работы с данными, которые по своей природе представляют граф. А точнее сеть — разновидность графов.

Читать далее

Простые числа это… просто?

Время на прочтение3 мин
Количество просмотров11K
Обнаружил очень нехитрый итерационный процесс, который плодит простые числа в большом количестве. За 15 итераций добрались до 1-го квинтиллиона, дальше считать стало сложно.



Код, графики, попытка анализа — все под катом.
Читать дальше →

Синхронные и асинхронные стектрейсы: опыт использования в Facebook

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

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

Читать далее

Магнитная аномалия: как предсказать продажи промо в ритейле

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

Привет, Хабр! Меня зовут Андрей Ткаченко, я руковожу направлением прогнозирования промо в «Магните». Наша команда запускает цикл статей о прогнозировании промо: мы приоткроем дверь в мир процессов, технологий и алгоритмов крупного российского ритейла, а также поделимся собственным опытом. 

Во вводной статье мы расскажем о разнице между промо и регулярными продажами, о команде и истории развития направления прогнозирования в «Магните», а также объясним, почему качественный прогноз промо важен для бизнеса. 

Читать далее

Как составить школьное расписание с помощью IBM CPLEX Solver

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

Составить расписание всегда былом делом непростым. Доверить эту задачу компьютеру решались не все, потому что задача NP-полная и алгоритмического решения «в лоб» за обозримое время не имеет. (объяснение)

Недавно ко мне в руки попал пакет математического решателя IBM CPLEX Solver и я попробовала сделать помощника для составления школьного расписания.

Читать далее

Векторные пространства и поиск ближайших соседей на production

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

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

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

Читать далее

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