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

Алгоритмы *

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

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

Как алгоритмы придают очертания нашей жизни

Время на прочтение1 мин
Количество просмотров9.5K
Мы сегодня немного переосмыслили роль современной математики — не только финансовой математики, а математики в общем. Её переход от того, что мы извлекаем и выводим из наблюдений за миром, к тому, что начинает формировать — мир вокруг нас и наш внутренний мир. Kevin Slavin «How algorithms shape our world» TED 2011

image
(на фото/картинке «Амплитудная модуляция» высот гор индексом doy jones 1980-2009, Michael Najjar)

Если алгоритмы выйдут из строя, как мы узнаем об этом?

— что общего между алгоритмами маскировки/локации самолета невидимки и алгоритмической торговлей?
— как хаос помогает Netflix рекомендовать фильмы?
— кто в ответе за "черный вторник" 2010,
— чем отличаются траектории умных пылесосов?
— как оптимально «упаковать» людей в лифты?
— откуда начинается интернет в Нью-Йорке?
— как алгоритмы продавали книгу за 23 млн долларов
— почему чтобы делать деньги из воздуха нужно лезть в воду?
— терраформирование на службе оптимизации алгоритмов

под катом видео с русскими субтитрами Kevin Slavin: How algorithms shape our world (3 000 000+ просмотров)
Читать дальше →

Алгоритмы обработки видео на процессоре TI DM368, продолжение…

Время на прочтение6 мин
Количество просмотров7.2K
В первой части статьи мы рассмотрели аппаратные блоки, составляющие видеопроцессор TI DM368, a сейчас переходим к обзору наших алгоритмов и коду.



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

Кодирование бинарных данных в строку с алфавитом произвольной длины (BaseN)

Время на прочтение5 мин
Количество просмотров19K
Всем хорошо известен алгоритм преобразования массива байт в строку base64. Существует большое количество разновидностей данного алгоритма с различными алфавитами, с хвостовыми символами и без. Есть модификации алгоритма, в котором длина алфавита равна другим степеням двойки, например 32, 16. Однако существуют и более интересные модификации, в которых длина алфавита не кратна степени двойки, такими являются алгоритмы base85, base91. Однако мне не попадался алгоритм, в котором алфавит мог бы быть произвольным, в том числе большей длины, чем 256. Задача показалась мне интересной, и я решил ее реализовать.

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

Цифровая стабилизация изображения со стационарных камер — корреляционный подход

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

Введение


Данную статью я решил написать после прочтения статьи «Массивно-параллельная стабилизация изображения», в которой описывается алгоритм для стабилизации изображения с поворотных камер. Дело в том, что в свое время мной был реализован алгоритм для стабилизации изображения со стационарных камер, который используется в IP-видеосервере MagicBox и некоторых других продуктах компании Синезис, в которой я работаю по настоящее время. Алгоритм получился достаточно удачным по своим скоростным характеристикам. В частности, в нем очень эффективно реализован алгоритм поиска смещения текущего изображения относительно фона. Эта эффективность позволила задействовать основные его элементы (конечно с некоторыми модификациями) для сопровождения объектов, а также для проверки их на неподвижность.

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

Рис. 1 Стабилизация изображения иногда очень полезна.

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

Что происходит в мозгах у нейронной сети и как им помочь

Время на прочтение26 мин
Количество просмотров42K
В последнее время на Хабре появилось множество статей о нейронных сетях. Из них очень интересными показались статьи о Перцептроне Розенблатта: Перцептрон Розенблатта — что забыто и придумано историей? и Какова роль первого «случайного» слоя в перцептроне Розенблатта. В них, как и во многих других очень много написано о том, что сети справляются с решением задач, и обобщают до некоторой степени свои знания. Но хотелось бы как-то визуализировать эти обобщения и процесс решения. Увидеть на практике, чему там научился перцептрон, и почувствовать, насколько успешно ему это удалось. Возможно, испытать горькую иронию относительно достижения человечества в области ИИ.
Языком у нас будет С#, только потому что я недавно решил его выучить. Я разобрал два наиболее простых примера: однослойный перцептрон Розенблатта, обучаемый коррекцией ошибки, и многослойный перцептрон Румельхарта, обучаемый методом обратного распространения ошибки. Для тех, кому, как и мне, стало интересно, чему они там на самом деле обучились, и насколько они на самом деле способны обобщать – добро пожаловать под кат.

