Обновить
276.76

Алгоритмы *

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

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

Что такое IPO и зачем это нужно

Время на прочтение5 мин
Охват и читатели239K
image

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

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

Время на прочтение9 мин
Охват и читатели10K

Введение


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

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

Отметим, что приводимые подходы применимы не только к текстам, а вообще к любым объектам, которые можно представить в виде символьных последовательностей, например, какие-нибудь макромолекулы (ДНК, РНК, протеины) из генетики. Всего мы рассмотрим 4 метода:

  1. Признаковое описание.
  2. Попарное наложение (выравнивание) текстов.
  3. Формирование профиля и скрытой марковской модели.
  4. Представление фрагментами.

Итак, приступим.
Читать дальше →

Вероятностные модели: сэмплирование

Время на прочтение10 мин
Охват и читатели37K
И снова здравствуйте! Сегодня я продолжаю серию статей в блоге Surfingbird, посвящённую разным методам рекомендаций, а также иногда и просто разного рода вероятностным моделям. Давным-давно, кажется, в прошлую пятницу летом прошлого года, я написал небольшой цикл о графических вероятностных моделях: первая часть вводила основы графических вероятностных моделей, во второй части было несколько примеров, часть 3 рассказывала об алгоритме передачи сообщений, а в четвёртой части мы кратко поговорили о вариационных приближениях. Цикл заканчивался обещанием поговорить о сэмплировании — ну что ж, не прошло и года. Вообще говоря, в этом мини-цикле я поведу речь более предметно о модели LDA и о том, как она помогает нам делать рекомендации текстового контента. Но сегодня начну с того, что выполню давнее обещание и расскажу о сэмплировании в вероятностных моделях — одном из основных методов приближённого вывода.

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

Решение задачи линейной регрессии с помощью быстрого преобразования Хафа

Время на прочтение7 мин
Охват и читатели17K

Введение


Друзья, рассмотрим нынче же задачу линейной регрессии в присутствии выбросового (некоррелированного с сигналом) шума. Эта задача часто возникает при обработке изображений (напр., при цветовой сегментации [1]), в том числе — акустических [2]. В случаях, когда координаты случайных величин можно грубо дискретизовать, а размерность задачи низка (2-3), кроме стандартных методов робастной регрессии можно воспользоваться быстрым преобразованием Хафа (БПХ) [3]. Попробуем сравнить этот последний метод по точности и устойчивости с «классическими».

Использование БПХ для линейной регрессии


Задача линейной регрессии на плоскости состоит в восстановлении линейной зависимости между двумя переменными, заданными в виде множества пар (x, y). Задавшись некоторым уровнем дискретизации координат, можно отобразить это множество на однобитном или целочисленном изображении (в первом случае мы отмечаем только факт наличия в исходных данных точки с примерно такими координатами, во втором — еще и их число). Фактически, речь идет о двумерной гистограмме исходных данных. Таким образом, неформально задача может быть сведена к поиску на изображении прямой, которая наилучшим образом описывает изображенное распределение точек.В обработке изображений в подобных случаях используется преобразование Хафа.

Преобразование Хафа является дискретным аналогом преобразования Радона и ставит в соответствие каждой прямой на изображении сумму яркостей пикселей вдоль нее (то есть одновременно вычисляет всевозможные суммы вдоль дискретных прямых). Можно ввести разумную дискретизацию прямых по сдвигам и наклонам так, чтобы параллельные дискретные прямые плотно упаковывали плоскость, а выходящие из одной точки на одном крае изображения прямые расходились по наклону на противоположном крае на целое число пикселей. Тогда таких дискретных прямых на квадрате n2 будет примерно 4 * n2. Для этой дискретизации существует алгоритм быстрого вычисления преобразования Хафа с ассимптотикой O(n2 * log n). Этот алгоритм является близким аналогом алгоритма быстрого преобразования Фурье, хорошо параллелизуется и не требует никаких операций, кроме сложения. В работе [3] можно прочитать об этом чуть больше, кроме того, там объясняется, почему преобразование Хафа от сглаженного гауссовским фильтром изображения вообще можно применять в задаче линейной регресии. Здесь же мы продемонстрируем устойчивость этого метода.
Читать дальше →

Рендеринг теней при помощи алгоритма Parallel-Split Shadow Mapping

Время на прочтение18 мин
Охват и читатели34K
imageПривет, Хабр! Мой предыдущий пост, посвященный программированию графики, был благодушно воспринят сообществом, и я отважился ещё на один. Сегодня я расскажу об алгоритме рендеринга теней Parallel-Split Shadow Mapping (PSSM), с которым я впервые столкнулся, когда возникла рабочая необходимость отображать тени на большом расстоянии от игрока. Тогда я был ограничен набором возможностей Direct3D 10, сейчас я реализовал алгоритм на Direct3D 11 и OpenGL 4.3. Подробнее алгоритм PSSM описывается в GPU Gems 3 как с математической точки зрения, так и с точки зрения реализации на Direct3D 9 и 10. За подробностями прошу под кат.
Читать дальше →

