问题描述
我想使用红黑树实现优先级队列。使用二进制堆是O(log n)删除最坏的情况,我将立即从队列中删除许多键,因此我希望O(log n)最坏的情况是批量删除,而不是O(m log n) )最坏的情况,其中m是一次删除的键的数量。我可能只会删除少数几个键。
我不再需要那棵老树。如何在保持黑色高度不变的同时,以破坏性的方式分割红黑树(显然可以在O(log n)中完成此操作)?
解决方法
存档中有您需要的算法的实现,网址为 https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-5.0.3/CGAL-5.0.3.zip
在文件include / cgal / MultiSet.h中的从第2617行开始,该函数是Multiset