Main menu

Алгоритм Кнута-Морриса-Пратта: Быстрый поиск в тексте

Задача поиска слова (паттерна) внутри большого текста (строки) — одна из самых частых в компьютерных науках. Наивный алгоритм, который мы бы написали интуитивно, прикладывает паттерн к началу текста, сравнивает символы, и при несовпадении сдвигает паттерн ровно на одну позицию вправо, начиная проверку с нуля. В худшем случае (например, поиск паттерна "ААААВ" в строке "АААААААААВ") этот метод работает за время O(N*M), что неприемлемо. Алгоритм КМП решает эту проблему за строго линейное время O(N+M).

Подробнее

Алгоритм A* (А-звездочка): Интеллектуальный поиск пути

Алгоритм Дейкстры гарантированно находит кратчайший путь на графе, но он делает это "вслепую". Дейкстра исследует все возможные направления во все стороны (подобно кругам на воде), пока случайно не наткнется на финишную точку. Это крайне неэффективно для навигационных систем и компьютерных игр, где персонажу нужно дойти из точки А в точку Б на огромной карте. В 1968 году Питер Харт, Нильс Нильсон и Бертрам Рафаэль разработали алгоритм A* — вершину эволюции алгоритмов поиска пути.

Подробнее

Коды Грея: Безопасные переходы в цифровых системах

В классической двоичной системе счисления переход от одного числа к следующему может потребовать изменения сразу нескольких битов. Например, при переходе от числа 3 (011 в двоичной записи) к числу 4 (100) меняются все три бита. В идеальном математическом мире это не проблема, но в реальной микроэлектронике и электромеханических датчиках биты не переключаются абсолютно синхронно. Возникает опасный момент, когда система может выдать ложное промежуточное значение. Решение этой проблемы лежит в использовании специальной кодировки — кода Грея.

Подробнее

Соц. сети