Pull to refresh
  • by relevance
  • by date
  • by rating

Участники хакатона разработали алгоритм для поиска информации в газетах военных лет

Algorithms *Hackathon
image

Российская государственная библиотека и «Школа 21» провели онлайн-хакатон по прикладному применению средств алгоритмической обработки текстов на русском языке. Его участники создали алгоритм поиска необходимых данных в текстах подшивок газеты «Красная звезда» за 1941-1945 гг.
Total votes 5: ↑4 and ↓1 +3
Views 1.3K
Comments 1

Нигма индексирует по-новому

Search engines *
Нигма опять зажгла — запустила новый алгоритм индексации сайтов. Он похож на то, что Нигма запускала на прошлой неделе, но теперь информация извлекается из большего количества сайтов и подмешивается прямо в выдачу.

В результате Нигма увеличила количество вопросов, на которые она отвечает, и при этом сниппеты более информативные — скажем, про Анну Семенович Нигме теперь известен не только размер груди:
анна семенович семейное положение
Читать дальше →
Total votes 77: ↑66 and ↓11 +55
Views 730
Comments 70

Поиск нечетких дубликатов. Алгоритм шинглов для веб-документов

Algorithms *
Ранее я показал элементарную реализацию алгоритма шинглов, позволяющую определять, являются ли два документа почти дубликатами или нет. В этот раз я поясню реализацию алгоритма, описанную Зеленковым  Ю. Г. и Сегаловичем И.В. в публикации «Сравнительный анализ методов определения нечетких дубликатов для Web-документов».
Этим я начинаю серию из трех теоретических статей, в которых постараюсь доступным языком описать принцип алгоритмов шинглов, супершинглов и мегашинглов для сравнение веб-документов.
Читать дальше →
Total votes 55: ↑53 and ↓2 +51
Views 39K
Comments 103

Только 10% программистов способны написать двоичный поиск

Algorithms *
Дональд Кнут (известный тем, что его книги никто не читает) пишет, что хотя первый двоичный поиск был опубликован в 1946 году, первый двоичный поиск без багов был опубликован только в 1962.

Алгоритм двоичного поиска похож на то, как мы ищем слово в словаре. Открываем словарь посередине, смотрим в какой из половин будет нужное нам слово. Допустим, в первой. Открываем первую часть посередине, продолжаем половинить, пока не найдем нужное слово.

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

Так вот я это к чему...
Total votes 167: ↑141 and ↓26 +115
Views 78K
Comments 538

Как же все-таки правильно написать двоичный поиск?

Algorithms *
В обсуждениях статьи Только 10% программистов способны написать двоичный поиск так никто и не написал, как же правильно подойти к решению этой задачи.
Если мы не хотим использовать циклический метод «гадание, затем тестирование, затем исправление ошибок», то без инварианта цикла здесь не обойтись.
Инвариант цикла – это соотношение, которое истинно перед циклом, истинно в процессе выполнения цикла и истинно при выходе из цикла. Все это описано у Дейкстры в книге «Дисциплина программирования», и детально разжевано у Гриса в книге «Наука программирования». Тем не менее, по моим наблюдениям, на практике этот метод практически НИКТО не использует, считая, что все это к реальности не имеет никакого отношения. Это большая ошибка.
Читать дальше →
Total votes 41: ↑30 and ↓11 +19
Views 12K
Comments 23

Нечёткий поиск в тексте и словаре

Algorithms *

Введение


Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
  • Расстояние Левенштейна
  • Расстояние Дамерау-Левенштейна
  • Алгоритм Bitap с модификациями от Wu и Manber
  • Алгоритм расширения выборки
  • Метод N-грамм
  • Хеширование по сигнатуре
  • BK-деревья
А также проведу сравнительное тестирование качества и производительности алгоритмов.
Читать дальше →
Total votes 171: ↑170 and ↓1 +169
Views 221K
Comments 33

В Google появилась новая функция для блокирования отдельных сайтов в персональной выдаче

IT-companies


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

Читать дальше →
Total votes 66: ↑56 and ↓10 +46
Views 1.2K
Comments 40

Обновления алгоритмов Google — Inside Search