ОСТОРОЖНО! Много картинок. Куски кода.
Читать дальше →

Автоматическая очистка фона изображений

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


Разработчики из компании Bonanza потратили более двух лет на создание программы для автоматического удаления фона с изображений. Задача оказалась гораздо сложнее, чем думали поначалу. Как оказалось, автоматическое удаление фона — одна из классических проблем компьютерного зрения, известная ещё с 80-х годов.

Как это часто бывает, если бы разработчики понимали всю сложность задачи, они бы вообще не брались за её решение. Но потом оказалось, что назад пути нет, и всё-таки им удалось добиться определённого успеха. 11 апреля они запустили конвертер Bonanza Background Burner, который неплохо очищает фон на произвольных фотографиях, при небольшой помощи или вовсе без неё. Доступ через API пока бесплатен, но в будущем владельцы сервиса что-нибудь придумают.
Читать дальше →

Создание сетей терминов на основе анализа текстов

Время на прочтение5 мин
Количество просмотров17K
По поручению известного автора Дмитрия Ландэ (например, «Поиск знаний в Internet», Интернетика. Навигация в сложных сетях: модели и алгоритмы) публикую одну из последних его работ.

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


Немного теории и алгоритм

Кризис и фондовый рынок: роль высокочастотного трейдинга

Время на прочтение3 мин
Количество просмотров11K
Прим. переводчика: Мы довольно много и часто говорим о высокочастостном трейдинге и связанных с этим технологиях, применительно к России. Однако, нам самим, при всем желании, довольно тяжело охватить все аспекты этой интереснейшей темы, особенно то, что происходит за рубежом. Поэтому, в дополнение к нашей секции переводов зарубежных материалов (большинство из них можно найти по ссылке), мы решили запустить в своем блоге на Хабре новую рубрику, в которой будем рассказывать об интересной тематической литературе. Мы можем соглашаться или не соглашаться с тезисами, изложенными в освещаемых нами книгах, но чтобы составить свое мнени — их нужно прочитать. Сегодня у нас первый выпуск, замечания и предложения по формату приветствуются в комментариях. Приятного чтения!

После выхода бестселлера «Большая игра на понижение. Тайные пружины финансовой катастрофы» (The Big Short), в которой Майкл Льюис (Michael Lewis) развенчивал мифы эпохи финансового кризиса, интересы автора переместились в сторону других вопросов. И все же, нет причин сомневаться в том, что Льюис продолжает размышлять о роли, которую играет кризис на современных рынках.

image

Последняя книга Льюиса, «Быстрые мальчики» (Flash Boys: A Wall Street Revolt), рассказывает историю Сергея Алейникова, программиста из Goldman Sachs, попавшего в тюрьму за кражу кода алгоритма высокочастотной торговли Goldman после увольнения из инвестиционного банка. История Алейникова помогает яснее представить «непрозрачный» мир высокочастотных торгов. В понедельник [31 марта 2014 – прим.перев.] книга поступит в продажу. Ее издателем выступило агентство W.W. Norton & Co.
Читать дальше →

SSAO на OpenGL ES 3.0

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

Однажды, разглядывая очередную демку с эффектом, возник вопрос: а можно ли сделать SSAO на мобильном девайсе так, чтобы и выглядело хорошо и не тормозило?
В качестве устройства был взят Galaxy Note 3 n9000 (mali T62), цель — фпс не ниже 30, а качество должно быть как на картинке выше.
Реализация под катом

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

