Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 设计一个以恒定时间提供popMin()的堆栈_Algorithm_Language Agnostic_Stack - Fatal编程技术网

Algorithm 设计一个以恒定时间提供popMin()的堆栈

Algorithm 设计一个以恒定时间提供popMin()的堆栈,algorithm,language-agnostic,stack,Algorithm,Language Agnostic,Stack,这是在一次采访中问我的 我首先被要求设计一个堆栈,它在固定时间内执行getMin()。这是一个众所周知的问题,在堆栈元素中添加一个额外的字段并保持min值。然后,我被要求扩展此功能,以在固定时间内提供popMin()。我对如何做这件事一无所知。有什么想法吗?最简单的:排序链表。效率更高-各种堆:是否允许其他操作花费比平常更长的时间(例如Θ(logn)push)?如果不是,这将违反比较排序的Θ(n log n)界限。不,是所有常量时间。实际上,我建议使用链表创建堆栈,保留指向min节点的指针,然后

这是在一次采访中问我的


我首先被要求设计一个堆栈,它在固定时间内执行
getMin()
。这是一个众所周知的问题,在堆栈元素中添加一个额外的字段并保持
min
值。然后,我被要求扩展此功能,以在固定时间内提供
popMin()
。我对如何做这件事一无所知。有什么想法吗?

最简单的:排序链表。效率更高-各种堆:

是否允许其他操作花费比平常更长的时间(例如Θ(logn)
push
)?如果不是,这将违反比较排序的Θ(n log n)界限。不,是所有常量时间。实际上,我建议使用链表创建堆栈,保留指向min节点的指针,然后直接删除它们,这违反了堆栈的概念。不知道他们是否真的认为这是okI。我指的是这样一个事实,即这种数据结构在数学上是不可能的:它将允许一种线性时间排序算法,将所有项插入堆栈中,然后重复
popMin()
-ing。众所周知,当您使用黑盒比较函数进行订购时,这是不可能的。如果这些值是整数,那么可能会发生变化。你有其他的限制或自由吗?你读过这个吗?也许popMin的定义是弹出所有项,直到达到最小值——在这种情况下,问题又变得相当简单了?