Вопрос. Напишите функцию, называемую answer (document, searchTerms), которая возвращает самый короткий фрагмент документа, содержащий все заданные условия поиска. Условия поиска могут отображаться в любом порядке.Сокращение временной сложности этой программы
Inputs:
(string) document = "many google employees can program"
(string list) searchTerms = ["google", "program"]
Output:
(string) "google employees can program"
Inputs:
(string) document = "a b c d a"
(string list) searchTerms = ["a", "c", "d"]
Output:
(string) "c d a"
Моя программа ниже дает правильный ответ, но время сложность очень высока, так как я делаю декартово произведение. Если вход очень высок, я не могу очистить эти тестовые примеры. Я не могу уменьшить сложность этой программы, и любая помощь будет принята с благодарностью. Благодаря
import itertools
import sys
def answer(document, searchTerms):
min = sys.maxint
matchedString = ""
stringList = document.split(" ")
d = dict()
for j in range(len(searchTerms)):
for i in range(len(stringList)):
if searchTerms[j] == stringList[i]:
d.setdefault(searchTerms[j], []).append(i)
for element in itertools.product(*d.values()):
sortedList = sorted(list(element))
differenceList = [t - s for s, t in zip(sortedList, sortedList[1:])]
if min > sum(differenceList):
min = sum(differenceList)
sortedElement = sortedList
if sum(differenceList) == len(sortedElement) - 1:
break
try:
for i in range(sortedElement[0], sortedElement[len(sortedElement)-1]+1):
matchedString += "".join(stringList[i]) + " "
except:
pass
return matchedString
Если кто-то хочет, чтобы клонировать мою программу здесь code
Лучше подходит для [codereview.stackexchange.com] (http://codereview.stackexchange.com) –
I добавили вопрос там. Спасибо – python
Любая помощь в отношении временной сложности программы? Любое предложение? – python