IT-companies
image
Компания Google регулярно публикует в официальном блоге информацию о нововведениях и изменениях поисковых алгоритмов и форматов выдачи. Десятка нововведений и изменений этого месяца:
  1. Уточнение результатов по связанным запросам. «Иногда поисковик «подмешивает» в выдачу результаты для запросов, похожих на тот, что вводит пользователь. Изменение алгоритма призвано регулировать позиции таких запросов в выдаче, не давая результатам занимать высокие позиции в случаях, когда изначальный запрос содержит редкое слово, которое было исключено в альтернативном запросе. К примеру, если пользователь ввел запрос [rare red widgets] (редкие красные виджеты), то он, вероятно, мало заинтересуется ссылками на страницы, где упоминаются просто «красные виджеты» — комментирует Мэтт Катс.
Читать дальше →
Total votes 35: ↑30 and ↓5 +25
Views 461
Comments 12

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

Website development *MySQL *Algorithms *
Не так давно для создания сервиса (да и «в загашник» положить модуль) потребовалось придумать способ как быстро из sql базы делать выборки точек расположенных на карте.
Кода будет мало, что бы не отвлекать от понимания системы в целом.



Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Views 14K
Comments 69

Алгоритм поиска пути Jump Point Search

Algorithms *
Sandbox
Этот алгоритм является улучшенным алгоритмом поиска пути A*. JPS ускоряет поиск пути, “перепрыгивая” многие места, которые должны быть просмотрены.  В отличие от подобных алгоритмов JPS не требует предварительной обработки и дополнительных затрат памяти. Данный алгоритм представлен в 2011 году, а в 2012 получил высокие отклики. Что из себя представляет данный алгоритм и его реализацию можно прочитать дальше в статье.


Читать дальше →
Total votes 110: ↑108 and ↓2 +106
Views 116K
Comments 37

Применяем на практике знания, полученные на курсе MIT 6.00x (edx.org)

Python *Algorithms *
В комментариях к моему посту про курс 6.002x MITx мне задавали вопрос — пригодилось ли изученное в жизни. И я отвечал — да, конечно, вот тут утром пока зубы чистил, RC-константу посчитал… Но пруфов не было. С тех пор я закончил еще два курса — UC Berkeley CS188.1x Introduction to Artificial Intelligence (открыта регистрация на 18 февраля) и MITx: 6.00x Introduction to Computer Science and Programming. И если после CS188.1x я просто был полон эмоций и не знал, куда бы приткнуть свежеполученные знания (кроме как решить задачу о ходе коня), то после прохождения 6.00x подвернулся случай блеснуть.
Читать дальше →
Total votes 35: ↑31 and ↓4 +27
Views 21K
Comments 36

На какие вопросы можно ответить, проанализировав 1 500 000 уникальных историй болезней?

Search engines *
Существует ли связь между астмой и шизофренией?
Диабет и биполярное расстройство личности — могут ли они иметь что-то общее?
Сможет ли выявить столь нетривиальные связи анализ базы данных по 1500000 пациентов США?

предупреждение: под катом очень много текста
Читать дальше →
Total votes 88: ↑77 and ↓11 +66
Views 48K
Comments 14

Поиск кратчайшего пути в транспортном графе (концепт) + исходники

Algorithms *
Sandbox
Был как-то проект у меня, который был связан с картой города. И возникла идея, что раз есть карта с маршрутами и соответствующими остановками городского транспорта, то почему бы не сделать поиск пути из пункта А в пункт Б на ней.

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

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

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

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

За несколько месяцев алгоритм переписывался пару раз, далее поподробнее расскажу о последней реализации.

Качество видео ужас, но как сделать получше я так и не обнаружил.



Усредненное время, затрачиваемое на выполнение шагов:

gpt — 0.009с, найти ближайшие остановки к точке клика
grt — 0.001с, найти кратчайший путь от маршрута к маршруту
apt — 0.0001с, добавляем остановки и точки поворота к нашему маршруту
all — 0.01c, суммарное время выполнения поиска пути
Читать дальше →
Total votes 48: ↑41 and ↓7 +34
Views 20K
Comments 4

Алгоритм поиска путей в лабиринте

Programming *Algorithms *
Sandbox
Доброго времени суток, уважаемое сообщество.

Предыстория



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

Вот собственно и он:




Рабочий день был скучный, настроение было отличное. Цель, средства и желание имеются. Вывод очевиден, будем проходить.

