ДЗ: Алгоритм Бойера-Мура (отдельные части) * Реализовать функцию `FindPrefixes`, которая создает таблицу префиксов (примеры работы есть в материале): * Функция `FindPrefixes(string)` возвращает массив `Z` такой, что `Z[i]` содержит число, равное длине подстроки `S[i]`, котороая при этом является и префиксом `S`. Если такого префикса нет, то `Z[i]` будет 0. * Есть тест-кейсы: файл `preprocess_test_cases.txt`. Традиционно, первая строка - количество записей, первый столбец - строка, далее через пробел - записанные последовательно значения из таблицы префиксов для данной строки. * Реализовать алгоритм Бойера-Мура-Хорспула. * Для проверки есть тест-кейсы: `string_matching_test_cases.tsv`. Это .tsv без заголовка, но в первой строчке общее число записей. Первый столбец - текст (содержит пробелы), после первого таба - столбец с паттерном (также может содержать пробелы), в последнем столбце через пробел _все_ вхождения паттерна в текст, в том числе, перекрывающиеся частично. Если вхождений нет, столбец пуст. * (для тех, кто пишет на C): проверить работу алгоритма Бойера-Мура, реализация на С, [из википедии](https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string-search_algorithm#Implementations). Можно на предложенных тест-кесах, можно на своих. * [Реализация на Go](https://golang.org/src/strings/search.go) Критерии оценки: - алгоритм работает корректно - зачет, 3 балла - алгоритм работает корректно, но ассимптотически не за O(n) - 2 балла - за каждое доп. задание - 1 балл