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

Sdílet
Vložit
  • čas přidán 18. 05. 2018
  • Алгоритм Кнутта-Морриса-Пратта
    Реализация: gist.github.com/kehtolaulu/20...
    Сложность: O(n)
    Алгоритм Бойера-Мура-Хорспула (?)
    Реализация: gist.github.com/kehtolaulu/35...
    Один из способов реализации алгоритма Бойера-Мура - таблица смещения D. Для этого используется таблица ASCII, которая содержит 256 символов. Мы заводим массив размером 256.
    Изначально все элементы массива D - все двести пятьдесят шесть элементов - мы инициализируем числом равным длине образа, и после этого начинаем изменять значения в этом одномерном массиве следующим образом:
    каждой букве (в таблице кодов ASCII) соответствует некоторое значение.
    Таким образом массиве D мы можем в ячейки, которые соответствуют кодам символов записывать значение таблицы смещения D.
    Например, у нас есть 'д', значение этого символа 228, и вот в эту ячейку мы записываем значение 5.
    В 'a' значение таблицы смещения равно 4, а значение таблицы кодов ASCII 224.
    Вот в 224-ую ячейку массива D мы записываем 4.
    Таким образом, мы можем в дальнейшем, когда будем проходить по строке и получаем несовпадение, берем символ и строки, мы знаем его код, благодаря таблице ASCII, и в этой ячейке находим необходимое нам смещение. Таким образом, очень легко реализуется данный алгоритм.
    Сложность:
    В наихудшем случае строка содержит n одинаковых символов. Образ начинается с какого-то другого символа и потом идут эти же самые символы, которые представлены в строке. Всего символов в образе в m. В этом случае временная сложность алгоритма будет равна O( n * m ).
    В наилучшем случае строка содержит n каких-то символов, а образ содержит m других символов.
    В этом случае временная сложность алгоритма будет равна O( m / n ).
    В общем же случае временная сложность алгоритма будет O(m / |E|), где E это множество, которое включает себя все символы, которые могут быть представлены в строке и в образе. Это могут быть символ русского алфавита, латиницы, цифры, знаки препинания и другие символы, которые мы видели в таблице ASCII.

Komentáře • 36

  • @emilia-oc9ys
    @emilia-oc9ys  Před 2 lety +7

    Какое видео-объяснение ещё хотим? Пишите в комменты!

    • @captain_kobi7476
      @captain_kobi7476 Před 2 lety

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

  • @emilia-oc9ys
    @emilia-oc9ys  Před 4 lety +84

    КТО СМОТРИТ В 2020, ЛАЙК!

  • @user-kz6og5dv7j
    @user-kz6og5dv7j Před 5 lety +3

    прекрасний голос и обьяснение) большое спасибо

  • @user-xl5ny6tj1r
    @user-xl5ny6tj1r Před 4 lety +3

    Спасибо, наглядно!

  • @notempty8921
    @notempty8921 Před 4 lety +2

    Жаль, что таких видео мало.

  • @valeriaslobodchikova8541
    @valeriaslobodchikova8541 Před 2 lety +1

    очень понятно, спасибо! отдельная благодарность за код на java

  • @Sunses
    @Sunses Před 3 lety

    Респект))) перед сессией самое то смотреть)

  • @tarasst6887
    @tarasst6887 Před 2 lety +1

    Продолжайте!!

  • @user-uk9ti4ob7t
    @user-uk9ti4ob7t Před 6 lety +2

    все понятно спасибо

  • @user-fc3qo8xh6t
    @user-fc3qo8xh6t Před 3 lety

    Топ. Все быстро и понятно

  • @kiripcha
    @kiripcha Před 3 lety +2

    хочу такую же умную жену

  • @user-bn8if2rs3w
    @user-bn8if2rs3w Před 3 lety +11

    А ничего, что это алгоритм Бойера-Мура-Хорспула, а не Бойера-Мура?

    • @emilia-oc9ys
      @emilia-oc9ys  Před 2 lety

      спасибо, я не знала!

    • @lptpn
      @lptpn Před 2 lety

      Так он наверное и работает по другому тогда?? Держите в курсе, Алёна, очень важная информация)

  • @user-xl5ny6tj1r
    @user-xl5ny6tj1r Před 4 lety +1

    Да пусть хранит тебя джопс

  • @archangelLUCIFeeeerrrr
    @archangelLUCIFeeeerrrr Před 4 lety +6

    ничего не понятно что нашли ? а что искали?? но было интересно =)

    • @AlexanderRodionov95
      @AlexanderRodionov95 Před 4 lety +1

      них*я не понял, но ОЧЕНЬ интересно !!!

  • @dsmaps8393
    @dsmaps8393 Před 8 měsíci +1

    в названии видео один алгоритм, а реализуют другой

  • @leramalakhova2876
    @leramalakhova2876 Před 4 lety

    как такое на си написать? у кого-нибудь есть код?

    • @_catman_
      @_catman_ Před 4 lety

      Вот накидал велосипед с квадратными колёсами
      #include
      #include
      #include
      char* strrevchr(char* line, int len , const char chr);
      char* _strstr(char* haystack,char* needle);
      int main(int a,char** b){
      char* res=_strstr("Где ваши Данные?","Данные");
      puts(res);
      return 0;
      }
      char* _strstr(char* haystack,char* needle){
      int len = strlen(needle); //длина запроса /6
      char* end_adress = len + needle; //адрес конца
      char* table =(char*) malloc(len); //table
      //-- Составляем таблицу --
      for (int i=1; i

    • @_catman_
      @_catman_ Před 4 lety

      По алгоритму Бойера-Мура

  • @alexander7978
    @alexander7978 Před 4 lety

    ucode - top

  • @-Mysteri0usStranger-
    @-Mysteri0usStranger- Před 2 lety +3

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

    • @skeetybeefy
      @skeetybeefy Před rokem +2

      авторка

    • @wellplayed86
      @wellplayed86 Před rokem

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