Реализация схемы разделения секретной визуальной информации в MATLAB

Время на прочтение7 мин
Охват и читатели7.3K
Введение

Всем доброго времени суток!

Уверен, что многие из вас уже интересовались методами разделения секретной визуальной информации. Если это так, то вы наверняка знакомы с работой Мони Наора и Ади Шамира, посвященной визуальной криптографии, а также с постом от 19 апреля 2013 года Схема разделения секретной визуальной информации . Я изучил предложенный в этой статье алгоритм и код функции, написанный на MATLAB, и пришел к выводу, что он написан не рационально: его можно записать значительно короче, а также повысить эффективность его работы. Как это сделать, я опишу ниже. Также рассмотрю как организовать.
Читать дальше →

Инструментарий фондового рынка: что такое опционы, и как они работают

Время на прочтение6 мин
Охват и читатели101K
image

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

Quaternion Encryption Scheme (QES) на FPGA, XeonPhi, GPU

Время на прочтение3 мин
Охват и читатели6.7K


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

Шифрование данных с помощью кватернионов выполнялось на FPGA DE5-NET, XeonPhi 7120P, GPU Tesla k20.
У всех троих приблизительно одинаковая пиковая производительность, но имеется разница в энергопотреблении.

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

Для выяснения криптостойкости алгоритма QES прошу использовать поисковики для подробного описания алгоритма, одним из авторов которого является Nagase T., а одна из статей, например, Secure signals transmission based on quaternion encryption scheme.

Каким же образом можно зашифровать и расшифровать данные с помощью кватернионов? Довольно просто!
Для начала возьмем кватернион: q = w + x*i + y*j + z*k и составим на его основе матрицу поворота, которую назовем, например P(q).
Прим. картинка ниже из википедии и матрица там названа Q.


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

Решение проблемы сортировки деревьев с помощью бинарного Materialized Path

Время на прочтение2 мин
Охват и читатели13K
Столкнулся с проблемой реализации древовидных комментариев на одном проекте, в этой заметке выкладываю своё решение.

Описание задачи


  • Хранение иерархических данных (древовидных комментариев) в реляционной БД MySQL
  • Простое добавление узлов/ветвей
  • Выборка всего дерева одним запросом, с отсортированными в нужном порядке ветвями

В принципе, задача классическая, и сначала я её решил с помощью объединения Adjacency List и Materialized Path. Другими словами, в таблице добавлены колонки

id INT(11)
parentid INT(11)
mpath VARCHAR(255)

В mpath хранился полный путь ветки в дереве, например /1/3/4/5/8/9, где через знак "/" перечислялись ID комментария.

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

SELECT *
FROM messages
WHERE postid=$postid
ORDER BY mpath ASC

Проблема возникла при росте числа комментариев.
Читать дальше →

Один алгоритм комбинаторной генерации

Время на прочтение11 мин
Охват и читатели16K
Комбинаторика в старших классах школы, как правило, ограничивается текстовыми задачами, в которых нужно применить одну из трёх известных формул — для числа сочетаний, перестановок или размещений. В институтских курсах по дискретной математике рассказывают и о более сложных комбинаторных объектах — скобочных последовательностях, деревьях, графах… При этом, как правило, ставят задачу вычислить количество объектов данного типа для некоторого параметра n, например количество деревьев на n вершинах. Узнав количество объектов для фиксированного n, можно задаться и более сложным вопросом: как все эти объекты за разумное время предъявить? Алгоритмы, решающие подобного рода задачи, называются алгоритмами комбинаторной генерации. Таким алгоритмам, например, посвящена первая глава четвёртого тома «Искусства программирования» Дональда Кнута. Кнут очень подробно рассматривает алгоритмы генерации всех кортежей, разбиений числа, деревьев и других структур. Придумать какой-нибудь алгоритм, работающий умеренно быстро, для каждой из этих задач несложно, но с дальнейшей оптимизацией могут возникнуть серьёзные проблемы.

В процессе написания магистерской диссертации, защищённой в Академическом университете, мне потребовалось изучить и применить один из алгоритмов комбинаторной генерации, подходящий для особого класса задач. Это генерация структур, на которых дополнительно введено некоторое отношение эквивалентности. Чтобы было понятно, о чём идёт речь, я приведу простой пример. Давайте попробуем сгенерировать все триангуляции шестиугольника. Получится что-нибудь такое:



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


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

Математическая модель для прогнозирования пробок. Семинар в Яндексе

Время на прочтение1 мин
Охват и читатели17K
Для качественного построения маршрутов в городских условиях нужно как можно более точно оценивать время движения по маршруту. При этом желательно учитывать не только текущую ситуацию, но и то, как она может измениться. Пару лет назад мы уже публиковали пост о прогнозировании ситуации на дорогах. Текст позволяет составить общее представление об этой теме. Более подробно вопрос прогнозирования пробок рассмотрел в своем докладе Михаил Хохлов. Он рассказал о различных математических подходах к прогнозированию дорожных затруднений на ближайшее время, в том числе и о методе линейной авторегрессии, который используется в Яндекс.Пробках. С тех пор многое изменилось, однако основные проблемы и методы их решения остались прежними и заслуживают внимания.