Время на прочтение6 мин
Количество просмотров36K
Эффективность и конкурентоспособность современных летательных аппаратов (ЛА) во многом определяется совершенством гироскопических датчиков первичной информации, на базе которых строятся навигационные системы и системы управления ЛА.
В настоящее время существует большое многообразие различных типов гироскопических датчиков, правильное применение которых обеспечивает необходимые эксплуатационные качества ЛА.
Каждому типу гироскопических датчиков можно найти оптимальную нишу применения. При выборе гироскопического датчика учитываются следующие его основные характеристики: точность, надежность работы, энергопотребление, габаритные размеры и стоимость. В зависимости от требований, предъявляемых к системам управления и навигационным системам, выбирается соответствующий тип гироскопического датчика.
Тем не менее, из всего многообразия датчиков можно выделить наиболее перспективные по указанным выше характеристикам. Это лазерные гироскопы (ЛГ), волоконно-оптические (ВОГ), волновые твердотельные (ВТГ) и микромеханические гироскопы (ММГ).
Основным их преимуществом является повышенная надежность работы из-за отсутствия быстро вращающихся роторов и карданных подвесов, минимальное потребление электроэнергии за счет реализации основных функциональных узлов на базе сервисной микроэлектроники и возможность повышения точностных характеристик путем математической обработки первичных сигналов датчиков в микропроцессорах.
Читать дальше →

Конечные алгебры, геометрии и коды. Лекция Григория Кабатянского в Яндексе

Время на прочтение3 мин
Количество просмотров23K
Хотя почти всё в окружающем нас мире конечно, в математике до недавнего времени доминировали бесконечные объекты. Серьезный интерес к конечной математике возник всего полвека назад — с появлением первых компьютеров. И бесконечная (непрерывная) математика остаётся для нас гораздо привычнее и понятнее.

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



Для начала подумаем, как рассадить на n–мерном кубе максимальное число Sp(n) пауков так, чтобы они не дрались. У паука n лап — по одной на каждое ребро, при этом длина лапы равна длине ребра куба. Драка начинается, если два паука дотянулись до одной и той же вершины. Можем ли мы добиться совершенного расположения: чтобы на каждой вершине было по пауку?
Конспект лекции

Введение в Акторы на основе Java/GPars, Часть I

Время на прочтение15 мин
Количество просмотров13K
Кратко рассматривается API библиотеки GPars и решение многопоточной задачи средней сложности, результаты которой могут быть полезны в «народном хозяйстве».

Данная статья написана в ходе исследования различных библиотек акторов, доступных Java-программисту, в процессе подготовки к чтению курса «Multicore programming in Java».

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Это первая статья из цикла статей цель которых сравнить API, быстродействие и реализацию акторов Akka с реализациями в других библиотеках на некоторой модельной задаче. Данная статья предлагает такую задачу и решение на GPars.

GPars — библиотека написанная для Clojure с широкой поддержкой различных подходов к параллельным вычислениям.
Плюсы GPars
  • Исходный код написан на Java (в отличии от Akka, написанной на Scala). Всегда интересно посмотреть «что под капотом» на «родном» языке программирования
  • GPars представляет собой целый «зоопарк» подходов (Actor, Agent, STM, CSP, Dataflow)
  • GPars использует классы из runtime-библиотеки Clojure, написанной на Java. Интересно покопаться

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

Signed Distance Field или как сделать из растра вектор

Время на прочтение12 мин
Количество просмотров61K
Речь сегодня пойдёт о генерации изображений с картой расстояний (Signed Distance Field). Данный вид изображений примечателен тем, что фактически позволяет получить «векторную» графику на видеоускорителе, причём даром. Одной из первых данный метод растеризации предложила компания Valve в игре Team Fortress 2 для масштабируемых декалей в 2007 году, но до сих пор он не пользуется особой популярностью, хотя позволяет рендерить прекрасного качества шрифты, используя текстуру всего 256х256 точек. Данный метод прекрасно подходит для современных экранов высокой чёткости и позволяет серьёзно сэкономить на текстурах в играх, он не требователен к железу и прекрасно работает на смартфонах.



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

Как же создавать такие изображения? Очень просто, ImageMagick позволяет сделать это одной командой:

convert in.png -filter Jinc -resize 400% -threshold 30% \( +clone -negate -morphology Distance Euclidean -level 50%,-50% \) -morphology Distance Euclidean -compose Plus -composite -level 45%,55% -resize 25% out.png

На этом можно было бы поставить точку, но так полноценного топика не получится. Что ж, под катом — описание быстрого алгоритма расчёта SDF, пример на C++ и немного шейдеров для OpenGL.
Читать дальше →

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

