算法5B-----凸包2

算法5B-----凸包2

r.graham scan(葛立桓)

  • 1972
  • 波音公司
  • 数字情种 P .Erados
  • 金芳蓉

graham scan : pre sorting

  • polar angle : 极坐标系,3、4、5、6、6、7、8分别与极坐标系构成的极角,进行排序

  • 但是极角并不需要逐一算出来排序,实际是在判断谁在谁之前

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BALBlKmp-1602548490796)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013063404056.png)]

  • 采用Toleft(1,5,7)方法,溢出的可能性是更小的

scan

数据结构是两个栈,u是s的栈顶,v是s的次栈顶,w是t的栈顶

  • while (!T.empty())
  • toLeft(U,V,W) ? // 向左拐弯的
  • s.push(T.pop()):
  • s.pop();

example

  • 如果是环形凸包,一系列二节棍连接起来了
  • 最后存储的就是那一系列的点

更详细的解释

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QU9sIAeD-1602548490797)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013064416577.png)]

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-om6Aqpgc-1602548490798)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013064545257.png)]

    • toLeft(3,4,5) 是右拐的,会把s中的栈顶4pop掉,删除掉
    • 4号点被1,3,5包含在里面,这种点会被封杀掉
  • 考虑6号点时,5号点又被封杀

  • 考虑8号点时,7号点被封杀

  • T栈空了,即结束,s栈中的元素就是结果,结果也是封闭的

复杂度

  • 退出的点绝对不会回去

  • 大概是线性的

  • 内部端点不会有交线,是一种平面图planar graph

  • 欧拉 v-e+f-c = 1

  • e = O(n)

  • f = O(n)

  • pre sorting是不能去掉的,时间复杂度的大头是O(nlogn),但是是算法的下界

  • 为什么不能去掉,可能会构成螺旋线,

新的解法

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbacfIek-1602548490800)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013071403831.png)]
  • 找出左边的极点,右边的极点
  • 做个假想的实验,相对于y轴负无穷远,就是一系列的平行线,此时比较的就是每个点的x轴坐标,就得到了upper hull上凸包
  • 反过来,正无穷,就是lower hull下凸包

guarding the great wall

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dLro2VB3-1602548490801)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013072518704.png)]
  • 进入S栈,并且在栈顶以下待过,即非栈顶位置
  • 这样的点就可以作为烽火台的位置,
  • 需要注意的是最终结果的点并不是构成凸包的点,最终的凸包是x、j、k,而k点不是,因为k点处在栈顶,而中间的A、B、G、H又是属于的,因为曾经是作为toLeft进入过s栈的,并且在进入s栈后,又有另一个元素进来,将它压入了栈顶之下

art gallery

  • 监控覆盖整个画廊,同时监控点最少

art gallery theorem

  • v. chvatal 1975
  • n/3 向下取整
  • 每一个齿尖都需要一个哨兵

fisk’s proof

  • 三角剖分
  • triangulation
  • 内部三角形的中点的连线(连接对偶的点),dual graph 对偶
  • 一般情况下,得到的dual graph是二叉树
  • 用三染色法,每次三角面片上的点的颜色是不一样的
  • 三角面片反转时,可能会出现两种可能
  • 经过三染色后,任意一种颜色的顶点都可以选为哨兵

polygon taiangulation

  • ?三角剖分总是存在的吗

ear

  • empty + convex = ear

  • dirty

  • empty + reflex = mouth

  • ear - cutting

  • 数学归纳

  • 任何多边形至少有一个耳朵

  • 怎么找到耳朵

monotone chain/polygon

  • 单调链/多边形

triangulating a monotone polygon : 1A (same side + reflex)

  • sweepline 扫描线算法,每个点作为一个事件处理一下
  • 所有的点都在同一侧,又是reflex,此时s.push
  • 此时没有耳朵,注意考虑的是局部

1B(same side + convex)

  • 扫描线,扫到栈顶、次栈顶和新扫描的点,构成一个三角形
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ZmQA6qn-1602548490801)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013080043005.png)]

2 (opposite side)

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wOyz6j1s-1602548490802)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013081244397.png)]

demo

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZAn27JiR-1602548490803)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013081414417.png)]
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDReyOyL-1602548490803)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013081535526.png)]

monotone decomposition

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W5e6AOTM-1602548490804)(C:\Users\liusiping\AppData\Roaming\Typora\typora-user-images\image-20201013081921109.png)]
  • stalacTite 钟乳石
  • stalagMite 石笋
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值