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

Алгоритмы *

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

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

Так ли нужно избавляться от ветвлений? — На примере sign, abs, min и max

Время на прочтение6 мин
Количество просмотров16K
Я бы хотел предложить сообществу поучаствовать в пробном эксперименте. Суть его состоит в том, чтобы прогнать на своём компьютере программу, написанную на C++, и поделиться результатом измерения времени, которое она выдаёт, сравнивая скорость работы функций sign(x), abs(x), min(a,b) и max(a,b) в исполнении с ветвлением и без него. В статье я объясню свою мотивацию, покажу сами функции, а в конце предложу условия участия в эксперименте и его (увы) ограничения.
Читать дальше →

Динамическая онтология. Как инженеры Palantir объясняют это ЦРУ, АНБ и военным

Время на прочтение7 мин
Количество просмотров19K
Компания Palantir является четвертой по крутости частной компанией Кремниевой долины (после Uber, Xiaomi и Airbnb). Пока Palantir собирает информацию про все на свете, мы собираем информацию про него.



ИТишники додумались как эффективно «монетизировать математику и алгоритмы» (Сегалович, Бакунов), PayPal Mafia додумалась как монетизировать гаджеты Феанора философию (капитализация Palantir — 20 миллиардов долларов).

В десятиминутной лекции сотрудник компании Palantir расскажет про центральную концепцию их системы — динамическую онтологию.


0:00 Привет, я Ашер Синенски, инженер по развертыванию технологий Palantir. Я поговорю о динамической онтологии.
0:08 Очевидно, сейчас, эти два слова выглядят для вас довольно туманно, надеюсь, что к концу разговора вы поймете, какой смысл мы в них вкладываем.
0:17 Перед тем как переходить к делу, поясню: у многих людей проблемы со словом онтология. Что мы подразумеваем под этим словом?
0:24 Если вы посмотрите на корни этого слова, то оно образовано от греческих «онтос» (бытие) и «логия» (изучение чего-либо). По сути, онтология – это категоризация мира.
0:34 Есть много терминов, которые люди используют для описания этого: таксономия, схематизатор модели данных. Но мы используем это, в более широком смысле, как идею, что мы действительно категоризируем мир каким-то образом.
0:43 Идея о построении онтологии для изучения мира не нова. Первым, кто утвердил эту идею, был мужик по имени Платон. Идея Платоновского реализма, в основном, о том, что есть реальные вещи, а есть наше представление о вещах.

Задача про обезьян и бесконечность

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

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



Потрясающий факт, но еще интереснее попытаться понять, сколько же времени ей понадобится для набора конкретного текста. Чтобы не водить лишний параметр — скорость набора обезьяной — будем искать ответ на вопрос: сколько нажатий на клавиши ей потребуется в среднем. А вам очевидно, что строку «abc» набирать гораздо легче чем «aaa»? Решению этой задачи и посвящен этот пост. Попутно объясняется префикс функция и ее свойства.

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

Как определить наилучшее время для сделки на фондовом рынке: Алгоритмы следования тренду

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


На протяжение многих лет участники фондового рынка пытаются разрабатывать способы прогнозирования будущего движения цен. Для этого используются специальные алгоритмы и софт, машинное обучение или даже внешние сервисы вроде Google Trends. К настоящему моменту не существует техники создания прогнозов, которая была бы эффективна на 100%.

Исследователи из университета Макао несколько лет назад опубликовали работу, посвященную анализу эффективности алгоритмов следования тренду, которые не пытаются предсказать изменения цены, а точно реагируют на ее изменения в реальном времени. Мы представляем вашему внимани главные мысли этого исследования.
Читать дальше →

Что такое грамматическая эволюция + легкая реализация

Время на прочтение8 мин
Количество просмотров10K
Совсем недавно я написал статью, в которой без объяснений показал то, на что способен метод грамматической эволюции. Я полностью, согласен, что так делать нельзя, но как хотелось показать результаты интересного метода. Я думал «что будет лучше: перевести первоисточник или дать свое собственное объяснение». Лень взяла верх.

Если кому-то интересны эволюционные методы и задача символьной регрессии(и не только), то прошу к прочтению.
Читать дальше →

Символьная регрессия и еще один подход

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

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


Генетическое программирование действительно является мощным методом. Но в этой статье я хочу рассмотреть другой (не менее интересный) метод — грамматическая эволюция. Рассказывать о нем долго не буду. Скажу лишь то, что метод использует свободную грамматику в форме Бакуса-Наура, а также любой эволюционный алгоритм в качестве "движка" (я выбрал генетический алгоритм). И метод очень крутой!


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

