나는 처리 할 항목 (큰 rationalals)의 컬렉션을 가지고. 각각의 경우 처리는 컬렉션에서 가장 작은 항목을 제거하고 작업을 수행 한 다음 0-2 개의 새 항목을 추가하는 것으로 구성됩니다 (항상 제거 된 항목보다 큽니다). 컬렉션은 하나의 항목으로 초기화되며 비어있을 때까지 작업이 계속됩니다. 나는 어떤 크기의 콜렉션이 도달 할 지 확신하지 못하지만, 1M-100M 항목에서 기대할 수 있습니다. 가장 작은 것 이외의 항목을 찾을 필요가 없습니다.레드 - 블랙 트리가 이상적인 데이터 구조입니까?
현재 가장 작은 항목에 대한 포인터를 유지하기 위해 조정될 수있는 빨강 - 검정 트리를 사용할 계획입니다. 그러나 전에 사용했던 적이 없으며 사용 패턴이 그 특성에 잘 맞는지 확실하지 않습니다.
1) 왼쪽 + 무작위 삽입에서 삭제 패턴이 성능에 영향을 미칠 수 있습니까? 예 : 무작위 삭제보다 훨씬 더 많은 회전 수가 필요합니다. 아니면이 패턴을 사용하여 O (log n) 작업을 삭제하고 삽입 할 수 있습니까?
2) 다른 데이터 구조가 삭제 패턴으로 인해 또는 더 작은 항목을 찾을 필요가 있다는 사실을 이용하여 더 나은 성능을 제공합니까?
업데이트 : 기꺼이 내가 물었습니다. 바이너리 힙은 분명히이 경우를위한 더 나은 해결책이며, 약속 된대로 구현하기가 쉽습니다.
우고
논리적으로 삭제해야하는 노드가 새로 계산 된 값에 의해 필요하지 않다는 것을 확실하게 알지 못하는 경우 삭제를 무시하거나 지연 할 수 있습니다. Halt & Sweep 접근법은 후자의 경우에 효과적입니다. 너무 지저분해진 하위 나무의 뿌리는 재조정 코드에 의해 방문되어 재조정됩니다. 이로 인해 심각한 성능 저하를 방지하면서도 성능 저하 가능성이 거의 없습니다. – RocketRoy