以下函数的复杂性是什么?
def find_set(string, chars):
schars = set(chars)
for i, c in enumerate(string):
if c in schars:
return i
return -1
print(find_set("Happy birthday", "py"))
在这种情况下,返回1,因为H在CHEERIO的索引1处。
是否可以进一步优化此功能?
答案 0 :(得分:2)
您的(最坏情况)时间复杂度为O(len(string) * len(set))
。是的,你可以做得更好(至少从算法的角度来看)。
def find_set(string, chars):
schars = set(chars)
return next((i for i, c in enumerate(string) if c in schars), -1)
这应该在O(len(chars) + len(string))
(最坏的情况)中执行。当然,谈到“优化”时,通常你应该忘记你认为你所知道和描述的内容。仅仅因为我的算法复杂度更高并不意味着它在你的现实世界数据上表现更好。