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

Алгоритмы *

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

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

Frogger HD и численное моделирование волн в пруду

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

После прочтения статьи про CGA от SLY_G я необычайно возбудился. Вспомнил юность, IBM PC/XT и игру frogger jr, в которой лягушка должна была пересечь дорогу, избежав колес бешено мчавшихся байков. Затем по бревнам допрыгать до тихой заводи. И так до смерти, которых выдавали 4 штуки. Фраю выдали 666, но я не Макс.
Поплакав о безвозвратно потерянных годах, я решил потерять еще пару дней и сделал ремейк игры под iPad.

Движение воды в речке решил смоделировать по-правильному, через разностную схему.
О численном алгоритме моделирования озерных волн и о том, что получилось, читайте дальше.
Да! забыл сказать.
Тем, кто может продолжить последовательность
T T F S E...
читать будет не особенно интересно.
Читать дальше →

Дискретное преобразование Фурье фрактального броуновского движения

Время на прочтение2 мин
Количество просмотров14K
Фрактальное броуновское движение (ФБД) относится к классу рассматриваемых функций, заданные на конечном интервале и равные нулю вне его, которые включают кусочно непрерывные функции, удовлетворяющие условию роста:
image,
где функция image, удовлетворяет условию: image

Преобразование Фурье
Для ФБД будем интерпретировать процесс image как временной процесс. Существует частотная область, в которой функция — сумма составляющих, имеющих определенную частоту. Функция image может быть разложена как image.
Составляющая image с частотой image имеет вид:

image, где image.

Функция image называется преобразованием Фурье.
Читать дальше →

Принцип анализа вариабельности сердечного ритма в MATLAB

Время на прочтение6 мин
Количество просмотров26K
Приветствую, Хабр! В этой публикации хочу представить свой опыт реализации алгоритма анализа ВСР человека в MATLAB. Теме анализа ВСР уделено достаточно внимания на Хабре. (поиск по слову ЭКГ) однако, как мне показалось, некоторые моменты раскрыты слабо или вовсе не рассматриваются. В данной статье не уделяется много внимание объяснению явления ВСР и теории методов ее анализа. Подразумевается, что читатель подготовлен, а основной упор сделан на использование для целей анализа функций и процедур MATLAB.
Читать дальше →

Введение в дискретно-ориентированные многогранники для задачи определения столкновений

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


Обнаружение столкновений (collision detection) виртуальных объектов является довольно значимой частью для задач визуализации.
Читать дальше →

Арбелос

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

Скачать статью в виде документа Mathematica (NB), CDF-файла или PDF.
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.

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

Введение


Будучи мотивирован вычислительными преимуществами, которыми обладает Mathematica, некоторое время назад я решил приступить к исследованию свойств арбелоса — весьма интересной геометрической фигуры. С тех пор я был впечатлен большим количеством удивительных открытий и вычислительных проблем, которые возникали из-за всё расширяющегося объёма литературы, касающейся этого примечательного объекта. Я вспоминаю его сходство с нижней частью культового велосипеда пенни-фартинг из The Prisoner (телесериал 1960-х), шутовской шапкой Панча (знаменитых Punch and Judy) и символом инь-ян с одной перевёрнутой дугой; см. рис. 1. В настоящее время существует специализированный каталог архимедовых кругов (круги, содержащиеся в арбелосе) [1] и важные применения свойств арбелоса, которые лежат вне поля математики и вычислительных наук [2].

Многие известные исследователи занимались этой темой, в том числе Архимед (убитый римским солдатом в 212 г. до н.э.), Папп (320 г. н.э.), Кристиан О. Мор (1835-1918), Виктор Тебо (1882-1960), Леон Банкофф (1908-1997), Мартин Гарднер (1914-2010). С недавних пор свойствами арбелоса занимаются Клейтон Додж, Питер Ай. Ву, Томас Шох, Хироши Окумура, Масаюки Ватанабе и прочие.

Леон Банкофф — человек, который привлекал всеобщее внимание к арбелосу в последние 30 лет. Шох привлёк внимание Бэнкоффа к арбелосу в 1979 году, открыв несколько новых архимедовых кругов. Он послал 20-страничную рукописную работу Мартину Гарднеру, который направил её Бэнкоффу, который затем отправил 10-страничный фрагмент копии рукописи Доджу в 1996 году. Из-за смерти Бэнкоффа запланированная совместная работа была прервана, пока Додж не сообщил о некоторых новых открытиях [3]. В 1999 году Додж сказал, что ему потребуется от пяти до десяти лет, чтобы отсортировать весь материал, которым он располагает, разложив всё это дело по стопкам. В настоящее время эта работа все ещё продолжается. Не удивительно, что в четвертом томе The Art of Computer Programming, сказано о том, что важная работа требует большого количества времени.


