我正在尝试解决算法问题,并在时间限制内解决它我需要实现一个累积频率表,其创建需要线性或优于线性时间?我的输入只是整数;因此,我的频率表的键只是整数。我想出了一个简单的实现(假设cumulative_freq_table是以下代码中的hashmap。):
read x
for key in range(x, N):
if key in cumulative_freq_table:
cumulative_freq_table[key] += 1
我还没有研究任何算法相关的课程,但我猜它的复杂性大约是O(N ^ 2)。这可以在时间上比O(N ^ 2)更好吗?
答案 0 :(得分:2)
如果您乐意使用两个通行证,那么您可以这样做:
for each x:
read x
freq_table[x] += 1
t = 0
for key in range(0,N):
t += freq_table[key]
cumulative_freq_table[key] = t
这将是线性的。
线性方法的问题是它需要在访问累积频率表之前看到所有数据。
有一些替代方法可以持续访问累积频率,但复杂度更高。
例如,请查看Fenwick Trees,了解对每个元素使用O(log(N))运算的方法。