Скачиваний:
10
Добавлен:
10.11.2023
Размер:
2.11 Кб
Скачать
import time


def bad_char_table(pattern):
    table = {}
    for i in range(len(pattern) - 1):
        table[pattern[i]] = len(pattern) - 1 - i
    return table


def search_pattern(text, pattern, case_sensitive=True):
    if not case_sensitive:
        text = text.lower()
        pattern = pattern.lower()

    n = len(text)
    m = len(pattern)

    if n < m:
        return -1

    bad_char = bad_char_table(pattern)

    i = m - 1
    while i < n:
        j = m - 1
        while j >= 0 and text[i] == pattern[j]:
            i -= 1
            j -= 1
        if j == -1:
            return i + 1
        else:
            i += max(1, bad_char.get(text[i], m))

    return -1

def main():
    text = input("Введите строку: ")
    pattern = input("Введите подстроку для поиска: ")
    case_sensitive = input("Учитывать регистр (да/нет): ").lower()

    if case_sensitive == 'да':
        case_sensitive = True
    else:
        case_sensitive = False

    start_time = time.time()
    result = search_pattern(text, pattern, case_sensitive)
    end_time = time.time()

    if result != -1:
        print(f"Подстрока найдена в позиции {result}")
    else:
        print("Подстрока не найдена")

    search_time = end_time - start_time
    print(f"Время выполнения поиска упрощенным методом Бойера-Мура: {search_time} секунд")

    start_time = time.time()
    if case_sensitive:
        result = text.find(pattern)
    else:
        result = text.lower().find(pattern.lower())
    end_time = time.time()

    if result != -1:
        print(f"Подстрока найдена в позиции {result}")
    else:
        print("Подстрока не найдена")

    python_search_time = end_time - start_time
    print(f"Время выполнения поиска методом Python: {python_search_time} секунд")


if __name__ == "__main__":
    main()
Соседние файлы в папке Лабораторные 1-5 для Вариант 19