Рис. 1. Велосипед пенни-фартинг, куклы Панч и Джуди, физический арбелос.

Арбелос (“нож сапожника” в греческом языке) назван так из-за своего сходства с лезвием ножа, использующегося сапожниками (Рис. 1). Арбелос — плоская область, ограниченная тремя полуокружностями и общей базовой линией (рис. 2). Архимед, вероятно, был первым, кто начал изучать математические свойства арбелоса. Эти свойства описаны в теоремах с 4-ой по 8-ую его книги Liber assumptorum (или Книги лемм). Возможно, эту работу написал не Архимед. Сомнения появились после перевода с арабского Книги лемм, в которой Архимед упоминается неоднократно, но ничего не сказано о его авторстве (однако, существует мнение, что эта книга — подделка [4]). Книга Лемм так же содержит знаменитую архимедову Problema Bovinum [5].

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

Лекции Техносферы. 2 семестр. Современные методы и средства построения систем информационного поиска

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


Снова в эфире наша образовательная рубрика. На этот раз предлагаем ознакомиться с очередным курсом Техносферы, посвящённым информационному поиску. Цель курса — рассказать об основных методах, применяемых при создании поисковых систем. Некоторые из них представляют собой хороший пример смекалки, некоторые показывают, где и как может применяться современный математический аппарат. Преподаватели курса: Алексей Воропаев, Владимир Гулин, Дмитрий Соловьев, Игорь Андреев, Алексей Романенко, Ян Кисель.
Читать дальше →

Решение лабиринтов на Perl

Время на прочтение11 мин
Количество просмотров7.6K
Классическая задача при игре в лабиринте состоит в поиске прохода через него от входа до выхода. Путь-решение рисуется на карте лабиринта. В большинстве случаев лабиринты генерятся компьютерами, которые пользуются алгоритмами вроде поиска в глубину. Интересно, что решать лабиринт можно при помощи того же самого алгоритма.

Читаем лабиринт


Лабиринт можно представлять в разных форматах. Мы будем использовать SVG, поскольку в этом случае легко будет нарисовать решение поверх него.

Пример лабиринта в SVG:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="112" height="96" version="1.1" xmlns="http://www.w3.org/2000/svg">
  <rect width="112" height="96" fill="white" stroke="none" />
  <title>5 by 4 orthogonal maze</title>
  <g fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
    <line x1="16" y1="16" x2="32" y2="16" />
    <line x1="48" y1="16" x2="80" y2="16" />
    <line x1="16" y1="80" x2="96" y2="80" />
    <line x1="16" y1="16" x2="16" y2="80" />
    <line x1="96" y1="16" x2="96" y2="80" />
    <line x1="64" y1="16" x2="64" y2="32" />
    <line x1="32" y1="32" x2="32" y2="48" />
    <line x1="32" y1="32" x2="48" y2="32" />
    <line x1="64" y1="32" x2="64" y2="48" />
    <line x1="64" y1="32" x2="80" y2="32" />
    <line x1="32" y1="48" x2="48" y2="48" />
    <line x1="48" y1="48" x2="48" y2="64" />
    <line x1="48" y1="48" x2="64" y2="48" />
    <line x1="80" y1="48" x2="80" y2="64" />
    <line x1="16" y1="64" x2="32" y2="64" />
    <line x1="48" y1="64" x2="64" y2="64" />
    <line x1="80" y1="64" x2="80" y2="80" />
  </g>

  <g fill="black" stroke="none" stroke-width="1">
    <text x="24" y="26" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">1</text>
    <text x="40" y="26" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">2</text>
    <text x="56" y="26" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">3</text>
    <text x="72" y="26" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">4</text>
    <text x="88" y="26" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">5</text>
    <text x="24" y="42" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">6</text>
    <text x="40" y="42" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">7</text>
    <text x="56" y="42" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">8</text>
    <text x="72" y="42" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">9</text>
    <text x="88" y="42" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">10</text>
    <text x="24" y="58" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">11</text>
    <text x="40" y="58" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">12</text>
    <text x="56" y="58" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">13</text>
    <text x="72" y="58" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">14</text>
    <text x="88" y="58" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">15</text>
    <text x="24" y="74" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">16</text>
    <text x="40" y="74" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">17</text>
    <text x="56" y="74" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">18</text>
    <text x="72" y="74" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">19</text>
    <text x="88" y="74" text-anchor="middle" style="font-family:Arial Narrow; font-size: xx-small;">20</text>
  </g>
</svg>





Файл мы будем обрабатывать двумя регулярками – одна для размера, а вторая – для поиска линий.
Читать дальше →

EPAM, собери мне геном

