2016-06-09 4 views
0

지정된 값보다 작은 값으로 스칼라 우선 순위 대기열의 모든 항목을 제거 할 수 있습니까?x보다 작은 값으로 PriorityQueue의 모든 항목 제거

예 :

val queue = scala.collection.mutable.PriorityQueue[Int]() 
queue.enqueue(3) 
queue.enqueue(5) 
queue.enqueue(10) 
queue.enqueue(8) 
queue.removeAllLessThan(6) 
println(queue) // PriorityQueue(10, 8) 

나는 당신이 필터를 사용하여이 작업을 수행 할 수 있습니다 알고 있지만 힙에이 일을 매우 효율적인 방법이있을 것처럼 보인다.

내가 이것을하고 싶은 이유는 A * 알고리즘의 메모리 사용 공간을 낮추는 것입니다.

+1

특정 값보다 작은 항목을 모두 제거하려면 힙을 다시 빌드해야합니다. 필자는 필터를 사용하여 힙을 스캔하여 원하지 않는 항목을 제거한 다음 힙을 다시 작성한다고 가정합니다. 그래서 저는 필터가 상당히 효율적일 것으로 기대합니다. – user3386109

답변

1

PriorityQueue에서 삽입을 위해 순서가 우선합니다. 즉, 순서가 보장되는 위치에 새 요소가 삽입됩니다. 술어를 보유하면서이 경우 각각의 모든 항목을 자세히 조사 필터와 달리, 큐 위에 (보다 큰)에 Int

queue.takeWhile(_ > 6) 

반복을 기본 순서를 사용.

관련 문제