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

Алгоритмы *

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

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

Просто о Хиндли-Милнере

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

Введение


Robert MilnerЕсли вы когда-нибудь интересовались не слишком популярными языками, то должно быть слышали о «Хиндли-Милнере». Этот алгоритм вывода типов используются в F# и Haskell и OCaml, как и в их предшественнике ML. Некоторые исследователи даже пытаются использовать ХМ для оптимизации динамических языков вроде Ruby, JavaScript и Clojure.

И не смотря на его распространенность, до сих пор не было простого и понятного объяснения, что же это такое. Как же эта магия работает? Всегда ли выводимые типы будут верными? Или чем Хиндли-Милнер лучше, скажем, Java? И пока те, кто действительно знает что такое ХМ будут восстанавливаться от очередного умственного перенапряжения, мы попробуем разобраться в этом сами.
Читать дальше →

Алгоритм нахождения N первых простых чисел

Время на прочтение9 мин
Количество просмотров31K
В процессе обучения программированию я столкнулся с задачей поиска 1M первых простых чисел.

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

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

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

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

Умножение длинных чисел методом Карацубы

Время на прочтение7 мин
Количество просмотров99K
На днях нужно было разобраться с этим алгоритмом, но беглый поиск в google ничего путнего не дал. На Хабре тоже нашлась только одна статья, которая мне не особо помогла. Разобравшись, попробую поделиться с общественностью в доступной форме:
Читать дальше →

Генерация аналитических поверхностей на примере карт. Часть 3

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

Введение


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

PageRank-сеть разнородных объектов

Время на прочтение2 мин
Количество просмотров1.1K
Данная заметка является развитием предыдущего текста, "Проблемы обобщения PageRank". Суть в том, чтобы более-менее полноценно рейтинговать людей с помощью алгоритма PageRank. Почему именно PageRank? Ну, конечно можно составить что-то типа суммы-анкеты из разных слагаемых и вычислять ее для каждого пользователя. Например, образование среднее столько-то баллов, высшее столько-то, должность офисный планктон столько-то, топ-менеджер столько-то, ученая степень есть/нету, опыт работы столько-то лет (вычисляем функцию от количества лет), рейтинг на Хабре такой-то, количество френдов в Фейсбуке столько-то и т. д. и т. п. Мало что список получится длинным и непонятно, учтете ли вы все наиболее значимые факторы. Но понадобится еще каким-то образом (скорее «на глазок») определить коэффициенты значимости при каждом слагаемом, и это тоже задача. Метод PageRank дает на мой взгляд любопытный способ решить эту последнюю задачу.
Читать дальше →

Генерация аналитических поверхностей на примере карт. Часть 2

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

Введение


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

Генерация аналитических поверхностей на примере карт

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

Введение


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

Fast flux DNS или новые технологии киберпреступности

Время на прочтение6 мин
Количество просмотров27K
С одной из наиболее активных угроз мы сталкиваемся сегодня в интернете — это кибер-преступность.Все чаще преступники разрабатывают более совершенные средства получения прибыли от онлайновой преступной деятельности. Эта статья демонстрирует рост популярности, сложного метода, называемый Fast-Flux сети, который, как мы наблюдаем, находит все более широкое применение в «дикой природе». Fast-Flux сети — сети взломанных компьютерных систем с публичными записями DNS, которые постоянно меняются, в некоторых случаях каждые 3 минуты. Постоянно меняющаяся архитектура, делает гораздо более трудным слежение за преступной деятельностью и закрытые оной.
Читать дальше →

Реализация нечеткого поиска

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


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

В данной статье описывается возможная реализация нечеткого поиска, которая была применена для поиска на сайте edatuda.ru.
Читать дальше →

Еще одна версия алгоритма сравнения изображений

Время на прочтение4 мин
Количество просмотров31K
Эта статья с месяц висела у меня в черновиках, пока кто-то мне наконец не привел карму к тонусу. Не знаю кто, но спасибо тебе

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

Алгоритм нахождения простых чисел

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

Оптимизация алгоритма нахождения простых чисел


2 3 5 7 11 13 17 19 23 29 31… $250.000…

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

Алгоритм был придуман и тутже реализован на изучаемом языке. Программа запрашивала у пользователя число N и искала все простые числа до N включительно. После первого успешного теста сразу же возникло непреодолимое желание ввести N = «много». Программа работала, но не так быстро как хотелось бы. Естественно, дело было в многочисленных проверках (порядка N*N/2), поэтому пришлось избавиться от лишних. В итоге получилось 5 похожих алгоритмов каждый из которых работал быстре предыдущего. Недавно захотелось их вспомнить и реализовать, но на этот раз на Python.
Читать дальше →

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

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

Однажды я был поражён одним из удивительных свойств голограммы, которое заключается в том, что разбив голографический снимок объекта на осколки, по каждому из осколков можно восстановить изображение всего объекта, правда с несколько ухудшенным качеством. Прочитав топик «Эксперимент с голографическим кодированием и декодированием информации» товарища eresik я непременно сам захотел реализовать подобную цифровую голограмму. Взяв за основу его алгоритм, я запустил Delphi и принялся за дело. Наконец, немного повозившись с коэффициентами, я стал получать адекватные чёрно-белые картины похожие на те, которые получал eresik. При затирании части голограммы, как ни удивительно, исходное изображение восстанавливалось! Так каким же образом это может происходить? Я попытаюсь рассказать, как можно наглядно объяснить это свойство голограммы, не вдаваясь в физику и математику.
Читать дальше →