Время на прочтение9 мин
Количество просмотров35K
Если сравнивать человека с компьютером, то его тело – это hardware, а то, что вдыхает в него жизнь – software. И сегодня речь пойдёт о человеческом software – его геноме.

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

Анализ изображений и видео. Сегментация изображений

Время на прочтение2 мин
Количество просмотров25K
Сегодня мы публикуем восьмую лекцию из курса «Анализ изображений и видео», прочитанного Натальей Васильевой в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS-клуба.



Всего в программе девять лекций, из которых уже были опубликованы:
  1. Введение в курс «Анализ изображений и видео»;
  2. Основы пространственной и частотной обработки изображений;
  3. Морфологическая обработка изображений;
  4. Построение признаков и сравнение изображений: глобальные признаки;
  5. Построение признаков и сравнение изображений: локальные признаки;
  6. Поиск по подобию. Поиск нечетких дубликатов;
  7. Анализ изображений и видео. Классификация изображений и распознавание объектов.

Под катом вы найдете план новой лекции и слайды.
Читать дальше →

Детальный анализ Хабрахабра с помощью языка Wolfram Language (Mathematica)

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

Скачать пост в виде документа Mathematica, который содержит весь код использованный в статье, вместе с дополнительными файлами, можно здесь.

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

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

В посте будут рассматриваться статьи, относящиеся к хабам, всего в анализе участвовало 62000 статей из 264 хабов. Статьи, написанные только для корпоративных блогов компаний в посте не рассматривались, а также не рассматривались посты, не попавшие в группу «интересные».

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

Реверс-инжиниринг целочисленного деления на константу

Время на прочтение2 мин
Количество просмотров19K
Так бывает, что иногда реверсишь код, который занимается какой-то рутиной, не предполагающей каких-то серьезных вычислений и тут внезапно умножение на большую константу (поплачем, что на хабре нет хайлайтера для асма):

mov     edx, [ebp+end_of_buffer]
mov     eax, [ebp+src]
mov     ecx, edx
sub     ecx, eax
mov     edx, 80808081h
mov     eax, ecx
imul    edx
lea     eax, [edx+ecx]
mov     edx, eax
sar     edx, 7
mov     eax, ecx
sar     eax, 1Fh
sub     edx, eax
mov     eax, edx

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

Определяем веса шахматных фигур регрессионным анализом

Время на прочтение15 мин
Количество просмотров86K
Здравствуй, Хабр!

В этой статье речь пойдёт о небольшом программистском этюде на тему машинного обучения. Замысел его возник у меня при прохождении известного здесь многим курса «Machine Learning», читаемого Andrew Ng на Курсере. После знакомства с методами, о которых рассказывалось на лекциях, захотелось применить их к какой-нибудь реальной задаче. Долго искать тему не пришлось — в качестве предметной области просто напрашивалась оптимизация собственного шахматного движка.

Вступление: о шахматных программах



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

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

Строго говоря, настоящая оценка может принимать только три значения: выигрыш, проигрыш или ничья — 1, 0 или ½. По теореме Цермело для любой заданной позиции она определяется однозначно. На практике же из-за комбинаторного взрыва ни один компьютер не в состоянии просчитать варианты до листьев полного дерева игры (исчерпывающий анализ в эндшпильных базах данных — это отдельный случай; 32-фигурных таблиц в обозримом будущем не появится… и в необозримом, скорее всего, тоже). Поэтому программы работают в так называемой модели Шеннона — пользуются усечённым деревом игры и приближённой оценкой, основанной на различных эвристиках.
Читать дальше →

Анализ изображений и видео. Классификация изображений и распознавание объектов

Время на прочтение1 мин
Количество просмотров26K
Сегодня мы публикуем седьмую лекцию из курса «Анализ изображений и видео», прочитанного Натальей Васильевой в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS-клуба.



Всего в программе девять лекций, из которых уже были опубликованы:
  1. Введение в курс «Анализ изображений и видео»;
  2. Основы пространственной и частотной обработки изображений;
  3. Морфологическая обработка изображений;
  4. Построение признаков и сравнение изображений: глобальные признаки;
  5. Построение признаков и сравнение изображений: локальные признаки;
  6. Поиск по подобию. Поиск нечетких дубликатов.

Под катом вы найдете план новой лекции и слайды.
Читать дальше →

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

Тестирование математических алгоритмов

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

image

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

Алгоритм Quickhull для нахождения выпуклой оболочки

Время на прочтение20 мин
Количество просмотров25K
Как гласит определение, выпуклая оболочка некоторого множества — это наименьшее выпуклое множество , содержащее в себе множество . Выпуклой оболочкой конечного множества попарно различных точек является многогранник.
Для реализации одномерного случая алгоритма Quickhull годится функция std::minmax_element. В сети можно найти множество реализаций алгоритма Quickhull для плоского случая. Однако, для случая произвольной размерности сходу находится лишь одна тяжёловесная реализация с сайта qhull.org.
Читать дальше →

