我正在研究Convex hull和Graham Scan来实现它,并且我引起了我的注意,每个人都使用了堆栈。所以我想问一下为什么在算法中使用的堆栈是精确的,使用堆栈的好处是什么?
答案 0 :(得分:3)
此处的堆栈可以视为支持push
,pop
和empty
操作的抽象数据结构。如果你阅读格雷厄姆扫描算法的描述,你会发现这些正是算法使用的操作,所以我真的看不出什么可以替代堆栈 - 那么它可能是一个不同的算法。
用于在堆栈中支持/实现这些操作的数据结构(即,以OO术语实现堆栈接口的类)可以相当自由地决定。通常使用数组,但对于某些应用程序,链接列表也可能有意义。
答案 1 :(得分:0)
在构造船体的格雷厄姆扫描中,如果点不与下一个考虑点形成左转弯,则需要回溯,因此先前的点需要被重新考虑为船体的有效点,因此我们使用堆栈来获取它们最后一次访问的顺序用于重新验证。虽然使用堆栈不是必须的,但你也可以使用一个简单的数组来做同样的事情。