Информация об изменениях

Сообщение Re[2]: Принудительный выход из рекурсии в случае, если ответ от 21.11.2020 18:57

Изменено 21.11.2020 18:59 Буравчик

Re[2]: Принудительный выход из рекурсии в случае, если ответ уж
Если функцию is_merge закэшировать, то получим рекурсию + динамику.
Это гарантируем максимальное время работы за O(N^2) от длины строки

from functools import lru_cache

@lru_cache()
def is_merge(s, part1, part2):
    if part1 == '':
        return s == part2
    if part2 == '':
        return s == part1
    if s == '':
        return False
    return s[0] == part1[0] and is_merge(s[1:], part1[1:], part2)            or s[0] == part2[0] and is_merge(s[1:], part1, part2[1:])


Потребляемую память можно уменьшить, если оперировать индексами (позициями символов), а не целыми строками
Re[2]: Принудительный выход из рекурсии в случае, если ответ
Если функцию is_merge закэшировать, то получим рекурсию + динамику.
Это гарантирует максимальное время работы за O(N^2) от длины строки

from functools import lru_cache

@lru_cache()
def is_merge(s, part1, part2):
    if part1 == '':
        return s == part2
    if part2 == '':
        return s == part1
    if s == '':
        return False
    return s[0] == part1[0] and is_merge(s[1:], part1[1:], part2)            or s[0] == part2[0] and is_merge(s[1:], part1, part2[1:])


Потребляемую память можно уменьшить, если оперировать индексами (позициями символов), а не целыми строками