Как стать автором
Поиск
Написать публикацию
Обновить
99.51

Алгоритмы *

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

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

ПИД-регулятор своими руками

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

I. Постановка задачи


Нужно держать температуру на заданном неком уровне и менять задание. Есть микроконтроллер, к которому прицеплены измеритель температуры, и симистор для управления мощностью. Не будем греть голову на ТАУ, ни разностными схемами, просто возьмём и сделаем «в лоб» ПИД-регулятор.
Читать дальше →

Биовычисления по сворачиванию. Снова простым языком о полученной модели сворачивания

Время на прочтение6 мин
Количество просмотров1.8K
Я тут написал уже более 7 статей на тему одного своего подхода (набора алгоритмов и проблем) к задаче сворачивания РНК. Читающих становилось с каждой статьей все меньше, а кое кто признавался, что мозг выносило уже после второй статьи. Сравнительный успех первых двух статей, по сравнению с остальными — кажется заключается в простоте изложения и не углубления в детали. Хотя последние статьи давали возможность самим взять демо моей программы и прочувствовать проблематику — это видимо интересует меньше.

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

В своем ПО RNAInSpace — я реализовал возможность «покрутить» спираль РНК вручную, чтобы стала понятна геометрия и ограничения такого вращения. Но так как по предыдущим статьям — это ПО не сильно заинтересовало, то тут очередную демо версию этого ПО я пока представлять не буду. А поговорим о том, что получается у меня.

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

Как сделать программу нетерпеливой?

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


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

Анализ возможностей массового аудита на основе утечки хешей из LinkedIn

Время на прочтение6 мин
Количество просмотров4.6K
Неделю назад утекла база хешей с LinkedIn, для других это событие может быть примечательным само по себе, но для меня, в первую очередь, это означает возможность провести анализ современных возможностей взлома паролей. И я не собираюсь рассказывать о том сколько раз слово «password» было встречено среди паролей и о том, сколько времени занимает перебор шестисимвольных комбинаций. Скорее буду пугать пользователей тем, насколько сложные пароли можно «взломать» за несколько часов. А программистам расскажу как это возможно эффективно реализовать, и в качестве небольшого подарка приложу программу, которую я написал для массового аудита. Присутствует и некоторый ликбез по использованию радужных таблиц с простыми выводами.

И так, за час удалось «восстановить» около 2.5 миллионов паролей на средней рабочей конфигурации, без специальных словарей и радужных таблиц. Среди найденных паролей присутствуют 16-символьные алфавитно-цифровые комбинации, и далеко не в единственном экземпляре.
Читать дальше →

Нелинейная динамика и анализ временных рядов – обзор метода Recurrence plots

Время на прочтение4 мин
Количество просмотров21K
Всем привет. В этом топике я хотел бы провести обзор относительно нового и довольно мощного метода нелинейной динамики – метода Recurrence plots или рекуррентного анализа в приложении к анализу временных рядов. А, кроме того, поделится кодом короткой программы на языке Matlab, которая реализует все нижеописанное.

Итак, начнем. По долгу службы я занимаюсь нелинейной динамикой, обработкой видео и изображений, я бы даже сказал, довольно узкой частью нелинейной динамики – нелинейными колебаниями роторов. Как известно, вибросигнал представляет собой ничто иное, как временной ряд, где в качестве сигнала выступает значение амплитуды отклонения, ну например, ротора турбины самолета. Как известно, не только колебания ротора можно представить в таком виде. Колебания биржевых котировок, активность Солнца и множество других процессов описываются простым вектором чисел, выстроенным по времени. Скажу даже больше, все эти процессы объединяет один важный фактор – они нелинейны, а некоторые даже хаотичны, что означает на практике невозможность предсказать состояние в системе на сколь угодно большой отрезок времени даже зная точно закон ее движения в виде дифференциальных уравнений. А самое главное, в большинстве случаев мы не можем даже записать эти самые уравнения в каком-либо виде. И тут на помощь приходит эксперимент и нелинейная динамика.
Читать дальше →

Russian Code Cup 2012: Разбор задач третьего квалификационного раунда

Время на прочтение11 мин
Количество просмотров13K
Закончился последний квалификационный тур Russian Code Cup. В полуфинал, в отборочный тур, перешли лучшие 600 участников. 16-го июня мы будем наблюдать за сражением умов, пятьдесят победителей перейдут в финал, где будут разыграны 18 тысяч долларов.



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

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

