Time complexity 时间复杂性(包含元素列表)

Time complexity 时间复杂性(包含元素列表),time-complexity,Time Complexity,只是出于好奇。假设我有一个包含N个元素(将重复)的列表和一个返回这些元素频率的函数。我认为这个程序的时间复杂度应该是O(N),对吗?因为函数只需要循环N并检查元素是否已经存在,如果是,+=,否则=1。好的,我的朋友和我有一个争论,如果我们也需要乘以元素的频率,怎么样?也许除以它的总数?我的朋友认为复杂性应该是O(N^2),但这听起来不适合我。你怎么想,为什么 谢谢。这取决于您将如何记录频率。如果要使用数组,则需要先找到前一个频率值,复杂性是二次的。但是,如果您维护一个哈希表结构,在该结构上访问平

只是出于好奇。假设我有一个包含N个元素(将重复)的列表和一个返回这些元素频率的函数。我认为这个程序的时间复杂度应该是O(N),对吗?因为函数只需要循环N并检查元素是否已经存在,如果是,+=,否则=1。好的,我的朋友和我有一个争论,如果我们也需要乘以元素的频率,怎么样?也许除以它的总数?我的朋友认为复杂性应该是O(N^2),但这听起来不适合我。你怎么想,为什么


谢谢。

这取决于您将如何记录频率。如果要使用数组,则需要先找到前一个频率值,复杂性是二次的。但是,如果您维护一个哈希表结构,在该结构上访问平均是即时的,那么复杂性将是线性的。

如果我们使用哈希表,复杂性仍然是O(N)?即使列表的数量很大,也需要乘以它的频率(对于每个元素)?如果项目的数量很大,您可以分配一个巨大的哈希表,这样就不会出现表扩大的问题,并且哈希冲突也很少见。如果你需要对结果进行额外的计算,这是一个不同的问题,你应该更具体地说明你想要做什么。例如,若要将频率和列表中的值相乘,则需要迭代哈希表的键并将它们和值相乘。这将是第二步,总的复杂性仍然是O(N)。我明白了,非常感谢您的清晰解释!