Scala TreeSet takeRight

时间:2018-01-30 01:13:10

标签: scala data-structures treeset

我有一大堆整数,我正在使用TreeSet来存储。我的任务是找出两个小于输入数字的数字。

例如Set(1,5,8,9)和input = 6应该返回(1,5) input = 8应该返回(5,8)

到目前为止,我在代码方面的内容如下:

treeSet.to(inputNumber).takeRight(2)

我的理解是.to()返回的元素投影少于logN时间内的输入。我想知道额外的takeRight的复杂性是什么。我无法从文档中找到答案。

我正努力使其尽可能高效,因为我的输入列表有数百万个数字。

1 个答案:

答案 0 :(得分:1)

有时甚至在查看文档之前就更容易查看源代码。

TreeSet

override def takeRight(n: Int) = drop(size - math.max(n, 0))

override def drop(n: Int) = {
  if (n <= 0) this
  else if (n >= size) empty
  else newSet(RB.drop(tree, n))
}

RedBlackTree

def drop[A: Ordering, B](tree: Tree[A, B], n: Int): Tree[A, B] = blacken(doDrop(tree, n))

RBtree中的删除为O(log n),因此由RBtree支持的Scala takeRight中的TreeSet也是O(log n)