set M = len(list1)
и N = len(list2)
Для каждой из N записей в list2
вам нужно будет выполнить M сравнений с записями в list1
.Это худшее время выполнения O(M x N)
.Если продолжить, давайте возьмем каждую запись в list2
длиной 1 и каждую запись в list1
длиной 300, тогда вы получите время выполнения O(300M x N)
.
Еслипроизводительность действительно проблема, попробуйте динамическое программирование.Вот начало:
1) сортировка list2
в порядке возрастания длины, например, так:
['scorch', 'scorching', 'dump', 'dumpster', 'dumpsters']
2) сортировка их в подсписки, так что каждая предшествующая запись является подмножествомследующая запись:
[['scorch', 'scorching'] , ['dump', 'dumpster', 'dumpsters']]
3) Теперь, если вы сравните с list1
, а 'scorch'
там нет, то вам не нужно искать 'scorching'
.Точно так же, если 'dump'
там нет, также нет 'dumpster'
или 'dumpsters'
, обратите внимание, что наихудшее время выполнения все равно