算法 java伪码_凸包的算法(伪代码)

首先,给出凸包的定义

1:集合S的凸包,$#(S),就是包含S的最小凸集。

2:将平面点集P的凸包定义为:顶点取自P,包含P中所有点的唯一凸多边形。

算法1:

Algorithm SolwConvexHull(P)

input 平面点集P.

Output 由 $#(S) 的顶点沿顺时针方向排列的队列$

1:E = 空集

2:For(每一有序对(p,q)属于P,p!=q)

3:           do vaild  = true

4:                  for (除p,q 外的所有点r属于P)

5:                        do if (r位于p ,q所确定的有向直线的左侧)

6:                                then vaild  = false

7:                   if (vaild) then 将有向边pq 加入到E

8:    根据集合E中的各边,找出凸包的所有顶点,并按照顺时针方向将他们组织为列表$

复杂度分析:一共需要检查n^2  -  n 对点,每一对点,要检查其他的n-2个点。时间复杂度为O(n^3) 哈哈,别想了,放弃吧。

算法二:

Algorithm ConvexHull(P)

Input 平面点集P

OutPut 由$(P)的所有顶点沿顺时针方向组成的一个列表

1:   根据x坐标,对所有点进行排序,得到序列p1,p2,p3..........pn,

2:   在$(upper)中加入P1和P2(P1在前)

3:   for (i=3 to n)

4:        do 在$(upper)中加入Pi

5:              while ($(upper)中至少还有三个点,而且最末尾的三个点所构成的不是一个右拐)

6:                      do 将倒数第二个顶点从$(upper)中删除

7: 在$(lower)中加入Pn和Pn-1(Pn在前)

8:  for(i=n-2 down to 1)

9:        do 在$(lower)中加入Pi

10:            while ($(lower)中至少还有三个点,而且最末尾的三个点所构成的不是一个右拐)

11:                   do 将倒数第二个顶点从$(lower)中删除

12:将第一个点和最后一个点从$(lower)中删除。(以免构成重复)

13:return $(upper)和$(lower)的连接

14:

15:

16:

posted on 2007-10-10 11:34 小锋 阅读(2861) 评论(0)  编辑  收藏 所属分类: algorithm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值