PHP и Temporal Coupling

Время на прочтение3 мин
Количество просмотров9.3K
Про архитектуру приложений на PHP было написано не один десяток статей, но на данной проблеме больше акцентируют внимание разработчики Java и C#. Суть ее заключается в жесткой зависимости одного свойства на другом.
Читать дальше →

Генетическое программирование. ELTRUT-проблема

Время на прочтение5 мин
Количество просмотров18K
Бродя по просторам интернета, заинтересовался такой вещью как генетическое программирование. Если в двух словах, это автоматическое создание программ, которые выполняют ту или иную цель, в соответствии с принципом естественного отбора. То есть сначала случайным образом создается поколение «существ»-программ, которые сортируются по разным критериям (близость к достижению цели), затем часть из них мутирует (также случайно), часть вымирает и часть заменяется новыми случайными существами.

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


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

Метрика рекомендательной системы imhonet.ru

Время на прочтение12 мин
Количество просмотров19K
Цель этого рассказа — поделиться способами решения проблемы, над которой работали авторы при разработке рекомендательного сервиса imhonet.ru. Поскольку проблема не является чисто научно-технической, а скорее находится на стыке технологий и бизнеса и может быть полезна более широкой аудитории, чем обычный технический отчёт, мы выбрали именно такой формат представления нашей работы — попытались написать рассказ настолько простым языком, насколько это возможно. Первая часть рассказа посвящена довольно подробному обоснованию того, как правильно измерять качество работы алгоритмов рекомендательной системы. А в конце иллюстративно перечислено несколько примеров, в которых мы проводили эти измерения для решения конкретных задач.


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

Создание экспертной системы в Wi!Mi 1.1

Время на прочтение4 мин
Количество просмотров13K
Wi!Mi – это инструмент для создания моделей знаний с неограниченным количеством связей, параметров и отношений, обладающий логическим выводом. Скачать данный конструктор можно с официального сайта.
К сожалению, адекватного туториала по данной программе я не нашел, не считая видеоурока на youtube. Поэтому решил написать его самостоятельно.
Читать дальше →

Эксперимент: Что гипотеза случайного блуждания говорит о прогнозировании финансовых рынков

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


В блоге на Хабре и аналитическом разделе нашего сайта мы много пишем об алгоритмах и инструментах прогнозирования движения на финансовы рынках. При этом многие наблюдатели считают, что подобные занятия сродни игре в казино — на бирже все случайно, а значит ничего нельзя спрогнозировать. Количественный аналитик хедж-фонда NMRQL Стюарт Рид опубликовал на сайте Turing Finance результаты исследования, в ходе которого использовал гипотезу случайного блуждания, пытаясь подтвердить или опровергнуть тезис о случайности финансовых рынков. Мы представляем вашему вниманию основные мысли этого материала.
Читать дальше →

Рекурсия на PHP — алгоритм, применение

Время на прочтение7 мин
Количество просмотров46K
К написанию статьи сподвигли часы раздумий и экспериментов в области построения иерархических списков. Изначально логика обкатывалась на SQL запросах, но в последствии решил реализовать на PHP, дабы снять зависимость от СУБД. На простом примере я покажу как можно пройти от корня иерархии до каждого конечного элемента и обратно, информация скорее для новичков.

Итак, тестовая иерархия, с которой нам предстоит работать:

image

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

Создадим таблицу:

CREATE TABLE [dbo].[Test](
	[uid] [int] IDENTITY(1,1) NOT NULL,  -- уникальное поле, автоинкрементное
	[pid] [int] NULL,                    -- это поле указывает на элемент уровнем выше, содержит uid родителя
	[name] [varchar](255) NULL,
	[access] [varchar](50) NULL,         -- права доступа
) ON [PRIMARY]
Читать дальше →

Обзор дескрипторов изображения Local Binary Patterns (LBP) и их вариаций

Время на прочтение12 мин
Количество просмотров17K
Добрый день, хабровчане. Приглашаю под кат программистов, интересующихся компьютерным зрением и обработкой изображений. Возможно, вы пропустили несложный но эффективный математический инструмент для низкоуровневого описания текстур и задания их признаков для алгоритмов машинного обучения.
Мне интересно!

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

Конкурс GraphHPC-2016 на самую быструю реализацию параллельного алгоритма Community Detection: Итоги

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