Задачи отборочного раунда будут заметно сложнее и еще более интересные. Приходите «поболеть» 16-го июня в 11:00 на сайт RussianCodeCup.Ru.

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

Копулы — что это такое и с чем их есть

Время на прочтение5 мин
Количество просмотров17K
На данном ресурсе часто говорят о работе со случайными величинами — ну много где они нужны. Иногда случается так, что вам нужно определить зависимость двух случайных величин друг от друга. Тут вы воскликнете — «Пффф, дык мы ж такое в школе проходили — корреляция». Вот тут я хочу вас огорчить — корреляция Пирсона — всего лишь один из множества способов показать зависимость двух случайных величин. К тому же он линейный. То есть, если зависимость между X и Y не линейная, а, допустим, квадратичная, то есть X=Y^2, тогда корреляция Пирсона покажет отсутствие зависимости. Но мы то знаем что это не так. Если вы не задумывались об этом раньше, то сейчас у вас должны появляться идеи — «Как же так?», «А что же делать?», «Аааа, мы все умрем!» Ответы на все эти непростые вопросы я постараюсь дать под катом.
Читать дальше →

Java: Тестирование алгоритмов компрессии – 16 файлов, 5 типов

Время на прочтение4 мин
Количество просмотров6.4K
Здравствуй «ХабраСообщество»!
Выкладываю небольшой обзор и результаты тестирования основных алгоритмов сжатия с Java.
Кому интересно прошу под кат, кому нет — просьба не минусовать и сказать, что тема не достойна хабра – уберу в черновики.
Читать дальше →

Реализация на Verilog цифрового БИХ-фильтра

Время на прочтение5 мин
Количество просмотров20K
Приветствую Хабр. Не так давно здесь уже появлялись статьи на эту тему Verilog. Цифровой фильтр на RAM и Построение цифрового фильтра с конечной импульсной характеристикой. Хочу и я внести свой скромный вклад и представить вашему вниманию реализацию цифрового БИХ-фильтра на Verilog.
Итак, прошу...

Поиск в социальных сетях на основе поведения муравьёв

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


Исследователи из Мадридского университета имени Карлоса III (Universidad Carlos III de Madrid, UC3M) разработали алгоритм, основанный на поведении муравьёв при поиске еды. Данный алгоритм, как утверждают авторы, ускоряет поиск связей между элементами социальных сетей.
Ползти дальше

Рандомизированные деревья поиска

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

Не знаю, как вы, уважаемый читатель, а я всегда поражался контрасту между изяществом базовой идеи, заложенной в концепцию двоичных деревьев поиска, и сложностью реализации сбалансированных двоичных деревьев поиска (красно-черные деревья, АВЛ-деревья, декартовы деревья). Недавно, перелистывая в очередной раз Седжвика [1], нашел описание рандомизированных деревьев поиска (нашлась и оригинальная работа [2]) — настолько простое, что занимает оно всего треть страницы (вставка узлов, еще страница — удаление узлов). Кроме того, при ближайшем рассмотрении обнаружился дополнительный бонус в виде очень красивой реализации операции удаления узлов из дерева поиска. Далее вы найдете описание (с цветными картинками) рандомизированных деревьев поиска, реализация на С++, а также результаты небольшого авторского исследования сбалансированности описываемых деревьев.
Читать дальше →

Алгоритм моделирования многомерного массива данных, распределенных по нормальному закону

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

Чаще всего используется моделирование данных, распределённых по нормальному закону. К сожалению, MS Excel и распространённые статистические пакетаы (SPSS, Statistica) позволяют моделировать только одномерные статистические распределения. Конечно, можно составить многомерное распределение из нескольких одномерных, но только в том случае, если переменные независимы. Если же нужно исследовать данные с зависящими друг от друга переменными, придётся писать программу.
Читать дальше →

Russian Code Cup 2012: Разбор задач второго квалификационного раунда

Время на прочтение10 мин
Количество просмотров15K
В минувшую субботу прошел второй квалификационный раунд олимпиады по программированию Russian Code Cup 2012.



Russian Code Cup — индивидуальное соревнование по спортивному программированию, ежегодно проводимое Mail.Ru Group. Оно традиционно состоит из трех этапов: в начале лета проходят три квалификационных раунда, затем лучшие принимают участие в отборочном туре, первые пятьдесят победителей отборочного тура соревнуются в финале. Личного присутствия потребует только последний из них, остальные же проводятся онлайн. Все финалисты будут отмечены ценными подарками, а приз участнику, занявшему первое место, составит 10 000 долларов. За второе и третье место полагаются 5 000 и 3 000 долларов.

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