Кого заинтересовал, прошу под кат
Total votes 65: ↑41 and ↓24 +17
Views 115K
Comments 100

Алгоритм Ахо-Корасик

Programming *C++ *Algorithms *
Sandbox

Вступление


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

Начальное описание


Алгоритм Ахо-Корасик реализует эффективный поиск всех вхождений всех строк-образцов в заданную строку. Был разработан в 1975 году Альфредом Ахо и Маргарет Корасик.
Опишем формально условие задачи. На вход поступают несколько строк pattern[i] и строка s. Наша задача — найти все возможные вхождения строк pattern[i] в s.

Суть алгоритма заключена в использование структуры данных — бора и построения по нему конечного детерминированного автомата. Важно помнить, что задача поиска подстроки в строки тривиально реализуется за квадратичное время, поэтому для эффективной работы важно, чтоб все части Ахо-Корасика ассимптотически не превосходили линию относительно длинны строк. Мы вернемся к оценке сложности в конце, а пока поближе посмотрим на составляющие алгоритма.
Читать дальше →
Total votes 69: ↑66 and ↓3 +63
Views 75K
Comments 16

Ханойская башня на пальцах

Algorithms *
image Пообщавшись с некоторыми знакомыми программистами, внезапно обнаружил, что не все знают про Ханойскую башню, а среди тех кто знает — мало кто понимает как решается эта задача.
Википедия по этому поводу пишет очень строго, по делу, и ничего не объясняет. Мол принимайте как прописную истину. Поэтому понять как она решается — сходу трудновато. А ведь задача очень простая, и между тем интересная в программировании и математически.

В статье будет много картинок. Объяснение как решать задачу рекурсивно и как она решается бинарным поиском.
В общем статья посвящается тем смелым, кто пока еще боится Ханойской башни, но хочет перестать её бояться.
Да, я такой
Total votes 66: ↑61 and ↓5 +56
Views 190K
Comments 29

Алгоритмы и структуры данных поиска. Лекции и курсы от Яндекса

Яндекс corporate blog Algorithms *
Tutorial
Сегодня мы завершаем новогоднюю серию постов, посвященных лекциям Школы анализа данных. Последний по порядку, но никак не по важности курс — «Алгоритмы и структуры данных поиска».

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

Мы учли то, о чём нас просили в комментариях к прошлым курсам — теперь при желании можно не только смотреть/скачивать лекции по отдельности, но и загрузить всё разом в виде открытой папки на Яндекс.Диске. Кстати — в предыдущих постах тоже появились такие же апдейты (вот ссылки для удобства: «машинное обучение», «дискретный анализ и теория вероятностей», «параллельные и распределённые вычисления»).



Лекции читает Максим Александрович Бабенко, заместитель директора отделения computer science, ассистент кафедры математической логики и теории алгоритмов механико-математического факультета МГУ им. М. В. Ломоносова, кандидат физико-математических наук.
Содержание курса, тезисы лекций и ссылки на видео
Total votes 115: ↑108 and ↓7 +101
Views 144K
Comments 18

Реализация алгоритма шинглов на Node.JS. Поиск нечетких дубликатов для английских текстов

Website development *Algorithms *Node.JS *
Sandbox
При работе с информацией часто возникают задачи парсинга веб-страниц. Одной из проблем в этом деле является определение похожих страниц. Хороший пример такого алгоритма — «Алгоритм шинглов для веб-документов».

Часть проекта по парсингу реализована на Node.JS, поэтому и алгоритм нужно было реализовать на нем. Реализаций на javascript или npm-пакетов я не нашел — пришлось писать свою.
Читать дальше →
Total votes 20: ↑16 and ↓4 +12
Views 9.7K
Comments 8

R*-tree или индексация геопространственных данных

Algorithms *
Sandbox
Приветствую вас, хабражители!
В этом посте пойдет речь о геопростарнственной индексации, а именно о такой структуре данных как R*-tree и о том, как я реализовал свой первый проект.
Читать дальше →
Total votes 54: ↑53 and ↓1 +52
Views 29K
Comments 15

Оптимизация для начинающих, или о пользе профилирования

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

Что из этого получилось приглашаю начинающих программистов почитать, а опытных обсудить.
Читать дальше →
Total votes 31: ↑19 and ↓12 +7
Views 16K
Comments 43
1