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

Алгоритмы *

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

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

Оптический спидометр

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

Измерение линейной скорости транспортных средств, оторванных от опоры и движущихся вдали от навигационных систем, является непростой задачей. Было бы здорово иметь прибор для измерения скорости, который может работать максимально независимо от места расположения и достаточно надежно. Можно ли создать такой спидометр, для работы которого было бы достаточно только светоносной среды и энергии? Похоже, что да. Для реализации этой идеи можно использовать электромагнитные волны (свет), и тот факт, что свет может увлекаться движущейся прозрачной средой.

Читать далее

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

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

Как мы уже говорили в первой части, для демонстрации анализа алгоритма в более широком контексте примером послужит расстояние редактирования Левенштейна. Расстояние редактирования также иногда называют поиском похожих строк (или нечетким поиском). Это метрика редактирований (изменений символов), необходимых для преобразования одной строки в другую (целевую) строку. Из самых известных применений алгоритма можно выделить предоставление предложений по правильному написанию, нечеткий поиск по строке поискового запроса и сравнение последовательностей ДНК/РНК.

По сравнению с бинарным поиском, который построен вокруг одной операции поиска, классический алгоритм Левенштейна поддерживает три операции: вставить/insert, удалить/delete и заменить/substitute (символ в строке). Расстояние редактирования, которое он выдает, является минимальным количеством необходимых операций.

Читать далее

Стеганографические эксперименты с видеофайлами и Youtube

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

В один из вечеров у меня появились наукообразные вопросы. Можно ли «растворить» какой-либо видеофайл, разместив его в теле другого видеофайла так, чтобы при этом первый видеофайл можно было относительно легко и беспрепятственно достать обратно? Кроме того, чтобы не углубляться в математику проблемы, можно ли это желание реализовать своими силами за один вечер, предположим на языке Python без использования каких-либо сторонних стеганографических библиотек и иных специальных инструментов?

Узнать, как я ставил эксперименты

Что считать счастьем покупателя?

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

По запросу [форма] мы должны угадать, что именно нужно покупателю: выпечка, наращивание ногтей, косплеить медсестру или калибратор кубов бетона. Задача — быстро понять, кто перед нами и что сделает человека счастливым.

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

Человек может:

  • Формулировать требования к покупке по мере сравнения вариантов.

    Пример с соковыжималкой
    Предположим, он ищет соковыжималку, но ещё не знает, какие они бывают. По мере изучения товаров он примерно начинает понимать, что хочет. На старте у него нет ни фиксированного бюджета, ни требований, только мечта. Дальше нужно сопоставить мечту с конкретной карточкой товара. С точки зрения метрики покупки, пользователь будет довольно долго бесцельно бродить в начале — но мы понимаем, что эта часть была очень важна, там он изучал предложение и понимал, как устроен мир.
  • Приходить с примерным бюджетом и выбирать что-то под него, например, при поиске подарка. В этой ситуации у пользователя даже нет мечты, он ходит по категориям и ищет что-то, что его «зацепит».
  • Более-менее точно понимать, что хочет купить (часто вплоть до модели товара), но искать лучшее предложение.
  • Знать модель товара и проверять, насколько честна цена на неё, насколько хороши отзывы и так далее.

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

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

Как мы подняли сквозную конверсию с 20 до 33% с помощью алгоритмов AI?

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

История Bash Today - сервиса бронирования площадок для мероприятий в Москве и Санкт-Петербурге , основанного в 2015 г.

Серьёзная проблема для сервиса бронирований — прямые платежи от клиентов площадкам по заявкам, пришедшим через маркетплейс. Из-за этого компания лишается своей комиссии. Стандартные инструменты выявления подобных схем, такие как опрос пользователей, сбор обратной связи после мероприятий и так далее, имеют ограниченную эффективность, так как осуществляются случайным образом. Поэтому нашей R&D-команде была поставлена задача повысить эффективность проверок с помощью алгоритмов AI.

Читать далее

Как раскрасить вершины графа

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

В этой небольшой заметке я хочу показать, как с помощью алгебры можно решать классическую задачу о раскраске вершин графа. Об этом сюжете я узнал из книги W.W. Adams, P. Loustanau. An Introduction to Groebner Basis (параграф 2.7).

Раскрасить граф

День Святого Валентина: Как найти девушку при хайтек-эмиграции в «Силиконовый Лес» в Портленд, Орегон?

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

Silicon Forest в штате Орегон не так известен как Silicon Valley в Калифорнии, но он несомненно входит в топ-5 хайтек-мест в США. Просто факт из Википедии: хотя штаб-квартира Интела остается в Калифорнии, но еще в 1990-х компания начала переносить самую продвинутую разработку микроархитектуры в Орегон. Как очевидец, могу сообщить банальную причину: в начале интернет-бума цены на дома в Долине выросли вдвое, а потом втрое, и агломерация вокруг Портланда стала ближайшим местом бегства из Калифорнии для инженеров, которые хотели купить дом, но не хотели переучиваться на джаву и становиться дотком-миллионерами.

Но "Кремниевым Лесом" окресности Портленда назвали еще до описываемых событий. После второй мировой войны там выросла компания-производитель осциллографов Tektronix, а в начале 1980-х годов - производитель софтвера для проектировщиков микросхем Mentor Graphics (сейчас Siemens EDA). Чуть позже в Лесу возник производитель ПЛИС Lattice, а потом подтянулись японские компании: Fujitsu, Epson, NEC. Наконец, там сделали отделения IBM и HP, и "Кремниевый Лес" состоялся.

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

Лайфхаки

Два вида последовательного перебора пикселей

Время на прочтение4 мин
Количество просмотров2.9K
Пространство плоскости часто делят на квадраты. Или, наоборот, квадратные вещи собирают вместе. Наверняка у кого-нибудь уже возникала идея собрать гирлянду из квадратных светильников и с помощью неё заполнить светом фигуру выбранной формы, с квадратными элементами детализации, как пикселями. Такой квадратный светильник может быть устроен так, что с предыдущим и следующим светильником соединён углами одного ребра.



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

Логика построения такая: расстановку в виде квадрата 2 на 2, нужно представить как один большой светильник и составить из него светильник ещё больше. Именно поэтому, если у вас на каком-то этапе получается квадрат, то его размер кратен степени двойки.
Читать дальше →

Дикие технологии, или как ИИ считал сусликов да рыбов Кроноцкого заповедника

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

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

Детали и крутые фото из заповедников – под катом.

В посте покажем несколько кейсов команд – под наше увеличительное стекло попали два решения на основе нейронных сетей (одно отлавливает медведей на фотоловушках, а другое подсчитывает рыб) и таймлайн новостей Камчатки за последние 20 лет (расскажем, зачем вообще такое понадобилось). 

Читать далее

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

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

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

Читать далее

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

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

В этой публикации я представляю поверхностный обзор статьи от исследователей 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.3K

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

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