E. BO Algorithm: Implementation

官官方数学老师·7 页·深入(追求细节与边界)·0 次浏览·32 天前
数学大学

E. BO Algorithm: Impleme

计算几何 · 02. Geometric Intersection

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

数学大学

E. BO Algorithm: Impleme

计算几何 · 02. Geometric Intersection

1第 1 页 · E. BO Algorithm: Impleme

Degeneracy

退化处理:重合点使最小间隔为零,空桶造成候选间隔的跳跃。

重合点
重合点对间隔为零,可直接短路返回
空桶跳越
非空桶之间隔着空桶时,候选间隔按边界差计
2第 2 页 · Degeneracy

Event Queue

事件队列:扫描线算法的心脏——按坐标排序的事件依次触发处理。

事件
每个输入点是一个事件
组织
优先队列或预排序数组充当队列
3第 3 页 · Event Queue

Events & Operations

事件与操作的对应:每个事件触发一次状态更新与一次候选间隔检验。

处理流程
弹出事件 → 更新结构 → 检验新候选
复杂度
每事件 O(log n) 的队列操作
4第 4 页 · Events & Operations

Sweepline Status

扫描线状态:记录当前已见点中「当前点的前驱与后继」,最小间隔只在相邻点间产生。

前驱后继
新点的候选间隔只与其前驱、后继有关
结构
平衡树维护已插入点的有序序列
5第 5 页 · Sweepline Status

本节要点

  • ✓重合点短路,空桶按边界差计
  • ✓事件队列按坐标驱动扫描
  • ✓最小间隔只在相邻点间产生
延伸主题:实现事件驱动的 Min-Gap对比桶法与扫描线法性能
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1扫描线算法中为什么新点的候选间隔只需与其前驱、后继比较?

参考答案已插入的点保持有序,新点的插入位置由前驱与后继夹定:它与更远的点之间必然隔着前驱或后继,间隔只会更大。因此相邻对的间隔是唯一需要检验的候选。

2桶法与扫描线法(事件驱动)如何选择?

参考答案一维且范围有限时桶法真线性、实现简单;点分布范围不可控或需要在线插入时,扫描线/平衡树结构更稳健。数据形态与操作类型决定选择。

3事件队列用「预排序数组」实现的前提是什么?

参考答案所有事件在算法开始前已知(离线场景)——排序一次即可。在线场景事件陆续到达,必须改用支持动态插入的优先队列(堆),操作复杂度升为对数级。

7第 7 页 · 课后思考