最小和最大移动窗口,更好的实现?

时间:2016-10-12 14:34:19

标签: scala queue max min

我试图通过使用队列找到移动窗口的最小 - 最大值。我能够创建一个解决方案,但这感觉非常慢。

这是我的解决方案:

def min_max(value:T, windowSize: Int):(T,T) = {
  val queue = new scala.collection.mutable.Queue[A]()   //I added the creation of this queue here for you to see
  if(queue.size == windowSize) queue.dequeue
  queue.enqueue(value)    
  var min = queue.head
  var max = queue.head
  for(i <- queue) {
    if(i<min) min = i
    if(i>max) max = i
  }
  (min, max)                 // returns the min and max in a tuple
}

1 个答案:

答案 0 :(得分:0)

这取决于您的队列的构建和填充方式,以及它的大小。简而言之,您可以更快地扫描最小/最大值,但它会使队列中的元素添加速度变慢,或者产生一些前期成本。

你正在做的是线性的,这与使用线性数据结构一样好,但是你可以用更惯用的方式来编写它(而且我也不确定与{{1}的交易是什么在开头,以及当队列大小小于或大于参数时你期望发生的事情:

dequeue

这也假设没有竞争(没有人在你遍历时向队列中添加数据)。如果你采用不使用可变结构的功能方法,那么所有这些东西都会更容易推理,除非你绝对必须这样做。