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

Алгоритмы *

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

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

Программа учится играть по видеороликам

Время на прочтение2 мин
Количество просмотров2.9K
Программа играет в простые игры крестики-нолики, четыре в ряд (Connect 4) и гомоку — и выигрывает у человека. Казалось бы, ничего интересного, если бы не один важный нюанс — эта программа не знает правил! Точнее, она выучила их с нуля, просмотрев двухминутные видеозаписи с участием игр людей.

Лукаш Кайзер (Łukasz Kaiser) из университета Париж Дидро написал программу на C++, которая разбивает видеоряд по кадрам, убирает из них всё лишнее (руки людей) — и получает список последовательных позиций.

На основе этих данных алгоритм (на OCaml) составляет базу разрешённых ходов и список выигрышных/проигрышных/неразрешённых позиций, затем генерирует набор логических формул типа ∃x1Q(x1) ∧ ∃x0(C(x1,x0) ∧ x0 = e1). Оба модуля интегрированы в свободную программу для игры в настольные игры Toss.
Читать дальше →

Многозначное шифрование с использованием хеш-функций

Время на прочтение5 мин
Количество просмотров13K
В последнее время приходится все больше задумываться о сохранности анонимности и безопасности относительно прав на информационную собственность. В этой заметке я предложу довольно интересное решение относительно шифрования, позволяющего сохранить несколько различных объектов в одном контейнере с разными мастер-ключами, и гарантирующее отсутствие «следов» других сущностей при получении какой-либо одной. Более того, в силу конструктивных особенностей алгоритма — даже наличие расшифрованной сущности можно всегда списать на «случайность» (то есть, нет никаких средств проверить, были ли изначально зашифрованы эти данные или нет). Кроме того, алгоритм имеет чрезвычайную стойкость к атакам «подбора ключа». Правда у метода есть и существенный недостаток — катастрофически низкая скорость работы, но в ряде особенных случаев он все равно может быть полезен.
Читать дальше →

Восстановление расфокусированных и смазанных изображений. Практика

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

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

Ниже показан результат обработки реального размытого изображения (не с синтетическим размытием). Исходное изображение было получено камерой Canon 500D с объективом EF 85mm/1.8. Фокусировка была выставлена вручную, чтобы получить размытие. Как видно, текст совершенно не читается, лишь угадывается диалоговое окно Windows 7.



И вот результат обработки:



Практически весь текст читается достаточно хорошо, хотя и появились некоторые характерные искажения.

Под катом подробное описание проблем деконволюции, способов их решения, а также множество примеров и сравнений. Осторожно, много картинок!
Читать дальше →

Фабрика картинок — как оно работает? Часть 1

Время на прочтение5 мин
Количество просмотров3.6K
Хочется рассказать немного о технической части своего проекта, возможно для критики а может кто-то почерпнет что-то для себя.
Читать дальше →

Вычислительная геометрия, или как я стал заниматься олимпиадным программированием.Часть 1

Время на прочтение8 мин
Количество просмотров137K
Здравствуйте, уважаемые хабравчане! Это моя вторая статья, и мне хотелось бы поговорить о вычислительной геометрии.

Немного истории


Я являюсь студентом уже 4 курса математического факультета, и до того как я начал заниматься программированием, я считал себя математиком на 100 процентов.

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

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

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

Я помню, как долго мучился с этими задачами, чтобы они прошли все тесты на сайте informatics.mccme. Зато теперь я очень рад, что прошел через все испытания и знаю, что же такое задачи вычислительной геометрии.
Читать дальше →

Super-resolution из единственной фотографии

Время на прочтение2 мин
Количество просмотров34K
В обработке изображений существует класс методов Super-resolution (SR), которые позволяют качественно увеличить разрешение исходного изображения, при этом происходит преодоление оптического предела объектива и/или физического разрешения цифрового сенсора, который записал изображение.

Алгоритмы SR используют два подхода для вычисления результирующего изображения: 1) на базе множества кадров одного объекта; 2) самообучающаяся система с базой образцов.


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

2 млн точек на карте? легко!

Время на прочтение3 мин
Количество просмотров15K
Не так давно для создания сервиса (да и «в загашник» положить модуль) потребовалось придумать способ как быстро из sql базы делать выборки точек расположенных на карте.
Кода будет мало, что бы не отвлекать от понимания системы в целом.



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

Математическая модель общения

Время на прочтение2 мин
Количество просмотров4.2K
Я не собираюсь строить здесь полную теорию. Не будет даже собственно математики. Хочу лишь отметить актуальность и указать пару математических концептов, мне кажется хорошо подходящих для описания определенных аспектов сетевого общения. Иначе говоря, я хотел бы просто инициировать тему.

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

CCV: современная библиотека компьютерного зрения

Время на прочтение1 мин
Количество просмотров15K
Спустя два года разработки состоялся релиз библиотеки ccv 0.1, которая использует ряд современных алгоритмов компьютерного зрения.

