КОНЬЯКОВ.ру

Разработка и поддержка веб-сайтов на 1C-Bitrix. E-commerce компетенции. Опыт с 2007 года.

Страница 65 из 91

Python: Алгоритм Кнута–Морриса-Пратта (алгоритм поиска подстроки в строке)

Алгоритм Кнута-Морриса-Пратта, основанный на использовании префикс-функции. Как и в примитивном алгоритме поиска подстроки, образец «перемещается» по строке слева направо с целью обнаружения совпадения. Однако ключевым отличием является то, что при помощи префикс-функции мы можем избежать заведомо бесполезных сдвигов.

Пусть S[0..m–1] – образец, T[0..n–1] – строка, в которой ведется поиск. Рассмотрим сравнение строк на позиции i, то есть образец S[0..m–1] сопоставляется с частью строки T[i..i+m–1]. Предположим, первое несовпадение произошло между символами S[j] и T[i+j], где i < j < m. Обозначим P = S[0..j–1] = T[i..i+j–1]. При сдвиге можно ожидать, что префикс S сойдется с каким-либо суффиксом строки P. Поскольку длина наиболее длинного префикса, являющегося одновременно суффиксом, есть префикс-функция от строки S для индекса j, приходим к следующему алгоритму:

  • Построить префикс-функцию образца S, обозначим ее F.
  • Положить k = 0, i = 0.
  • Сравнить символы S[k] и T[i]. Если символы равны, увеличить k на 1. Если при этом k стало равно длине образца, то вхождение образца S в строку T найдено, индекс вхождения равен i – |S| + 1. Алгоритм завершается. Если символы не равны, используем префикс-функцию для оптимизации сдвигов. Пока k > 0, присвоим k = F[k–1] и перейдем в начало шага 3.
  • Пока i < |T|, увеличиваем i на 1 и переходим в шаг 3.
  • Возможная реализация алгоритма Кнута-Морриса-Пратта на языке Python выглядит так:

    Источник: habrahabr.ru/post/191454/

Сравнение смартфонов: Samsung Galaxy S4 Zoom -vs- Sony Xperia Z -vs- Apple iPhone 5 16Gb

 

Вычисление контрольной цифры штрих-кода EAN-13 на PHP

Необходимо было вычислить контрольную цифру штрих-кода EAN-13. Решение: написана функция на PHP

Подбираем генератор статических страниц для быстрого и надежного блога (Ruby, Python, Perl, Bash (Native Linux), PHP)

  1. http://blaze.blackened.cz/
  2. http://nanoblogger.sourceforge.net/
  3. http://blog.getpelican.com/
  4. http://calepin.co/
  5. http://www.marco.org/secondcrack
  6. https://aprescott.com/posts/serif
  7. http://anchorcms.com/
  8. http://www.phrozn.info/en/
  9. https://github.com/flatiron/blacksmith
  10. https://bitbucket.org/jek/blatter/
  11. https://github.com/benschwarz/bonsai
  12. http://www.blogofile.com/
  13. https://github.com/patcoll/cub
  14. https://github.com/inanimatt/site-builder#readme
  15. https://github.com/catnapgames/Tempo
  16. http://calepin.co/

What is Winsplit-Revolution?

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

Несколькими кликами горячих клавиш. Например хотим мы например распределить 2 окна поровну по экрану

  1. Включаем Num Lock
  2. Активируем нужное окно
  3. Зажимаем Ctrl+Alt+4 (на нумпаде)
  4. Это окно распределяется по левому краю

Так можно распределить окна по нужным сторонам, слева вверху, слева в центре, слева внизу… И так далее по центру и с правой стороны.

Очень полезная программа, советую!

scheme_2

Скачать программу (http://winsplit-revolution.com/download)

Читать далее…

Страница 65 из 91

© 2007–2026, konyakov.ru
☩