«Что такое доказательство?»: взгляд из теоретической информатики

Время на прочтение12 мин
Количество просмотров23K
Теоретическая информатика — одно из направлений обучения на кафедре Математических и информационные технологий Академического университета. Нас часто спрашивают, чем занимается теоретическая информатика. Теоретическая информатика — активно развивающееся научное направление, включающее в себя как фундаментальные области: алгоритмы, сложность вычислений, криптография, теория информации, теория кодирования, алгоритмическая теория игр, так и более прикладные: искусственный интеллект, машинное обучение, семантика языков программирования, верификация, автоматическое доказательство теорем и многое другое. Эту статью мы посвятим обзору лишь небольшого сюжета, а именно расскажем о необычных подходах к понятию доказательства, которые рассматривает теоретическая информатика.



Чтобы объяснить, о какого рода доказательствах пойдет речь, рассмотрим пример: есть компьютерная программа, авторы которой утверждают, что программа делает что-то определенное (конкретные примеры будут чуть позже). Программу можно запустить и получить ответ. А как можно удостовериться, что программа делает то, что должна делать? Хорошо бы, если кроме ответа программа выдавала бы доказательство того, что этот ответ правильный.

Рассмотрим более конкретный пример: мы хотим иметь программу, которая в двудольном графе находит паросочетание максимального размера вместе с доказательством его максимальности.



Напомним, что граф называется двудольным, если его вершины можно покрасить в два цвета так, что ребра графа соединяют вершины разных цветов. Паросочетанием в графе называется такое множество ребер, что никакие два из них не имеют общего конца. Множество вершин графа называется покрывающим, если каждое ребро графа имеет как минимум один конец в этом множестве. Теорема Кенига гласит, что в двудольном графе размер максимального паросочетания совпадает с размером минимального покрывающего множества. Таким образом, чтобы доказать, что паросочетание является максимальным, можно предъявить, покрывающее множество, размер которого совпадает с размером данного паросочетания. Действительно, это покрывающее множество будет минимальным, поскольку каждое покрывающее множество обязано покрыть хотя бы один конец каждого ребра этого паросочетания. Например, в графе на рисунке паросочетание (M1, G3), (M2, G2), (M4,G1) будет максимальным, поскольку есть покрывающее множество размера 3, которое состоит из G2, G3 и M4. Отметим, что проверить такое доказательство гораздо проще, чем вычислять максимальное паросочетание: достаточно проверить, что размер паросочетания совпадает с размером покрывающего множества и проверить, что все ребра покрыты.

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



Как можно доказать правильность результата? Если система совместна, то доказательством совместности может стать решение этой системы (нетрудно доказать, что если у такой системы есть решение, то есть и рациональное решение, т.е. его можно записать). А как доказать, что система несовместна? Оказывается, что это сделать можно с помощью леммы Фаркаша, которая утверждает, что если система нестрогих линейных неравенств несовместна, то можно сложить эти неравенства с неотрицательными коэффициентами и получить противоречивое неравенство 0≥1. Например, система на рисунке несовместна, и если сложить первое уравнение с коэффициентом 1, второе с коэффициентом 2, а третье с коэффициентом 1, то получится 0≥1. Доказательством несовместности будет как раз набор неотрицательных коэффициентов.

В этой статье мы поговорим о том, нужны ли доказательства, или проверка доказательства всегда не проще, чем самостоятельное решение задачи. (В примере про максимальное паросочетание мы не доказали, что не существует алгоритма, решающего задачу за то же время, сколько занимает проверка доказательства.) Если мы не ограничиваем размер доказательства, то окажется, что доказательства нужны, а если будем требовать, чтобы доказательства были короткими, то вопрос о нужности доказательств эквивалентен важнейшему открытому вопросу о равенстве классов P и NP. Потом мы поговорим об интерактивных доказательствах (доказательства в диалоге). Обсудим криптографические доказательства, которые не разглашают лишнюю информацию, кроме верности доказываемого утверждения. И закончим обсуждением вероятностно проверяемых доказательств и знаменитой PCP-теоремы, которая используется для доказательства трудности приближения оптимизационных задач.

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

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

