У меня есть этот код на Python для поиска самой длинной подстроки. Я пытаюсь выяснить асимптотическое время его запуска, и я пришел к ответу, но я не уверен, что это правильно. Вот код:Попытка выяснить время выполнения моей функции
def longest_substring(s, t):
best = ' '
for s_start in range(0, len(s)):
for s_end in range(s_start, len(s)+1):
for t_start in range(0, len(t)):
for t_end in range(t_start, len(t)+1):
if s[s_start:s_end] == t[t_start:t_end]:
current = s[s_start:s_end]
if len(current) > len(best):
best = current
return best
Очевидно, что эта функция имеет очень медленное время работы. Это было спроектировано именно так. Мой подход заключался в том, что, поскольку существует цикл for с еще тремя вложенными петлями, время выполнения - это что-то вроде O (n^4). Я не уверен, что это правильно из-за того, что не каждый цикл повторяется по размеру ввода. Кроме того, предполагается, что s = t = n (размер ввода). Есть идеи?
O (n^4) выглядит правильно - помните, что большой O - это наихудшая сложность для очень больших входов. –
@TomDalton Спасибо за ответ. В первом вложенном цикле, является ли время выполнения только O (n)? Или разные диапазоны делают это чем-то еще? –
Обратите внимание, что цикл для 't_end' является избыточным; 't_end = t_start + s_end - s_start' или ваши подстроки будут иметь разную длину, что делает' s [s_start: s_end] == t [t_start: t_end] 'невозможным. –