清华计算几何大作业思路分析和代码实现

清华计算几何大作业思路分析和代码实现

  • 1. 计算几何之缘
  • 2. 前置知识
  • 3. 作业列表
  • 4. 作业难度分析和选取建议
    • 4.1 初阶(新手村之旅)
    • 4.2 高阶(大师剑之旅)
    • 4.3 终阶(折磨之旅)
  • 5. 参考资料
  • 6. 免责声明

1. 计算几何之缘

距离第一次接触计算几何到现在,不知不觉已经过去了一整年的时间,从一开始什么都不会,被DCEL折磨的死去活来,到现在基本还能玩转DCEL,这个过程真是既折磨又快乐,计算几何确实比较难,但是也是充满快乐的,借用邓俊辉老师在edX计算几何课程主页上面的一句话——体味几何之趣,领悟算法之美,可以完美诠释了笔者学习计算几何的感受,所以这里我给大家分享并整理一下清华x计算几何课程所涉及的10个大作业,以及它们的解题思路,可视化结果,以及我自己实现的代码,希望这些能让对计算几何有兴趣的童鞋根据自己的兴趣和学习进度,来选择合适的大作业。

所以整个系列的文章规划为如下章节:

  1. 前置知识;
  2. 作业列表;
  3. 作业难度分析和食用建议;
  4. 每个作业的具体分析(包括思路分析,可视化结果,代码和拓展等等);

2. 前置知识

  1. 编程:任意一种编程语言,但推荐强类型语言(如C++,Java),更加严谨;
  2. 数据结构及算法:基础数据结构和算法即可(如链表,栈堆,图论等等,KMP,Internet Flow等非必须),但推荐掌握红黑树;
  3. 数学:高中数学即可,只要不去证明算法的正确性和复杂度,高数线代非必须,但会者更佳;

3. 作业列表

作业配套视频课程:计算几何 | Computational Geometry

个人作业项目代码:Algorithm

题目 涉及的计算几何算法 难度系数
CG2017 PA1-1 Convex Hull (凸包) Graham Scan
CG2017 PA1-2 Crossroad (十字路口) 线段求交, Bentley Ottmann ★★★
CG2017 PA2-1 Shortest Path in The Room (房间中的最短路径) 三角拆分 ★★★★★
CG2017 PA2-2 Find Dancing Partners (寻找舞伴) Voronoi Diagrams & Point Location ★★★★★
CG2017 PA3-1 Delaunay Triangulation (Delaunay三角剖分) Delaunay三角剖分 ★★★
CG2017 PA3-2 Which wall are you looking at (你在看哪面墙) Point Location ★★★
CG2017 PA4-1 Planar Range Query (平面区域查询) Kd-tree, Range tree, Fractional Cascading ★★★
CG2017 PA4-2 Orthogonal Windowing Query (正交矩形窗口查询) Interval tree, Priority search tree, segment tree ★★★★
CG2017 PA5-1 Dynamic Convex Hull(动态凸包) Graham Scan & 红黑树(BBST) ★★
CG2017 PA5-2 FruitNinja(水果忍者) Duality, Linear Programming, Half-Plane intersection ★★★

※ 虽然这里最高难度只有5颗星,但是计算几何整体的难度比基础算法(比如链表,栈,图论等等)难一个档次,这还是把Degenerate Case(退化情况)排除的难度。如果需要考虑退化情况,那么整体的难度将会再上一个档次,而且部分作业还会引入额外的算法和要求,所以希望挑战计算几何算法的童鞋要有心理准备哒,不要尝试一次两次就趴下啦哒~
※ 本人提供的代码不保证绝对正确,也没有通过Online Judger,因为用的是Java编写且编译文件太多,基本都是编译超时,这里主要将自己的思路分享出来,如果你发现有任何问题,都可以随时联系我哒。

4. 作业难度分析和选取建议

根据上面的难度评估和笔者自己的经验,推荐使用如下顺序来“攻略”这10个计算几何难题!

4.1 初阶(新手村之旅)

  1. CG2017 PA1-1 Convex Hull (凸包)
  2. CG2017 PA5-1 Dynamic Convex Hull(动态凸包)
  3. CG2017 PA1-2 Crossroad (十字路口)

如果第一次接触计算几何,推荐先用PA1-1 凸包练手,凸包算法非常简单,算法思路也不难理解,而且也不涉及其他复杂的数据结构,只要掌握基础数据结构和算法,就能顺利拿下这个作业,并且建立信心,也能初步了解计算几何以及一个非常重要的概念和方法:to Left Test;

