【发布时间】:2015-05-04 07:21:45
【问题描述】:
我们被要求创建一个在 O(logn) 的最坏情况下运行的算法
算法由3个函数组成:getmin();getmax();add();
首先从栈中弹出最小的元素,并返回它; getmax 从堆栈中弹出最大的元素并返回它; 在堆栈上添加 put 元素。
我在想一棵 RB 树;但我意识到我自己很难实现(从零开始)。
是否存在其他实现起来不太复杂且运行时间为 O(logn) 的树或数据结构?
我只能使用基本的 python 操作(即只有列表,..)
【问题讨论】:
-
经典的实现方式是heaps。
-
@cfh 你将如何实现一个同时支持删除最小值和最大值的堆?
-
这不是您问题的答案,但您可以通过维护另一个临时堆栈来获取 O(1) 中的最小值,该堆栈将保存当前最小值的参考,类似地可以这样做以获得最大值。
-
保持你的“堆栈”有序;您可以在
O(log n)中对add使用二分法,得到最小值或最大值变为O(1)(忽略底层列表性能)。
标签: python algorithm data-structures