В это воскресенье, 10 июня, в 11:00, будет проходить последний квалификационный раунд, из которого две сотни участников перейдут в «полуфинал» — отборочный раунд. На втором раунде для этого достаточно было решить две задачи — одну простую и одну сложную, и уложиться при этом в половину отведенного времени. Ждем вас в воскресенье и желаем удачи!

Ну а теперь перейдем к задачам.
Читать дальше →

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

Обход бинарных деревьев: рекурсия, итерации и указатель на родителя

Время на прочтение5 мин
Количество просмотров193K
Основы о бинарных деревьях представлены, в том числе, здесь . Добавлю свои «5 копеек» и данным постом систематизирую материалы, связанные с обходом бинарных деревьев, а именно сравнений возможностей рекурсии и итераций, а также обсуждение возможностей использования указателя на родительский узел.
Читать дальше →

Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)

Время на прочтение4 мин
Количество просмотров22K
Решил написать статью про алгоритм параллельного поиска максимально возможных пересечений двух строк. К написанию этой статьи меня побудило два желания:

  1. Поделиться со всеми интересным алгоритмом и его реализацией на С++ (стандарт С++11);
  2. Узнать, есть ли у данного алгоритма название и/или формальное описание;

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

Построение минимальных выпуклых оболочек

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

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

Жадный алгоритм в A/B-тестировании

Время на прочтение2 мин
Количество просмотров7.6K
Канадский разработчик Стив Ханов (Steve Hanov) рассказывает о простом способе повысить эффективность A/B-тестирования.

Суть заключается в использовании жадного алгоритма (epsilon-greedy method) для решения задачи о многоруком бандите. Другими словами, при выборе между вариантами A/B-тестирования Стив предлагает отказаться от полного рандома, а в 90% случаев выбирать лучший вариант по результатам накопленной к настоящему моменту статистики.

Метод прост до гениальности.
Читать дальше →

Введение в модулярную арифметику

Время на прочтение6 мин
Количество просмотров80K
В обычной жизни мы обычно пользуемся позиционной системой счисления. В позиционной системе счисления значение каждого числового знака (цифры) в записи числа зависит от его позиции (разряда) [1]. Однако существуют и так называемые «непозиционные системы счисления», к одной из которых относится «система остаточных классов» (СОК) (или в оригинале Residue Number System (RNS)), являющаяся основой модулярной арифметики. Модулярная арифметика базируется на «Китайской теореме об остатках» [2], которая для нашего случая звучит следующим образом:
Для любой системы взаимно простых чисел p1, … pn, любое число X из диапазона [0; M), где M = p1*p2*…*pn взаимооднозначно представимо в виде вектора (a1, a2, …, an), где ai = X%pi (здесь и далее «%» — операция взятия остатка от целочисленного деления X на pi).
p1, … pn – модули системы
a1, a2, …, an – остатки (вычеты) числа по заданной системе модулей

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

Нейросети для чайников. Часть 2 — Перцептрон

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

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

Язык программирования, на этот раз — C#.
Заинтересовавшихся прошу под кат.
Читать дальше →

Russian Code Cup 2012: подробный разбор задач с первой квалификации

Время на прочтение12 мин
Количество просмотров29K
27 мая завершился первый этап олимпиады Mail.Ru Group по программированию Russian Code Cup 2012. Всего в RCC’12 приняло участие более тысячи человек, из которых 200 лучших вышло в полуфинал соревнования, в отборочный раунд. Победителем первого квалификационного раунда стал студент мехмата ННГУ Владислав Епифанов из Нижнего Новгорода. Участниками было направлено 3391 решение, из которых 1066 были приняты системой как верные. 634 человека или 63% от общего числа участников, решили хотя бы одну задачу.

Russian Code Cup — индивидуальное соревнование по спортивному программированию, ежегодно проводимое Mail.Ru Group. Оно традиционно состоит из трех этапов: в начале лета проходят три квалификационных раунда, затем лучшие принимают участие в отборочном туре, первые пятьдесят победителей отборочного тура соревнуются в финале. Личного присутствия потребует только последний из них, остальные же проводятся онлайн. Все финалисты будут отмечены ценными подарками, а приз участнику, занявшему первое место, составит 10 000 долларов. За второе и третье место полагаются 5 000 и 3 000 долларов.

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

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