利用分治法求解空中飞行管理问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期:2006-04-15
作者简介:应惠芬(1970-),女,浙江仙居人,高级讲师,硕士1
浙江交通职业技术学院学报,第7卷第4期,2006年12月
Journal of Zhejiang T ransportation C ollege V ol 17N o 14,Dec 12006
利用分治法求解空中飞行管理问题
应惠芬1,王桂云2
(11杭州万向职业技术学院,浙江杭州 310023;21浙江交通职业技术学院,浙江杭州 311112)
摘 要:分治法是一种常用的问题求解方法,可以简化问题规模,降低计算复杂度。飞行管理问题实质上属于搜索问题,利用常规方法解决时间耗费大,而利用分治法可以得到很好的解决。
关键词:分治法;计算复杂度;数学模型中图分类号:TP30116;V355
文献标识码:A
文章编号:1671-234X (2006)04-0046-04
0 引 言
随着空中各种飞机数量的增加,飞行安全控制变得尤为重要,要想提高空中飞行的安全系数,其中一个亟需解决的问题就是预先知道空中哪两架飞机之间具有最大碰撞危险。如果知道了这两架具有最大碰撞危险的飞机,我们就预先通知飞行员进行相应的安全飞行,以避免碰撞。从穷举法的角度很容易解决这个问题,但是效率太低,时间复杂度是O (n 2),不符合实际需要,利用分治法分而制之的思想,降低问题复杂度,通过建模求解,把时间复杂度降到O (nlogn ),可以较好地解决实际问题。
1 分治法
分治法基本思想[2]:任何一个用计算机求解的问题时间复杂度都与其规模N 有关。问题的规模越小,越容易直接求解,时间复杂度越少。而当问题规模较大时,时间复杂度会大幅度增加。分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
分治法在每层递归上都有三个步骤:
(1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形成相同的子问题;
(2)解决:若子问题规模较小而容易被解决则直接解决,否则递归地解各个子问题;
(3)合并:将各个子问题的解合并为原问题的解。
2 问题描述
为了便于分析和解决问题,以二维空间为例,用质点代替二维坐标系X -O -Y 中分布n 的架飞机,其坐标分别为:(x 1,y 1),(x 2,y 2)…(x n ,y n ),问题目标是寻找这n 个点中距离最近的两个点坐标及其距离。
3 问题分析及模型建立
利用穷举法求解最简单,求出所有点之间的距
离,再从中找到最小值,但是效率低,不值得推荐。311 一维点集的情况
利用分治法,把集合S 分成两个子集S 1和
S 2,从平衡子问题的角度考虑,尽量使每个集合中
的元素个数相同,然后按照上述方法递归求解每个集合中最近的点。
上述方法中最关键的问题是集合S 1和S 2的合并问题,因为集合S 1和S 2的最接近点对未必就是集合S 的最接近点对。如果组成S 的最接近点对的2个点都在集合S 1或S 2中,则问题容易解决。但是,如果这2个点一个在
S 1中,一个在S 2中,那么对于S 1中任意一点P ,需要和S 2中的大约
n
2
个点计算距离。显然,此时时间复杂度变成O
(n 2),并不比穷举法好到哪里去,主要是合并步骤
消耗时间太多,要想提高效率,必须提高合并速
度,去掉无用合并运算。为了便于分析,先考虑一
图1 一维空间的情况
维空间的情况。
如图1所示把二维集合S 中的n 个点投影到X 轴上,对应n 个实数x 1,x 2,…x n ,点m 取n 个点坐标的中位数,这样集合S 分成2个子集S 1=
{p i |p i ≤m}和S 2={q i |q i >m}。分别用p 、q 表
示S 1、S 2中的点,即有p S 1和S 2中寻找其最接近点对{p 1,p 2}、{q 1,q 2},设集合S 1、S 2和点m 距离最近的点分别是p 3、p 3。则集合S 的最接近点对是{p 1,p 2}、{q 1,q 2}和{p 3,q 3}中距离最短的一对点,即 最短距离δ=min {|p 1-q 1|,|p 2-q 2|,|p 3-q 3|}。 所以,求解一维点集S 中最接近点对及其距离算法如下: Float min-neighbor (S );{ if |S |=1 δ=∞else if |S |=2 δ=|x [2]-x [1]/3x [1…n ]存放的是S 中n 个点的坐标3/else { m =S 中各点的坐标值的中位数; 构造S 1和S 2,使S 1={p i |p i ≤m},S 2 ={q i |q i >m}; δ1=pair (S 1), δ2=pair (S 2); p =max (S 1),q =min (S 2); / 3 搜寻点m 在集合S 1和S 2最邻近的点p 和 q 3 / δ=min (δ1,δ2,|q -p |) } return (δ);} 312 二维空间的推广 此时S 中的点为平面上的点,每个点都有两个坐标值x 和y ,用p -x 和p -y 表示S 中任意一点p 的坐标x 、y 。设为S 中各点x 坐标的中位数,选取直线l :x =m ,把集合S 分成两个元素数目大致相等的子集P 1和P 2,它们分别位于直线l 的左侧和右侧。因为S =P 1∪P 2、P 1∪P 2=o ,所以这种分解满足分治法适用的条件,可以利用分治法求解。 一维情况下,和分割点m 距离δ=min {|p 1-q 1|,|p 2-q 2|}的2个区间(m -δ,m ]、(m , m +δ]中最多各有S 中的一个点,所以这两个点 之间的距离有可能是S 中的最短距离。二维情况 下有些复杂,用p 、q 分别表示集合p 1、p 2中任意一点,对点p 而言,集合p 2中所有点都有可能和其构成最接近点对,所以此时的最接近点对一共有(n/2)3(n/2)=n 2/4对。如果分别计算这n 2/4对点之间的距离,那么算法复杂度为O (n 2), 不符合实际要求。 事实上,用δ表示集合p 1、P 2中最接近点对中的最小值,如图2所示二维空间中,对于P 1中任意一点p 而言,在p 2中有 n 2 个点与之相对应, 它们都是可能和点p 构成最接近点对的候选者,如果一个一个的计算,那么一共需要计算 n 2 4 次, 这样计算复杂度还没有下降。但是P 1和P 2中的 点具有以下稀疏性质:对于P 1中任意一点p ,若与P 2中的点r 构成最接近点对,那么必有|pr |≤δ,在这种情况下,r 点一定落在一个δ×2δ的矩形中,如图2所示,满足这种情况的r 最多有6个[3]。若矩形R 中有多于6个S 中的点,则由鸽舍原理易知至少有一个δ×2δ的小矩形中有2个以上S 中的点,可以算出它们的距离也小于δ,这与δ的意义相矛盾。 7 4第4期 利用分治法求解空中飞行管理问题