驱动因素

一个基于扫描的方法是非常有用的,因为你可以高效地构建扫描线状态,并维护事件队列。在线段扫描算法中,要考虑大量的特殊情况,因此代码会比穷举算法复杂很多。如果不是特别希望性能高效,我们不推荐采用此算法。

线段扫描算法会在处理的过程中生成部分结果。在这个例子中,扫描线状态是一个线段的二叉平衡树,这样我们能够根据扫描线的某个点,得到线段的一个顺序。事件队列也可以是事件点的一棵二叉查找树。

为了简化算法的编码,二叉树通常使用一个增长平衡二叉树来表示扫描线状态,这棵树只有叶子节点才存储真正的信息。内部节点只是存储左子树中最左边线段和右子树中最右边线段的min和max信息。在这棵树中,线段的顺序是基于扫描点的,这个扫描点就是从优先队列中取出,正在处理的EventPoint。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元