这个 python 包含切片操作的函数的时间复杂度是多少?
What is the time complexity of this python function which includes slice operations?
我正在学习 python 切片操作,我决定编写一个简单的函数来遍历 window 大小为 k 的字符串,并将 window 添加到字典中以其频率。因此,例如,如果字符串输入为“abab”且 k 为 2,则字典将包含“ab:2”和“ba:1”。
我很困惑这个函数的时间复杂度是多少:
代码中,s为输入字符串,k为window大小。
def test_func(s, k):
d = {}
for i in range(len(s) - k + 1):
sub_str = s[i:i+k]
if sub_str in d:
d[sub_str] += 1
else:
d[sub_str] = 1
return d
我认为它的时间复杂度为 O(n * k),space 它的复杂度为 O(n),其中 n 是列表的大小,k 是 [=22 的大小=] 但我不确定它是否正确。您能否查看该功能并让我知道我的分析是否正确?谢谢!
时间和space都应该是O(n*k)
。
查找大小为k
的字典键是O(k)
,因为你要散列k
,这需要读取k
的所有字符。虽然我们经常将字典和查找设置为分摊常数时间,但我认为当字典键大小是参数之一时我们不能使用这种简化。
由于您执行这些查找 O(n)
次,时间复杂度为 O(n*k)
。
由于所有的键都必须存储在字典中,最坏的情况是没有重复的切片,因此字典可能必须包含 n*k
个键。
我正在学习 python 切片操作,我决定编写一个简单的函数来遍历 window 大小为 k 的字符串,并将 window 添加到字典中以其频率。因此,例如,如果字符串输入为“abab”且 k 为 2,则字典将包含“ab:2”和“ba:1”。
我很困惑这个函数的时间复杂度是多少:
代码中,s为输入字符串,k为window大小。
def test_func(s, k):
d = {}
for i in range(len(s) - k + 1):
sub_str = s[i:i+k]
if sub_str in d:
d[sub_str] += 1
else:
d[sub_str] = 1
return d
我认为它的时间复杂度为 O(n * k),space 它的复杂度为 O(n),其中 n 是列表的大小,k 是 [=22 的大小=] 但我不确定它是否正确。您能否查看该功能并让我知道我的分析是否正确?谢谢!
时间和space都应该是O(n*k)
。
查找大小为k
的字典键是O(k)
,因为你要散列k
,这需要读取k
的所有字符。虽然我们经常将字典和查找设置为分摊常数时间,但我认为当字典键大小是参数之一时我们不能使用这种简化。
由于您执行这些查找 O(n)
次,时间复杂度为 O(n*k)
。
由于所有的键都必须存储在字典中,最坏的情况是没有重复的切片,因此字典可能必须包含 n*k
个键。