Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何发现数据结构的时间复杂性?_Algorithm_Data Structures - Fatal编程技术网

Algorithm 如何发现数据结构的时间复杂性?

Algorithm 如何发现数据结构的时间复杂性?,algorithm,data-structures,Algorithm,Data Structures,我在排队。它有'm'个元素,有'n'个重复元素。现在我想复制要设置的元素,那么将队列中的元素转移到设置中的时间复杂度是多少?首先找到将m个元素从队列中移出的复杂度,复杂度取决于实现。 然后找出将这些元素添加到集合中的复杂性,同样,复杂性取决于实现。 对于从队列中移除并添加到集合的每个操作,这两种数据结构的适当实现都应该接近O1。naive算法从队列中获取项目,并将其与唯一元素列表进行比较,如果它们不在该列表中,则添加它们。 调用u=m-n是唯一元素的数量u>0当且仅当m>0时 在最坏的情况下,这

我在排队。它有'm'个元素,有'n'个重复元素。现在我想复制要设置的元素,那么将队列中的元素转移到设置中的时间复杂度是多少?

首先找到将m个元素从队列中移出的复杂度,复杂度取决于实现。 然后找出将这些元素添加到集合中的复杂性,同样,复杂性取决于实现。
对于从队列中移除并添加到集合的每个操作,这两种数据结构的适当实现都应该接近O1。naive算法从队列中获取项目,并将其与唯一元素列表进行比较,如果它们不在该列表中,则添加它们。 调用u=m-n是唯一元素的数量u>0当且仅当m>0时

在最坏的情况下,这需要u*u+1/2+n*u比较。此时列表的开头有所有唯一的元素,尾部有重复的元素。例如{5,11,7,9,9,9}

反过来我们得到m-nm-n+1+nm-n=m^2−mn+m−N这是Om^2,因为n 但是,如果您可以定义一个散列函数并将元素推送到散列映射中,那么对于m的实际有限值,您可以实现Om的性能。向非饱和散列映射添加元素是O1,我们会多次这样做

另一种方法是将批次放入列表中并对其进行排序,然后转储重复项,前提是您可以对元素定义排序函数。那是Om*logm


注意:这里的假设是,从队列中删除元素是O1—对于任何实际的队列实现来说,这是一个公平的假设。

没有数据结构的时间复杂性。我们只能谈论特定数据结构上算法的复杂性。