再攻略基础凸包之后,推荐倒着先做PA5-1 动态凸包,这个作业用得还是之前的算法,只是需要自己实现BBST(笔者实现的是红黑树),通过这个题目,大家会掌握计算几何里面一个非常常用的数据结构:BBST,之后有不少算法都会用到,而且需要根据不同的算法进行魔改,比如线段求交,Voronoi Diagrams等等。

再完成上面两个作业之后,PA1-2就能让大家体会到曾经被计算几何支配的恐惧了哒~这个作业的难度会比之前凸包上升一个档次,并且算法也大量引入几何的空间关系,在理解上也是不小的挑战,而且里面会第一次需要自己魔改的BBST来实现里面所需的数据结构。所以第一次做这个作业大家可能会感觉非常沮丧,但不要放弃哒。

这个作业有两个特殊的地方:1)题目额外引入直线,射线和圆求交;2)退化情况极其折磨;所以建议大家先把注意力放在原本算法的实现上面,再去优先解决退化情况,最后再掌握算法的基础上,让算法能应对额外几种求交情况。

4.2 高阶(大师剑之旅)

  1. CG2017 PA3-1 Delaunay Triangulation (Delaunay三角剖分)
  2. CG2017 PA3-2 Which wall are you looking at (你在看哪面墙)
  3. CG2017 PA4-1 Planar Range Query (平面区域查询)

再完成初阶的作业,大家应该对计算几何的概念都有一定的认识,那么接下来可以先做PA3-1。这个作业大家会初次了解计算几何里面一个特殊且重要的数据结构:DCEL,以及应用它来解决Delaunay三角拆分的问题。这题有两个难点:1)DCEL的理解和使用;2)无限点(p-1 & p-2)的引入和实现。

PA3-2 的Point Location算法是 PA2-2 其中一个基础算法,所以这里推荐先把这个作业做了,对问题逐个击破。另外,这题也有两个难点:1)Trapezoid数据结构的理解和实现;2)退化情况的处理(假想斜切)。

这个部分最后是PA4-1,这个作业大家会第一次接触空间区域查询,以及一些重要的空间查找数据结构(比如Kd-Tree),而且这里的算法也是后面PA4-2 的一个基础算法之一,所以先做这个作业比较合适。

4.3 终阶(折磨之旅)

  1. CG2017 PA4-2 Orthogonal Windowing Query (正交矩形窗口查询)
  2. CG2017 PA2-2 Find Dancing Partners (寻找舞伴)
  3. CG2017 PA2-1 Shortest Path in The Room (房间中的最短路径)
  4. CG2017 PA5-2 FruitNinja(水果忍者)

再完成前两个阶段的作业,如果还有兴趣的童鞋就可以来一起继续折磨啦哒~ 真正感受一下计算几何的恐怖之处!

因为之前已经实现了PA3-2平面区域查询算法(Range Tree),这里我们需要它来进一步实现正交矩形窗口查询算法,而且本题不需要使用BBST和DCEL,所以用来终结入门,是一个不错的选择。

接下来是PA2-2,这里涉及两个主要算法 :Voronoi Diagrams 和 Point Location,后者我们在高阶已经实现过了,所以直接拿来用就是。但是!Voronoi Diagmras的算法比较难理解,而且实现起来更是非常复杂,还要结合两个算法去解决问题,所以想挑战的童鞋务必做好心理准备!

PA2-1 涉及的计算几何算法本来就有两个:单调多边形拆分和三角拆分,题目还附加了两个算法才能解决问题:对偶图和Funnnel Algorithm。因此要完成这个作业需要实现4个算法,工程量非常大,而且需要同时操作BBST和DCEL,实现难度还是异常复杂,和上面的PA2-2 都堪比一个算法项目啦。

最后一个PA5-2,其实这个题目综合下来没有上面几个难,只是这个题目涉及的算法,视频课程没有进行详解,需要大家自己去自学,而且如果追求Optimal Solution,这个题目数学浓度非常高哦(不排除有其他解法)。因而有兴趣的童鞋,也可以学完这个课程,先尝试这个题目再去做前面三个终阶的作业,这题灵活规划哒。

到这里,我们就把10个大作业给大家介绍了一遍,也给到了推荐的做题顺序,接下来我们正式进入到每个题目的思路讲解当中~


下一节:清华计算几何大作业(一):CG2017 PA1-1 Convex Hull (凸包)

系列汇总:清华计算几何大作业思路分析和代码实现

5. 参考资料

  1. Computational Geometry: Algorithms and Applications
  2. 计算几何 ⎯⎯ 算法与应用, 邓俊辉译,清华大学出版社
  3. 计算几何 | Computational Geometry

6. 免责声明

※ 本文之中如有错误和不准确的地方,欢迎大家指正哒~
※ 此项目仅用于学习交流,请不要用于任何形式的商用用途,谢谢呢;


你可能感兴趣的:(计算几何,算法,算法,计算几何)