Data structures 不同数据结构的大O运行时间
我试图找出以下数据结构的大O运行时间。 他们说得对吗Data structures 不同数据结构的大O运行时间,data-structures,big-o,time-complexity,Data Structures,Big O,Time Complexity,我试图找出以下数据结构的大O运行时间。 他们说得对吗 将n个整数插入初始为空的AVL树(最佳情况) O(对数n) 将n个整数插入初始为空的AVL树(最坏情况) O(对数n) 将n个整数插入到初始为空的二元搜索树中,该二元搜索树不强制 结构属性(最佳情况) O(对数n) 将n个整数插入到初始为空的二元搜索树中,该二元搜索树不强制 结构特性(最坏情况) O(n) 另外,解释它们不正确的原因也会有帮助是的,如果你用n乘以所有的值,你是正确的。您的运行时间只针对一个元素。这在您的定义中是不正确的:
- 将n个整数插入初始为空的AVL树(最佳情况) O(对数n)
- 将n个整数插入初始为空的AVL树(最坏情况) O(对数n)
- 将n个整数插入到初始为空的二元搜索树中,该二元搜索树不强制 结构属性(最佳情况) O(对数n)
- 将n个整数插入到初始为空的二元搜索树中,该二元搜索树不强制 结构特性(最坏情况) O(n)
另外,解释它们不正确的原因也会有帮助是的,如果你用n乘以所有的值,你是正确的。您的运行时间只针对一个元素。这在您的定义中是不正确的: 将n个整数插入初始为空的AVL树(最佳情况)O(logn) 您不能在少于
n
的操作中访问(和复制)n
数据项,因为您应该读取每个项(因此,O(n)
是在n个元素上移动的最小值)
因此,我的假设是,对于单个元素,您给出了正确的O()
(这有点错误,因为在特殊输入上可以获得最佳结果;您的估计是平均情况,而不是最佳情况),因此,对于所描述的总操作,我将用O(n)
乘以每个:
- 将n个整数插入最初为空的AVL树(最佳情况)
UPDATE:这是平均值;对于特殊输入,最佳时间可以更低O(n*logn)
- 将n个整数插入最初为空的AVL树(最坏情况)
O(n*logn)
- 将n个整数插入初始为空的二元搜索树,该二元搜索树不强制执行结构属性(最佳情况)
更新:这可能取决于实现和整数序列;所以最好的情况是O(n*log n)
(参见注释)O(n)
- 将n个整数插入到初始为空的二叉搜索树中,该二叉搜索树不强制执行结构属性(最坏情况)
O(n*n)
n
整数如何导致O(logn)
的大O。那没有任何意义。当然读取整数本身至少需要O(n)
因此,对于不平衡的BST示例,最坏的情况是插入排序的数字列表,如1,2,3,4
。插入1需要0时间。插入2需要~1
时间。插入3需要~2
时间。这相当于1+2+3+…+n=O(n^2)
类似地,在最佳情况下,每个后续插入都需要log(i)
时间。因此,总运行时间是log(1)+log(2)+log(3)+…+log(n)
。这一评估结果并不明显。但如果你懂一点微积分,你会发现这是(几乎)对数n从1到n的积分的梯形规则近似。这大约是nlogn-n=O(nlogn)
我相信您可以对AVL树进行类似的分析。对不起,它们都错了 您使用的是用于单次插入的大型操作系统。如果你不知道其中的n个,你就得用n次 因此,正确的数字是: 将n个整数插入:
- AVL树(最坏情况):O(log(n)*n)
- AVL树(最佳情况):这很难,但我猜也是O(log(n)*n)
- 不强制结构属性的二进制搜索树(最佳情况): O(n)-一个项目的最佳案例插入时间实际上是O(1)
- 不强制结构属性的二进制搜索树(最坏情况): O(n^2)-如果不强制执行结构属性,可能会导致树完全不平衡,因此在最坏的情况下,由n个元素组成的树的高度为n=>树将变形为列表
(4) 在没有结构强制的情况下,最坏的情况是:正如在其他答案中所说的,为每个元素查找位置是O(n),因此总体而言,最坏的时间复杂度是O(n^2)。O(n)每个元素。为什么这个标记为C?所有语言的复杂性都是一样的吗?你是说插入每个元素需要多少时间?还是全部?插入n个元素总是ω(n)。@cnicutar:严格来说,复杂性取决于基本操作的复杂性。C中的基本操作与Haskell或Prolog中的基本操作不同。不过,在这种情况下这并不重要。@amit这不一定是真的。使用分布式计算和共享内存,在插入单个元素的同时插入n个元素是完全可行的。虽然它可能不一定适用于这种情况,但需要注意的是。@glowcoder:time complexity指的是所需的操作数,n