В рамках конференции GraphHPC-2016, прошедшей 3 марта 2016 года в МГУ им. М.В. Ломоносова на факультете ВМК, проводился конкурс на самую быструю реализацию задачи Community Detection — поиска сообществ в неориентированном графе с весами.
Читать дальше →

Метод сортировки FlashSort

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

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

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

Сортировка пузырьком
Вот, к примеру, подобной реализации метода сортировки “пузырьком” меня учили в одной крупной IT-компании. Этот метод использовался матёрыми программистами там повсеместно.

Так вот, мне всегда было интересно, почему уделяется так мало внимания методам сортировки без сравнения (поразрядная, блочная и т.п.). Ведь подобные методы относятся к классу быстрых алгоритмов, выполняются за О(N) количество чтений и перестановок и при удачно подобранных данных могут выполняться за линейное время.
Читать дальше →

RING буфер — 2D cлучай

Время на прочтение7 мин
Количество просмотров13K
RING (кольцевой) буфер — 2D cлучай.
!NEW полнофункциональный модуль с гайдом, ссылка на на github в конце статьи!

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

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

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

Начнем с того, что же такое кольцевой буфер, и что он дает как абстрактный алгоритм:
Читать дальше →

Разрушители мифов: Автоматическое решение Google Recaptcha

Время на прочтение9 мин
Количество просмотров33K
Привет! Я воплощаю интересные идеи на python и рассказываю о том, что из этого вышло. В прошлый раз я пробовал найти аномалии на карте цен недвижимости. Просто так. На этот раз идея была построить систему, которая смогла бы сама решать очень популярную ныне Google Recaptcha 2.0, основываясь на некоторых алгоритмах и большой базе обучающих примеров.
Google Recaptcha 2.0 представляет собой набор изображений (9 или 16 квадратных картинок под одной инструкцией), среди которых пользователю, для подтверждения своей разумности, нужно выбрать все изображения одной категории. Речь пойдет НЕ о построении системы машинного обучения — распознавать мы будем именно капчи!
Читать дальше →

Байесовская нейронная сеть — теперь апельсиновая (часть 2)

Время на прочтение16 мин
Количество просмотров38K
Как вы думаете, чего в апельсине больше — кожуры, или, хм, апельсина?



Предлагаю, если есть возможность, пойти на кухню, взять апельсин, очистить и проверить. Если лень или нет под рукой — воспользуемся скучной математикой: объем шара мы помним из школы. Пусть, скажем, толщина кожуры равна от радиуса, тогда , ; вычтем одно из другого, поделим объем кожуры на объем апельсина… получается, что кожуры что-то около 16%. Не так уж мало, кстати.

Как насчет апельсина в тысячемерном пространстве?

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

  • во-первых, в тысячемерном гиперапельсине кожуры больше, чем мякоти
  • а во-вторых, ее больше примерно в 246993291800602563115535632700000000000000 раз

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

Начнем с этого, пожалуй.

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

Эффект кофты на шейдерах для мобильных устройств

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

Пролог


Доброго времени суток! После опубликовании статьи о визуализации квадратичного дерева(Quad-tree), меня попросили написать статью, показывающую работу шейдера, переводящего изображение в «кофту».



Так что, давай рассмотрим данную методику.
Читать дальше →

Математика на пальцах: ардуино головного мозга или линейно-квадратичный регулятор для управления электродвигателем

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

Постановка задачи: как со школьными знаниями дойти до выводов университетского уровня


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

Как я уже говорил в предыдущих статьях, мои знакомые студенты хотят построить обратный маятник, но умаялись подбирать коэффициенты ПИД-регулятора, поэтому я неспешно смотрю, что такое линейно-квадратичный регулятор, ну а заодно и вам пересказываю то, что прочитал. Задача для этой статьи — показать, как воплотить в железе одномерный пример из статьи про линейно-квадратичный регулятор. Грубо говоря, я хочу написать написать управление для сервомотора: у меня есть текущее положение оси привода и текущая скорость её вращения, я хочу её остановить в заданном положении. Я попытался было прочитать схожую статью на эту тему, но, признаться, ничего в ней не понял, поэтому сел разбираться самостоятельно, предпочтительно на пальцах и без страшных слов типа дифференциальных уравнений Лагранжа-Эйлера.

Продолжая рабочий эксгибиционизм, знакомлю вас с Bubble Bobble, который живёт у нас с коллегой в кабинете. Он рецензирует статьи для конференции SIGGRAPH.


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

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