当前位置: 首页 > 面试题库 >

Java中TreeSet操作的计算复杂性?

陶星波
2023-03-14
问题内容

我正在尝试清除一些有关TreeSet操作中的复杂性的内容。在javadoc上说:

“此实现为基本操作(添加,删除和包含)提供了保证的log(n)时间成本。”

到目前为止,一切都很好。我的问题是addAll(),removeAll()等会发生什么。Set的javadoc在这里说:

“如果指定的集合也是一个集合,则addAll操作会有效地修改此集合,以使其值为两个集合的并集。”

它只是在解释操作的逻辑结果,还是在暗示复杂性?我的意思是,如果这两个集合由例如红黑树表示,则以某种方式加入树比将一个元素的每个元素“添加”到另一个元素更好。

无论如何,是否有一种方法可以将两个TreeSet合并为一个O(logn)复杂度的对象?

先感谢您。:-)


问题答案:

你能想象它怎么会是可以优化的特殊情况来O(log n),但最坏的情况一定是O(m log n)哪里mn在每个树元素的数量。

编辑:

http://net.pku.edu.cn/~course/cs101/resource/Intro2Algorithm/book6/chap14.htm

描述了一种特殊情况的算法,该算法可以加入树O(log(m + n))但注意其中的限制:的所有成员S1必须少于的所有成员S2。我的意思是针对特殊情况进行特殊优化。



 类似资料:
  • 所以我想知道如何计算一段代码的时间复杂度(T(n)),例如,下面的代码,就操作的数量而言。 我相信这很简单,但是我的讲师没有很好地教这个概念,我真的很想知道如何计算时间复杂度! 提前谢谢!

  • 我的数据是这样的,X和Y是缺陷的中心。我想在矩阵中指定缺陷。 我创建了一个只有0的矩阵200*200。我想通过以下方式将1放入矩阵中: 每个坐标X Y都是1。例如,我们可以看到ID 1,它将允许1到坐标(2,3)的单元格。ID 2将允许1进入我的手机(7,12)。 我已经用代码完成了这项工作 现在我想做一些棘手的事情。我defect_ID,我想使用我的X_range和Y_range值将值1分配给这

  • 将非常大的n位数字转换为十进制表示的复杂性是什么? 我的想法是,重复整数除法的基本算法,取余数得到每个数字,将具有复杂性,其中是乘法算法的复杂性;然而,除法不是2个n位数字之间的除法,而是1个n位数字和一个小常量之间的除法,因此在我看来,复杂度可能更小。

  • 问题内容: 我想知道TreeSet的部分视图的时间复杂度是多少。 假设我要添加随机数来设置(而且我不在乎重复性): 现在我将呼叫的复杂性理解为: AFAIK的复杂性,并且是O(LG N),是O(1),但对于上述的方法?我感觉很不好,它是O(K),其中K是所选子集的大小。 也许如果有某种变通办法来找到集合中某个元素的索引就足够了,因为如果我可以得到的话,可以说O(lg N)恰好是我所需要的。 问题答

  • 在最近的一次测试中,我们得到了一个函数来计算未排序的ArrayList中出现了多少个double(不是原语double,而是一个项目出现了两次)。 我正确地确定了Big O复杂度为O(N^2),但由于我错误地确定了全部复杂度,因此只获得了部分学分。函数如下: 在他刚刚发布的考试解决方案中,他给出了这样的解释: 输入集合中有N个项,该方法通过一个缩减步骤反复调用自己,该步骤生成一个新索引N次,直到达

  • 问题内容: 什么复杂性的方法,并在目前?在文档中(也没有其他地方)没有提到计算复杂性。 问题答案: 如果您查看的代码(由JDK提供),在我看来,它 具有 O(n ^ 2) (实际上该方法是)。其他方法的代码稍微复杂一些,但是您可以自己看看。 注意:这是针对Java 6的。我认为它在Java 7中不会有所不同。