我有一个队列。它有'm'个元素,并且有'n'个重复元素。现在我想将元素复制到Set,那么将Queue中的元素传递给Set的时间复杂度是多少?
答案 0 :(得分:0)
首先发现将m个元素从队列中出列的复杂性,复杂性取决于实现。 然后找到将这些元素添加到集合的复杂性,复杂性又取决于实现。 对于每个操作(从队列中删除并添加到集合),任一数据结构的适当实现都应该接近O(1)
答案 1 :(得分:0)
朴素算法从队列中获取项目并将它们与唯一元素列表进行比较,如果它们不在该列表中,则添加它们。 调用u = m-n是唯一元素的数量(当且仅当m> 0时,u> 0>。
在最坏的情况下,这需要u *(u + 1)/ 2 + n * u比较。当列表在开始处具有所有唯一元素并且具有重复的尾部时。例如{5,11,7,9,9,9}。
向后取代,得到(m-n)(m-n + 1)+ n (m-n)= m ^ 2-mn + m-n。那是O(m ^ 2)因为n
但是,如果您可以定义散列函数并将元素推送到散列映射中,则可以为实际有限值m实现O(m)的性能。将元素添加到不饱和哈希映射是O(1),我们这样做O(m)次。
另一种方法是将批次放入列表并对其进行排序,然后转储重复项(假设您可以在元素上定义排序函数)。那就是O(m * log(m))。
注意:这里的假设是从队列中删除元素是O(1) - 这是任何实际队列实现的公平假设。