Библиотека ccv написана на C и позиционируется как компактная, лёгкая альтернатива OpenCV, поэтому из неё старательно изъяты все несущественные функции. Таким образом, ccv предназначена не для экспериментов с разными алгоритмами, а для практического использования в конкретных приложениях.
Читать дальше →

Скринкаст: монада Maybe на языке C#

Время на прочтение1 мин
Количество просмотров21K
Небольшая иллюстрация того, как на языке C# реализовать монаду Maybe и зачем это вообще нужно. Смотреть видео рекоммендуется в разрешении 720p.



Сопутствующую статью можно найти тут (англ. яз.). Комментарии приветствуются!

Однострочники на Си/С++. Часть 2

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

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

Генерация расклада для карточных игр

Время на прочтение2 мин
Количество просмотров2.8K
Хотел бы предложить на суд общественности алгоритм для карточной игры, который исключает “шулерство”. Т.е. расклад игры генерируется участниками совместно, а “вскрытие” конкретной карты может производится только для одного игрока.
Читать дальше →

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

Из постфиксной в инфиксную нотацию

Время на прочтение4 мин
Количество просмотров26K
Об обратной польской нотации(записи) на Хабре уже рассказывали . Как известно вся сила ОПН в постфиксной записи математического выражения. О том как преобразовать привычную для нас инфиксную запись в постфиксную детально рассмотрено в статье выше, на Википедии и даже приведена реализация на Ассемблере. Но вот о том как провернуть обратное действие я статей не нашел.

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

О прямоугольных координатах и гексагональных сетках

Время на прочтение4 мин
Количество просмотров29K
Думаю, никому не нужно объяснять, насколько широко в играх (и не только) используются гексагональные сетки. Как для заданной шестиугольной ячейки найти координаты ее центра и вершин — достаточно очевидно. Обратное же преобразование (т.е. поиск ячейки, в которую попала данная точка с координатами x и y) уже не столь тривиально. О нём и пойдет речь в данном топике.
Читать дальше →

Использование UML для эксперимента по эволюционной систематике прокариот, и косвенно о психологии ученых

Время на прочтение7 мин
Количество просмотров2.3K
Эта статья продолжение двух других Интересные результаты о эволюционной систематике прокариот или «многовидовое происхождение», Геномы секвенированных организмов — ошибки в базах.

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

С другой поставить новый эксперимент. И было бы желательно привлечь к этому тех кто интересуется подобными вещами. Если у вас нет времени — может у вас есть свободное процессорное время :)?

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

Геномы секвенированных организмов — ошибки в базах

Время на прочтение4 мин
Количество просмотров4.1K
Наиболее известная база, содержащая геномы секвенированных организмов — NCBI, содержит большое количество систематических ошибок. Из-за этого практически невозможно использование этих данных, и тем более невозможно изучение механизма мутаций (а, следовательно, и эволюции), так как в таком случае исследуются человеческие ошибки при секвенировании, а не природные мутации. Поэтому прежде чем использовать эти данные необходимо уточнение этой базы.

И это трудоемкая задача, её невозможно решить для отдельного нужного организма. Поэтому хотелось бы найти тех, кто хотел бы создать свой русскоязычный источник аналогичный NCBI, но с уточненной информацией.

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

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

Однострочники на С++

Время на прочтение2 мин
Количество просмотров62K
image
На хабе появилось несколько топиков об «однострочниках» на разных языках, которые решали простые задачи. Я решил опубликовать несколько алгоритмов на языке C/С++.
Итак, поехали!
Читать дальше →

NAVTEQ True: сбор данных об улицах и дорогах

Время на прочтение1 мин
Количество просмотров1.2K
Посмотрев этот ролик 2-годичной давности, я вспомнил про беспилотники Google. Технология NAVTEQ True — это больше, чем просто фото улиц.

На борту фотомобиля:
Вместе они позволяют получить:
  • 360°-панорамы улиц
  • Точную 3D-модель пространства
  • Дорожные знаки и разметку
  • Резкие повороты дороги

Всё это стоит увидеть в этом видео:

Интересные результаты о эволюционной систематике прокариот или «многовидовое происхождение»

Время на прочтение6 мин
Количество просмотров4K
Филогенетическая систематика пытается определить родство различных организмов и их эволюционную близость. Если не так давно об этом судили по внешним признакам организмов (морфологии если точнее), то теперь однозначно перешли к суждению путем сравнения геномов этих организмов.

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

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

Известно, что в рибосомах прокариот и эукариот присутствуют 3 типа рРНК. Информационная емкость крупных молекул больше, но их труднее анализировать. Поэтому наиболее удобным оказался анализ молекул рРНК средней величины: 16S (~1600 нуклеотидов). Систематика основывается на расчете коэффициентов сходства сравниваемых организмов. Именно на основании анализа рРНК современная систематика выделяет три домена бактерии, археи и эукариоты, а так же на этом основывается систематика, бактерий и архей X издания Берги.

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

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

Смотрим, что из этого получилось.

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

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