Слайды к докладу

Пороговый декодер

Время на прочтение4 мин
Охват и читатели16K
Друзья, всем привет!

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

Разделить число на заданное количество кубиков

Время на прочтение1 мин
Охват и читатели6.3K
Столкнулся тут с задачкой, стали интересны пути решения, отличные от моего, и, желательно, на другом языке.

Условие достаточно простое. Есть случайное число и заданное количество игровых кубиков. Значение каждого кубика может быть от 1 до 6. Нужно разбить число таким образом, чтобы на выходе получился массив значений для каждого кубика. Причём при каждом вызове значения этих кубиков должны быть случайными.
Например:
Число 18 и 4 кубика. Ответ: [6,3,5,4];

Моё решение под катом и спойлером…
Читать дальше →

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

Распознавание речи для чайников

Время на прочтение9 мин
Охват и читатели171K

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

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

Суперкомпьютер, прошедший тест Тьюринга, оказался блефом

Время на прочтение1 мин
Охват и читатели117K

Несколько дней назад на хабре был топик, в котором сообщалось о том, российская компьютерная программа впервые в истории смогла пройти тест Тьюринга:
Программе, разработанной Владимиром Веселовым из России и украинцем Евгением Демченко удалось вчера убедить 33% судей в том, что она на самом деле — 13-летний одессит Евгений Густман, любитель конфет и гамбургеров и сын врача-гинеколога.

Понять то, что это блеф, не имеющий под собой никаких оснований, было достаточно просто.
Читать дальше →

Распознавание автомобильных номеров в деталях

Время на прочтение9 мин
Охват и читатели157K
image
Настало время подробно рассказать, как работает наша реализация алгоритма распознавания номеров: что оказалось удачным решением, что работало весьма скверно. И просто отчитаться перед Хабра-пользователями — ведь вы с помощью Android приложения Recognitor помогли нам набрать приличного размера базу снимков номеров, снятых совершенно непредвзято, без объяснения как снимать, а как нет. А база снимков при разработке алгоритмов распознавания самое важное!
Читать дальше →

Алгоритм поиска наименьшего по мощности покрытия конечного множества его подмножествами

Время на прочтение3 мин
Охват и читатели17K
Разбирая старые бумаги наткнулся на изрядно потрёпанную тетрадь, в которой обнаружил наброски алгоритма поиска покрытия. Автор алгоритма Виктор Анатольевич Щербанов — мой учитель, под руководством которого я работал в девяностые годы прошлого столетия. Моё скромное участие в основном заключалось в том, что я предлагал в большинстве случаев неверные (а порой и просто бредовые) варианты. Что в общем-то не помешало Шефу (так мы его называли между собой) таки довести работу над алгоритмом до логического завершения. Где-то в двухтысячных годах алгоритм был опубликован в одном из институтских изданий Томска. Но думаю, что не лишним будет вспомнить его ещё раз. Собственно в память о Шефе я и решил написать этот пост. Может быть алгоритм покажется кому-то интересным или подтолкнёт на какие-то новые идеи по реализации алгоритма.
Читать дальше →

Космические циклы в радиоактивном распаде

Время на прочтение3 мин
Охват и читатели12K
Добрый день Хабр. Пишу сюда, потому что некоторым может быть интересен метод Dynamic Time Warping
не только в распозновании речи и временных рядов, но как применение и в сугубо научных методах.

В далеких 50-х годах 20 века радиолог Симон Шноль из Пущинского Института теоретической и экспериментальной биофизики и МГУ в попытках уменьшить разброс результатов при возможно более точном выполнении измерений скорости гидролиза АТФ катализируемой белками актомиозинового коплекса натолкнулся на необъяснимою сходность гистограмм (графики плотности вероятности) одновременных, но находящихся в разных точках лаборатории измерений.

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

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

Тест Тьюринга пройден (на детском уровне сложности)

Время на прочтение2 мин
Охват и читатели214K
Сделала это программа, которая убедила людей, что является 13-летним мальчиком из украинской Одессы.



Согласно условиям теста Тьюринга, он считается пройденным, если программе удастся убедить в своей человечности хотя бы 30% судей в процессе 5-минутного текстового общения.
Читать дальше →

Шифрование ГОСТ 28147-89 в Acronis Backup 11.5

Время на прочтение4 мин
Охват и читатели18K
Привет Хабр, сегодня мы расскажем про алгоритм шифрования данных в резервных копиях и особенности его применения в линейке продуктов Acronis. Как следует из заголовка, речь пойдет про стандарт ГОСТ 28147-89 (далее по тексту просто “стандарт ”).


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

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