Парсер формул с помощью метода рекурсивного спуска

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


Доброго времени суток, уважаемые Хабровчане!

Хочу поделится с вами реализацией алгоритма «Метод рекурсивного спуска» на примере написания парсера формул с поддержкой переменных и функций на языке Java

Эта статья в (скорее всего, во всяком случае я надеюсь :) ) будет интересна для новичков, или кому-то применить как фундамент для своего решения данной задачи.
Кому интересно — прошу под кат
Читать дальше →

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

Без запаха фильтрации и нелинейного оценивания*

Время на прочтение9 мин
Количество просмотров37K
image * от англ. «unscented filtering and nonlinear estimation» (by Переводчик Google)
По просьбе dmitriyn решил опубликовать свое видение на так называемый «Unscented Kalman filter», который является распространением линейной фильтрации Калмана на случай, когда уравнения динамики и наблюдения системы нелинейны и не могут быть адекватно линеаризованы.
Как название данного метода фильтрации «кошерно» удобочитаемо переводится на русский я пока не знаю, что отражено в названии статьи, поэтому решил просто скопипастить довольно забавный, на мой взгляд, машинный перевод. Еще одна забавная версия перевода — нечуткий фильтр.
Под катом моя попытка по-простому рассказать про UKF

Двоичные таблицы Юнга

Время на прочтение7 мин
Количество просмотров3.3K
Итак, как и обещал, продолжение темы о таблицах Юнга. Напомню, что под таблицей Юнга понимается числовая матрица, обладающая некоторыми специальными свойствами. Матрица – это двумерный массив. И вот тут должен возникнуть естественный вопрос – а почему, собственно, массив должен быть двумерным? А что, если мы попробуем реализовать на тех же принципах таблицу размерности три, или четыре, а лучше всего, конечно, пять звездочек! О том, куда приведет нас такое обобщение, можно прочитать под катом…
Читать дальше →

Алгоритм Карацубы для умножения двух чисел

Время на прочтение3 мин
Количество просмотров28K
Как-то раз пришлось реализовывать умножение длинных чисел, через половинки их представления на C++. 128-битные числа были представлены как пара 64-битных. Оказалось что перемножить два 128-битных числа и получить все 256 бит результата по сложности сравнимо с 4-мя произведениями 64-битных половинок. Как же это работает…

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

Таблицы Юнга в задачах поиска и сортировки

Время на прочтение6 мин
Количество просмотров7.6K
Таблицы Юнга являются широко известным (в узких кругах) типом объектов, изучаемых в комбинаторике и смежных науках: ссылка, ссылка, книжка. Ниже рассматривается применение частного вида таблиц Юнга применительно к таким стандартным алгоритмическим задачам, как поиск и сортировка. С этой точки зрения таблицы Юнга весьма близки пирамидам, собственно так они и позиционируются в учебнике Кормена и ко (упражнения в разделе, посвященном пирамидам).
Читать дальше →

Определение площади сложной фигуры с помощью теории вероятностей

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

Зачем определять площадь сложной фигуры?


Да мало ли зачем. Например, возникла необходимость определить площадь территории на карте. Конечно, можно посмотреть в справочнике или поискать в интернете, но иногда и территории бывают нестандартными — допустим, вы озаботились проблемами лесов в пойме Амазонки и хотите ежемесячно измерять площадь зелёных пятен на фотографиях со спутника. Если вы ботаник (в хорошем смысле слова), то вам может понадобиться измерить площадь листовой поверхности разных сортов одного растения. Или, к примеру, более прозаичная задача — нужно зашпатлевать кусок стены, а банки шпатлёвки хватает только на 1 кв. м. — нужно выяснить, покупать одну банку или раскошелиться на две.

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

Создание синтаксического анализатора (парсера) по контекстно-свободным грамматикам

Время на прочтение3 мин
Количество просмотров12K
Пару лет назад я собирался написать интерпретатор Пролога на Delphi. Я решил начать с создания парсера. Написание анализатора специально под Пролог показалось мне жутко сложным, казалось, легче будет написать универсальный анализатор и синтаксис Пролога к нему. Ну, так как это все безумно сложно и долго, я забросил эту задумку. А вот парсер остался. Здесь я расскажу про его написание.

Цель: написать синтаксический анализатор, поддерживающий контекстно-свободные грамматики. Также парсер может выполнять какие-то действия (связанные, например, с интерпретацией) в процессе анализа — т. н. «пользовательская часть» парсера.

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

Визуальная демонстрация алгоритмов машинного обучения

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


Кандидат наук из Федеральной политехнической школы Лозанны Басилио Норис создал замечательную программу, которая великолепно подходит для демонстрации некоторых задач, которые решают алгоритмы машинного обучения (классификация, кластеризация, регрессия — различными методами). В одной программе собраны библиотеки, алгоритмы и фрагменты кода, которые удалось найти. В отличие от Matlab, здесь GUI работает быстро в интерактивном режиме, поэтому получается очень красиво.

Дистрибутив:
MLDemos 0.3.2 for Windows (минимальные требования: XP SP3)
MLDemos 0.3.2 for Mac (минимальные требования: Snow Leopard)
MLDemos 0.1.3 for Linux 32bit (deb) (билд для: Ubuntu 10.04)

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