假设我有data
一个迭代器,我想为它计算k
一个可迭代对象的连续元素,(elem_1, elem_2, ..., elem_k)
并为每个这样的“窗口”在字典中存储它遇到的次数,最有效的方法是什么?对于O(n)
.
示例:"abcabc", k = 3
,我们得到:
(a,b,c), (b,c,a), (c,a,b), (a,b,c)
因此,应该会出现以下字典:
(a,b,c) : 2, (b,c,a) : 1, (c,a,b) : 1
。
假设我有data
一个迭代器,我想为它计算k
一个可迭代对象的连续元素,(elem_1, elem_2, ..., elem_k)
并为每个这样的“窗口”在字典中存储它遇到的次数,最有效的方法是什么?对于O(n)
.
示例:"abcabc", k = 3
,我们得到:
(a,b,c), (b,c,a), (c,a,b), (a,b,c)
因此,应该会出现以下字典:
(a,b,c) : 2, (b,c,a) : 1, (c,a,b) : 1
。
迭代器的实现,无需初步减法到内存中
list(data)
(也是 O(kN))。由于需要建key/计算hash,所以循环内部的O(k)在所难免,所以用一些deque替换window来优化
win[1:]
情况并不会改善。我不知道需要什么?
作为一种选择:
像这样:
不切片选项: