Это видео недоступно.
Сожалеем об этом.

Алгоритм Бойера-Мура-Хорспула

Поделиться
HTML-код
  • Опубликовано: 12 авг 2024
  • Понятно и доходчиво об алгоритме поиска в строке - алгоритме Бойера-Мура-Хорспула. Данный алгоритм эффективно решает задачу поиска слова или фразы в тексте. Алгоритм состоит из двух этапов:
    1. Формирование таблицы смещения - 03:27
    2. Непосредственно поиск образа в строке - 10:32
    Кроме этого, в видео представлены:
    - оригинальный подход к реализации алгоритма - 11:35
    - анализ временной сложности алгоритма - 13:59

Комментарии • 56

  • @user-gp5tg8jp4u
    @user-gp5tg8jp4u Год назад +3

    Спасибо большое! Самое ясное объяснение данного алгоритма)

  • @user-or7xn1po2l
    @user-or7xn1po2l 4 года назад +4

    Большое спасибо!!! Просто, наглядно и понятно! Ваше видео очень помогло, наконец-то написала нормальный рабочий алгоритм поиска))

    • @romantsarev1145
      @romantsarev1145  4 года назад

      Пожалуйста! Ставьте лайк, подписывайтесь на канал )

  • @user-fz9zf9pd2e
    @user-fz9zf9pd2e 5 лет назад +2

    Роман, спасибо вам за такое понятное объяснение, благодаря вашим видео я наконец разобрался с такими алг как этот и КМП

  • @user-qj1fg7oz3i
    @user-qj1fg7oz3i 6 лет назад +14

    Крутое видео! А то читаешь и ничего не понимаешь))

  • @Rivrabobra
    @Rivrabobra 5 лет назад +1

    Вы отлично объясняете. Спасибо!

    • @romantsarev1145
      @romantsarev1145  5 лет назад +1

      Спасибо за лестную оценку.

  • @user-bn8if2rs3w
    @user-bn8if2rs3w 3 года назад

    Суупер! Спасибо😊 очень понятно и наглядно)

  • @rajahbtw
    @rajahbtw Год назад +1

    Спасибо большое, помогло

  • @user-vb4pm9kl5j
    @user-vb4pm9kl5j 3 года назад

    Спасибо! Очень понятно!

  • @user-xp8zi5bs1d
    @user-xp8zi5bs1d 4 года назад

    Супер! Спасибо!

  • @veronikabykova5494
    @veronikabykova5494 6 лет назад +1

    большое спасибо! теперь все точно уложилось в голове))

    • @romantsarev1145
      @romantsarev1145  6 лет назад +1

      Пожалуйста.

    • @veronikabykova5494
      @veronikabykova5494 6 лет назад

      Можно вопрос, а не нужно удалять пробелы, прежде чем применять алгоритм? То есть возможен вариант, когда сдвиг слова по таблице смещений поставит его так, что последний символ образа будет сравниваться с пробелом - что в таком случае?

    • @romantsarev1145
      @romantsarev1145  6 лет назад +1

      Прекрасный вопрос! Для ответа на него рассмотрим программную реализацию. При формировании массива d я использовал таблицу ASCII (11:50). Если взглянуть на нее, то можно увидеть, что пробел имеет код 32. То есть для ЭВМ пробел - это такой же символ как и любая буква, цифра, знак препинания (которые, естественно, имеют свои коды). Так что пробелы предварительно удалять не нужно. Более того, образ может быть не отдельным словом, а фразой и, конечно, будет содержать пробелы, которые тоже удалять не нужно.

  • @Federation1323
    @Federation1323 3 года назад

    выглядит как какая-то магия)))

  • @nicivanov5135
    @nicivanov5135 3 года назад

    Подскажите, алгоритм
    sha 256 тоже на сдвиге работает или другие алгоритмы использует?
    Нужно понять сам принцып работы hashlib.

    • @romantsarev1145
      @romantsarev1145  3 года назад

      Я не в курсе, если честно

    • @nicivanov5135
      @nicivanov5135 3 года назад

      @@romantsarev1145 ruclips.net/video/mbekM2ErHfM/видео.html

  • @yuriysosnovskiy2118
    @yuriysosnovskiy2118 3 года назад

    На сколько нужно сдвигать индекс при нахождении элемента, если нужно найти несколько вхождений?

    • @romantsarev1145
      @romantsarev1145  3 года назад

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

    • @yuriysosnovskiy2118
      @yuriysosnovskiy2118 3 года назад

      @@romantsarev1145 я увеличивал индекс і (тот, который идёт по строке) на значение из таблицы сдвигов последнего совпавшего символа. Вроде работает нормально.

  • @zedoo5699
    @zedoo5699 6 лет назад

    Спасибо, но кое что очень странно. В первом примере ты считаешь смещение относительно символов с строке, а во втором примере относительно образа

    • @romantsarev1145
      @romantsarev1145  6 лет назад +5

      Если при сравнении последнего символа образа и символа строки произошло несовпадение, то определяем сдвиг по символу строки (6:59);
      если же несовпадение произошло после того, как совпал ряд символов строки и образа, то сдвиг будет равен d, соответствующий последнему символу образа (9:17).

    • @zedoo5699
      @zedoo5699 6 лет назад +1

      Roman Tsarev сэнкс

    • @zedoo5699
      @zedoo5699 6 лет назад +1

      Roman Tsarev не знаю, почему то прозевал момент, когда вы рассказали об этом в видео

    • @qvv3r7y77
      @qvv3r7y77 5 лет назад +1

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

    • @par9325
      @par9325 2 года назад

      @@romantsarev1145 вот оно как. спасибо за уточнение

  • @valera16011990
    @valera16011990 5 лет назад

    Непонятно зачем в примере с метадата выносить как отдельный случай, можно обобщить, в случае несовпададеня образца и подстроки, смещение по самому правому элементу подсторки
    Аналогично с последний буквой образца, достаточно сказать что при создании таблицы сдвигов это последний элемент(несчитая "прочие") для которого мы создаем
    А так спасибо)

    • @romantsarev1145
      @romantsarev1145  5 лет назад +1

      Для наглядности. Пожалуйста.

  • @user-pv4ns7oz6h
    @user-pv4ns7oz6h 4 года назад

    Все сдвиги надо увеличить на 1. И выбирать сдвиг по следующему за концом образца символу строки.

    • @romantsarev1145
      @romantsarev1145  4 года назад

      Почему?

    • @user-pv4ns7oz6h
      @user-pv4ns7oz6h 4 года назад

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

    • @romantsarev1145
      @romantsarev1145  4 года назад

      При больших сдвигах важно мимо вхождения образа не проскочить. Не случится ли такого?

    • @user-pv4ns7oz6h
      @user-pv4ns7oz6h 4 года назад

      @@romantsarev1145 Не случится

    • @romantsarev1145
      @romantsarev1145  4 года назад

      @@user-pv4ns7oz6h Супер, если так!

  • @user-wl6mp6nk2m
    @user-wl6mp6nk2m Год назад

    Если несовпадающий символ не самый правый/последний в образе то
    1. У вас: смещение берём по последнему символк образа
    2. Вот тут ruclips.net/video/kvWFAZwZ_8U/видео.html : по несовпадающему символу образа
    3. А вот тут ruclips.net/video/N6G6HVwJ4wQ/видео.html : по несовпадающему символу СТРОКИ
    Почему такие разночтения ?

    • @romantsarev1145
      @romantsarev1145  Год назад

      Я от оригинальной статьи авторов алгоритма отталкивался. Про авторов других видео не скажу.

    • @user-wl6mp6nk2m
      @user-wl6mp6nk2m Год назад

      @@romantsarev1145 можете ссылку дать ?

  • @milhot
    @milhot 2 года назад +1

    автор живёт рядом с жд (просто факт)

  • @sominite
    @sominite 4 года назад

    9:08 фотошоп

    • @romantsarev1145
      @romantsarev1145  4 года назад

      В каком смысле? А так, все сделано в Power Point

    • @sominite
      @sominite 4 года назад

      @@romantsarev1145 ошибся

  • @alexanderginger754
    @alexanderginger754 3 года назад

    Ору, в случае когда нет ряда совпадений, сдвигаем по последнему символу строки, а если есть ряд совпадений, то сдвигаем по последнему символу образа, который РАВЕН последнему символу строки 👍👍👍
    А можно хотя бы разобраться в алгоритме прежде чем записывать видео?))))

    • @romantsarev1145
      @romantsarev1145  3 года назад

      Не ори, все там правильно. Давай временную метку, поясню, что там у тебя не сходится.

    • @romantsarev1145
      @romantsarev1145  3 года назад

      Не стал дожидаться ответа, раз у тебя возник такой вопрос, возможно и у других он появится.
      Первый случай 6:58
      При несовпадении символ в строке «н»,
      символ в образе «е»
      сдвиг определяем по символу строки «н».
      Второй случай 9:23
      При несовпадении символ в строке «е»,
      символ в образе «а»
      сдвиг определяем по последнему символу образа «а».
      В твоем комментарии-вопросе два существенных косяка:
      «Ору, в случае когда нет ряда совпадений, сдвигаем по последнему символу строки…». Не по ПОСЛЕДНЕМУ символу строки, а по ТЕКУЩЕМУ символу строки;
      «…, а если есть ряд совпадений, то сдвигаем по последнему символу образа, который РАВЕН последнему символу строки».
      Да, сдвигаем по последнему символу образа, он точно НЕ РАВЕН текущему символу строки, а равен он ПОСЛЕДНЕМУ символу строки или нет, нас не интересует.
      Нас вообще никогда не интересует ПОСЛЕДНИЙ символ строки. На последней итерации у него есть шанс стать текущим, но и тогда нам все равно последний он или нет, рассматриваем его так же, как рассматривали остальные символы строки до этого.
      Как ты вообще видео смотрел?!

    • @user-nc8iu3lc8e
      @user-nc8iu3lc8e 2 года назад +4

      @@romantsarev1145 у него аниме на аватарке, все нормально