Алгоритмы обработки видео на процессоре TI DM368

Время на прочтение5 мин
Количество просмотров17K
Начинаем серию статей на Хабре, посвященную видеопроцессорам TI DM368, DM369 и разработке алгоритмов на их основе.
Pассмотрим основные блоки обработки видеопотока от сенсора до сетевого “вещателя”, более подробно остановимся на алгоритмах автоэкспозиции, баланса белого и автофокуса (3A), гамма коррекции, а так же расширенном динамическом диапазоне HDR или WDR, и, наконец, детекторе движения и аналитике на его основе.
Примеры картинок будут представлены для сенсора SONY IMX136, так же алгоритм проверен на сенсорах Aptina MT9P006, AR0331, MT9M034.
До После

Внимание под катом одни картинки

Diff-алгоритм React

Время на прочтение5 мин
Количество просмотров29K
React — это JavaScript библиотека для создания пользовательских интерфейсов от Facebook. Она была разработана «с нуля», с упором на производительность. В этой статье я расскажу вам о diff-алгоритме и механизме рендеринга, который использует React, что позволит вам оптимизировать ваши приложения.

Diff Алгоритм


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

var MyComponent = React.createClass({
  render: function() {
    if (this.props.first) {
      return <div className="first"><span>A Span</span></div>;
    } else {
      return <div className="second"><p>A Paragraph</p></div>;
    }
  }
});

В любой момент времени вы можете описать, как будет выглядеть ваш UI. Важно понимать, что результат рендеринга не является фактическим DOM деревом. Это всего лишь легковесные JS объекты, которые мы называем «виртуальный DOM».
Читать дальше →

Конкурс разработчиков «Родная речь» — внимание, полуфинал!

Время на прочтение1 мин
Количество просмотров1.5K
Уважаемые участники конкурса!

Полуфинальная выборка доступна для скачивания.

Обращаем ваше внимание, что пароль к выборке будет объявлен на сайте www.m2ies.com в день старта полуфинала 1.04.2014 в 14-00 по московскому времени.

Результаты работы вашей системы можно будет присылать до 14-00 2.04.2014.

Подробности — в конкурсной документации.

Удачи!

image

Вычисление дня недели в уме

Время на прочтение4 мин
Количество просмотров110K
imageСуществует множество способов прокачать мозг. Задачи «n-back» или мобильные приложения для тренировки навыка быстрого счета в уме. Но эти задачи оторваны от текущей реальности, а хотелось бы прокачать мозг практичным навыком.

Зачем? Ведь можно быстро посчитать на гаджете. Увы, совсем не быстро, т.к. потребуется время на поиски и активацию гаджета, поиск приложения, ввод даты, осознание полученного результата. А еще можно друзей/подруг порадовать своими внезапно появившимися экстраординарными способностями. Кстати, друзья быстро осознают удобство использования вечного календаря с голосовым интерфейсом.

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

Атаки по времени — сказка или реальная угроза?

Время на прочтение4 мин
Количество просмотров34K
Первую статью на хабр хотел написать совершенно о другом, но в один прекрасный день коллега по работе решил заморочиться и сделать защиту от «Атаки по времени» (Timing attack). Не долго разбираясь в различных материалах на эту тему, Я загорелся и решил написать свой велосипед и покататься на нем по лаборатории поэкспериментировать.



Результат этого небольшого эксперимента под катом.
Читать дальше →

Программа курса «Multicore programming in Java»

Время на прочтение3 мин
Количество просмотров53K
Добрый день.
Меня зовут Головач Иван, я руковожу небольшой образовательной компанией. Мы занимаемся онлайн курсами программирования.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Хотелось бы услышать мнение сообщества по поводу
  1. программы курса «Multicore programming in Java»
  2. литературы к курсу

Кратко о курсе: стартует 28 апреля (в связи с майскими праздниками старт перенесен на 15 мая), ведется в режиме вебинаров дважды в неделю в 19.00-22.00, состоит из 16 лекций по 2.5 часа (=40 лекционных часов), к каждой лекции дается расширенное задание, рассчитан на Java Junior/Middle.
Читать дальше →

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