Классификация предложений с помощью нейронных сетей без предварительной обработки

Время на прочтение6 мин
Количество просмотров72K
Довольно часто встречается задача классификации текстов — например, определение тональности (выражает ли текст позитивное мнение или отрицательное о чем-либо), или разнесения текста по тематикам. На Хабре уже есть хорошие статьи с введением в данный вопрос.

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

Обновление #длямобильных уже в действии. Отвечаем на ваши вопросы

Время на прочтение6 мин
Количество просмотров15K
Привет, Habrahabr! Не так давно мы рассказывали о грядущих изменениях в ранжировании сайтов: на поисковую выдачу теперь влияет наличие оптимизации для мобильных устройств.



За это время нам задали достаточно много вопросов на эту тему, самые распространённые и актуальные мы рассмотрим сегодня.
Читать дальше →

Обфускация программ

Время на прочтение4 мин
Количество просмотров114K
Обфускация программ — это прорывная, самая горячая сегодня, область криптографии. За последние два года написано свыше 70ти статей по этой теме, она вызывает жаркие дискуссии, создает настоящие гонки между исследовательскими группами, открывает полигон для научных изысканий. Более того, оказывается, что обфускация — фундаментальный, образующий примитив, который порождает практически всё, что мы имеем в криптографии сегодня. Разберемся, с тем что же это такое.

Давая пользователям доступ к установочным файлам программ, компании неизбежно раскрывают свои профессиональные секреты и наработки, и ничто не останавливает злобонравных конкурентов от беззастенчивого копирования и воровства чужих алгоритмов. Обратим внимание и на другой пример, это важные обновления (патчи), исправляющие ошибки в операционных системах. Почти мгновенно очередное обновление анализируется хакерами, они выявляют проблему которую это обновление чинит, и атакуют несчастных, не успевших вовремя обновиться, пользователей.
imageЭти две ситуации связывает одна фундаментальная проблема, а именно: написанная человеком программа может быть человеком же и понята, проанализирована, разобрана. А что если существовал бы алгоритм, который бы мог до неузнаваемости, необратимо переделать программу при этом сохраняя ее функциональность? Так чтобы программу совершенно невозможно было бы понять, но при этом она работала бы ничуть не хуже исходной? Такой алгоритм и называется «обфусцирующий» или «обфускатор».
Читать дальше →

RS-анализ (анализ фрактальной структуры временных рядов)

Время на прочтение2 мин
Количество просмотров32K
Стандартная гауссова статистика работает на основе следующих предположений. Центральная предельная теорема утверждает, что при увеличении числа испытаний, предельное распределение случайной системы будет нормальным распределением. События должны быть независимыми и идентично распределены (т.е. не должны влиять друг на друга и должны иметь одинаковую вероятность наступления). При исследовании крупных комплексных систем обычно предполагают гипотезу о нормальности системы, чтобы далее мог быть применен стандартный статистический анализ.

Часто на практике изучаемые системы (от солнечных пятен, среднегодовых значений выпадения осадков и до финансовых рынков, временных рядов экономических показателей) не являются нормально-распределенными или близкими к ней. Для анализа таких систем Херстом [1] был предложен метод Нормированного размаха (RS-анализ). Главным образом данный метод позволяет различить случайный и фрактальный временные ряды, а также делать выводы о наличии непериодических циклов, долговременной памяти и т.д.

Алгоритм RS-анализа


  1. Дан исходный ряд image. Рассчитаем логарифмические отношения:

    image
  2. Разделим ряд image на image смежных периодов длиной image. Отметим каждый период как image, где image. Определим для каждого image среднее значение:

    image

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

Поиск по подобию. Поиск нечетких дубликатов. Лекции от Яндекса

Время на прочтение28 мин
Количество просмотров20K
Сегодня мы публикуем шестую лекцию из курса «Анализ изображений и видео», прочитанного Натальей Васильевой в петербургском Computer Science Center, который создан по совместной инициативе Школы анализа данных Яндекса, JetBrains и CS-клуба.



Всего в программе девять лекций, из которых уже были опубликованы:
  1. Введение в курс «Анализ изображений и видео».
  2. Основы пространственной и частотной обработки изображений.
  3. Морфологическая обработка изображений.
  4. Построение признаков и сравнение изображений: глобальные признаки.
  5. Построение признаков и сравнение изображений: локальные признаки.

Под катом, вы найдете план новой лекции, слайды и подробную расшифровку.
Читать дальше →

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