amortized O(1) min stack? 表示看了下一点 hint 都没有><

2015-10-20 13:25:14 +08:00
 20015jjw

http://cs.stackexchange.com/questions/40580/solving-road-trip-problem-in-linear-time

我就是在做文中写的这道题,大概就是有个 array 里面有一堆正整数,每次最多只能跳 k 个,问穿过整个 array 遇到数字最小和是多少。用 LIS 的算法非常好写,但是复杂度是O(nk)n是 array 长, k`k步,因为每次都要往后找k个,找n`次><

参见上文的高票答案,据说可以把每次向后查找k步时间变成O(1)。差不多就是有没有办法写一个 amortized 只需要 O(1)存取的 min stack 呢?

2029 次点击
所在节点    编程
5 条回复
menc
2015-10-20 13:31:10 +08:00
所谓的 min stack 拥有 O(1) 的 getMin 操作,是通过额外维护一个数组实现的
GtDzx
2015-10-20 13:53:28 +08:00
就是单调队列。你可以搜“ POJ 2823 单调队列"找找有没有分析题解。
zhyu
2015-10-20 13:59:25 +08:00
单调队列嘛。。每个元素入队一次出队一次,所以均摊 O(1)
lzdhlsc
2015-10-20 14:05:06 +08:00
jedihy
2015-10-25 14:25:13 +08:00
另外开一个数组记录每一次入站时的最小值,即入栈的数和当前最小值比一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/229498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX