- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
<<算法设计与分析 >>
实验报告之
<<算法设计与分析
<<算法设计与分析 ?实验报告
-
- PAGE # -
<<算法设计与分析
<<算法设计与分析 >> 实验报告
PAGE
PAGE # -
实验
分治算法
一、实验目的
1.掌握分治算法的设计思想与方法,2.熟练使用高级编程语言实现分治算法,
1.
掌握分治算法的设计思想与方法,
2.
熟练使用高级编程语言实现分治算法,
3.4.实现基于枚举方法的凸包求解算法5.实现基于Graham-Scan勺凸包求解算法6.实现基于分治思想的凸包求解算法
3.
4.
实现基于枚举方法的凸包求解算法
5.
实现基于Graham-Scan勺凸包求解算法
6.
实现基于分治思想的凸包求解算法
7.
对比三种凸包求解算法
通过对比简单算法以及不同的分治求解思想,体验分治算法。
二、实验内容
三、实验过程及结果
3.1算法主要步骤及代码
三种算法同时用到的凸包输出函数:
tfef rtakeCMOKtf)!
xjnin Point ' anf'), float! * inf J)
xjMK Point! floflff'lnf), flMf('inf')} --P 1 CH!
P.M - x_miri P
P-X - X-iraX.K! x_max P
SU, SL [],(]
P CH;
Po int. t ros sMult Iply (n, P>
SU.Bppend(P)
SL.Mpen"(卩 J
SU.sorU戟ey lufrbtia x:x.ir, revarse True) SL?iort怙社/cx.x, neverse-F^lse)
CHO []
CHOpappendix jnln] CHO.extend(St)
CHQ.extendfSUl
CHU
1.基于枚举的方法的凸包求解算法
gstdtltBeThadcfef
gstdtltBeThad
cfef CrossWuUlpLy( oi, pi, pJ h
(p2rX pl.x ) ( pl+y 〕 ( I ( p3?x pI.K I
若P在三角形内部,则:直雪ABfl會+ *g(A.B,P>0g(A,BP)<0E(A.B.P)>OPeAABCg(A.B.P)- g(A,B,C) iO g(ACP} g(A.C,B) >0 g(B.CP> g(B.CA) >0e律启.PpOZ\b5
若P在三角形内部,则:
直雪ABfl會+ *
g(A.B,P>0
g(A,BP)<0
E(A.B.P)>O
PeAABC
g(A.B.P)- g(A,B,C) iO g(ACP} g(A.C,B) >0 g(B.CP> g(B.CA) >0
e律启.PpO
Z\b
5 * g(A,&.P)-0
g(A?B,P)<0
设三角形三点 A(x1,y1), B(x2,y2), C(x3,y3),已知点 P(x,y)
I
p与C在AB同侧
P与A在BC同侧
P与B在CA同侧
Jt ft Br uteF orceC H(g)i
L l ar HS'Cmg Do
ir英中=点^^^于其他三庸?咸的三用理内Then 从Q中K除谏点
2.
3.
def BruteForceCHtG*): CH [P P丄Q】
aef PoifitKnnerAflCtfl, u,「P): PxAB PxBC PkCA
Pom.CrossMultiplylA, B, PJ Point,CrossMultiply(B, C, P)
PointsCrassMultiplyfCj A, P)
CxAB AxBC BkCA
F*oint,CrossMjXtip^ytAj G, CJ PointiCrossHjltipVytej C, A) Paint,CrassMuItlplyfC, A,引
PxAB CkAB
F; I
PxBC AxK 0
PmCA BxCA e
Q:BB0:A:
Q:B
B
0:A:
0: C B
A:
0:C
0:
C
P B P A:
ptsTnABC
ptsTnABC
PolntInnerAeC(A,D,C,P}
PisInABC:
□Hr removeCP)
CH
2基于Graham-Scan的凸包求解算法
1)2)
1)
2)
3)
4)
准备堆栈:建立堆栈 S,栈指针设为t,将0、1、2三个点压入堆栈 S ;
对于下一个点i,只要S[t-1]、S[t]、i不做左转,就反复退栈;将 i压入堆栈S
堆栈中的点即为所求凸包; 耳 H Graham-Scan(0
1.血私屮沪殖* JEp*】
人*JI轟戸寵讨为)奏申M
3.4.5.6.7,8.Push(p0 A>; P 11血?”
3.
4.
5.
6.
7,
8.
While N
文档评论(0)