989488-算法设计与分析-c
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
R
A
=inf{r1|存在 NZ+,对于满足 OPT(I)N 的所有实例 ID, RA(I)r}
前面装箱算法不是最好,应该先装体积大的,后装体积小的。这样使用箱子数会少一点。
到底能改进多少呢?所以改进算法:
FD 算法:
(1)将物体排序,体积从大到小排序。w(a1)w(a2)…w(an),形成非降次序主次表 L={a1, a2, …, an}。 (2)按照表 L 的顺序,以次将物体装入箱子,直到装完为止。
l
k
(tij ) ( j )
j 1
j 1
因为 ti1, ti2, …, til 在一条通路上,所以
l
OPT(I) (t ij )
(*)
j 1
又 OPT(I)
1 m
n
( T j
j 1
)
(**)
n
k
所以:m*NI(I,L)
j 1
(T j
) (m
1)
i 1
(
i
)
,
(***)
NI(I,L)
绝对近似性能比:
RA=inf{r1|所有实例 ID, RA(I)r},可以找到 r。找一个数 r,所 有实例近似性能比都比 r 小,r 最小能小到多少。
RA(I1)=2
RA(I2)=1.3
能够证明 RA(I)2.5, 问题是算法所能够证明的那个近似性能比界最小是多少?那就是绝对近似性能比。
渐进近似性能比:
的数了。
就说算法 A 的近似度为 C ,C 通常是一个常数,就叫常数近似算法。
C 有时也不一定是常数,现在有各种类型的近似算法。
有时可以证明不存在 R A <C 1,现在找到的算法近似度为 C > C1,则人们开始找 比 C 更小的多项式时间近似算法。
下面改进近似度
2。原来:
MST (I) OPT(I)
机器排好序,任务排好序,顺序安排任务。观察:若任务主次 表恰好,则非空闲策略得到的排工表是最优的。
例子:主次表:L={t1, t2, t3, t5, t6, t4, t9, t11, t8, t7, t10}
6
10
9
T2
T4
T7
4
3
8
T10
T1
T5
T8
5
4
5
3
2
T3
T6
T9
T11 两台处理机,则排工情况如下:
3
d(D)< 2 OPT(I)
3
MM(I)d(D)< 2 OPT(I) 下面继续设计近似算法,通过举例说明怎样设计近似算法。
多任务排工问题: 实例: (1)m 个相同的处理器,p1,…,pm。
(2)要在处理器上加工的任务,t1,…,tn,任务 ti 的加工时间为(ti)。
(3)任务之间的半序关系⋖。
1 m
n j 1
(Tj )
(m
k
1)
i 1
(i )
1
=m
n
(T j )
j 1
m 1 m
k i 1
(i ) OPT (I )
m 1 m
l
(Tij )
j 1
OPT(I)+
m m
1
OPT
(
I
)
=(2-
1 m
)OPT(I)
举例子:
L={T1, T2, T3} (T1)=(T2)=10,(T3)=20,任务之间没有半序关系, 则 OPT(I)=20,NI(I, L)=30
例 1:L={a1, a2, a3, a4, a5, a6, a7}
w(a1)=
1 2
,w(a2)=w(a3)=
1 4
2
,w(a4)=
1 4
,w(a5)
=
w(a6)=w(a7)=
1 2
4
A1 1/2+ A4 1/4+ 最优解 A7 1/4-2
FD 解
a2 1/4+2 a3 1/4+2 a5 1/4-2 a6 1/4-2
1/4+ (6m 个)
1/4-2 (12m 个)
1/4-2
1/4-2
1/4+
1/4-2
1/4+2
1/4+
1/2+
1/4+2 1/4+2
1/2+
1/4+ 1/4+
6m
3m
6m
2m
RFD(I)=11/9, RFD11/9,
RFD
11
9
,例子自己看吧。
1/4-2 1/4-2 1/4-2 1/4-2
3m
§7.2:近似算法设计 满足三角不等式的货郎问题: 实例:城市集合 C={c1,c2,…,cm}, 城市之间距离:d(ci,cj)Z+, d(ci,cj)+d(cj,ck)d(ci,ck), ci, cj, ckC。相当于给定满足三角不等
式边长的图 G 。将城市看 成图 G 的点, G = (V, E),V =
<2。主要改进第二步。
前面性质:T 中度数为奇数的点的个数为偶数个。实际上不 用复制每条边得到欧拉图,只需要加上一半条数的边就能形
成欧拉图。求最小对集就行,能量最小的配对,权值最小
给定带权的图,和图中偶数个点,求图中权最小的顶点对集
是多项式时间可解的。将前面的第 2 步改为: 2.1:设树 T 的奇度 数点为 v1,v2,…,v2t,在 G 中 求点集 {v1,v2,…,v2t}的最小对集 Ep={e1,e2,…,et} E。ei=(vi[1],vi[2])。这 是多项式时间可解的。
才能开始加工 tj。
这个问题前面没有讲过,没有半序关系,是 NP-C,有半序关 系也是 NP-hard,可以证明。 说明:
(1)任务主次表:L={ti1, ti2,…,tin},最后任务的排工情况与主次 表有关。
(2)若要排工 ti,必须 ti 任务之前的任务全部完成后才行。 计算排工的算法如下:L = { ti1, ti2,…, tin },非空闲算法。 step1:开始所有处理机空闲,所有任务未加工。 Step2:对 L 从左到右扫描,判定每个任务 tj 是否处于待加工。 若 tj 处于待加工,则将 tj 安排到下标最小的空闲处理机 Pi 上加 工。直到所有任务加工完。
g d
e f
欧拉回路:acbcdedgfghgdca 抄近路:acbdegfha
h g
f
c2 d e
b
c d e
算法:MST(minimum spanning tree algorithm) step1 对 G 调用最小生成树算法得到树 T=(V, ET)。 step2 复制 T 的每条边得到欧拉图 D=(V, ED) step3 在 D 中求欧拉回路 v(1),v(2),…,v(k),…,v(2m-2)v(1)。 step4 抄近路得到货郎旅游 v(1)=v(1),v(2),…,v(k),…,v(m)v(1) 定理:RMST(I)<2。 证明:w(•)表示权值。
上次内容:
(1)什么是绝对近似算法,存储最多程序问题的多项式时间绝对近似算法。
(2)背包问题和最大独立集问题都不存在绝对多项式近似算法。
A(I )
OPT (I )
(3)近似算法,近似性能比。近似度。RA(I)= OPT (I ) 。RA(I) = A(I )
(4)背包问题和装箱问题的近似度为 2 的近似算法。RA 2。
2.2:将 Ep 加入到 T 中形成欧拉图 T1 改进的算法称为 MM 定理 7.8:对满足三角不等式的货郎问题任意实例 I,
MM (I) OPT (I)
3 2
。
例子:
2
b
1
c
2
1
1
3
a
2 2
d
21
1
1
2
f
1
e
2
b
1
c
1
a 1
1 d
1
b
1
c
1 1
a 1
d 1
f e
b
1
c
1 a
d 2
2 1
f e
欧拉回路:abcedcfa
(1)w(T)<OPT(I)
(2)w(D)<2OPT(I)
MST (I )
(3)MST(I)w(D)<2OPT(I),所以 OPT (I ) <2。
什么是欧拉图:每个点的度数为偶数。
任意图的性质:奇数度点的个数为偶数个。
一个算法 A 说明好和坏,要找到一个界 C ,使得 R AC ,通常不能找到比 C 更小
f e
抄近路得到:abcedfa,说明这个办法未必绝对能够求到最优解。
下面证明定理 7.8,
d(T)<OPT(I),这一步没问题,画个圈,去掉一条边是一棵树。
d(Ep)
1 2
OPT(I),还是要画圈说明道理。
v2 v3
v1
v4
1
若 v1v2,v3v4 是最小对集,则 d(v1,v2)+d(v3,v4) 2 OPT (I )
5
6
3
10
P1
T1
T2
T5
T4
4
5
23
P2
T3
T6
T9 T11
T8
9
4
T7
T10
8
非空闲算法得到完成任务时间为:37=NI(I,L) 若主次表为:L={T1, T2, T3, T5, T4, T6, T9, T8, T7, T11, T10},非空闲算法排工使所有任务完成所需 要时间为 34。
定理 7.9:对于多任务排工问题任意实例 I,任意主次表 L,有:
{v1,v2,…,vm} 询问:求城市排列:c(1)c(2)…c(m),满足货郎旅游长度最短。 *什么是欧拉图:每个点的度数为偶数。 *任意图的性质:奇数度的点的个数为偶数个。 *欧拉回路多项式时间可解的。走遍所有边但边不重复的点序
列。点允许重复。举个例子
a
1
b
a
h h
c
g
d
g
1
e
f
f
a
b
a
b
h c
P1 T1
T2
T5
T4
9
4
T7
T10
1
P2
2
4
5
T3
T6
23 T9 T11
3
8 T8
A 中每个区间所有机器非空闲,B 中每个区间至少有一台机 器空闲。
设 B={1,2,…,k},显然i,j 不相交。 (i)和(Tj)分别表示对应区间段的时间长度。 建立半需关系图,在半序关系图中存在一条通路,Ti1,Ti2,…,Til, 该通路上任务对应的加工时间子区间覆盖子区间:1,2,…,k。 所以,T1,T2,T4,T7,T10 *这个要说明一下为什么,这回真是有点搞清楚了,这条通路 肯定存在,要证明的。若通路上一任务前面的所有任务都没在 一个空闲区间安排,则在此空闲区间安排这个任务即可。
定理 7.6:对于装箱问题任意实例 I,非降次序主次表 L,FD 算法的近似性能比为:
FD(I)
11 9
OPT
(
I
)
+4,存在足够大的实例
I,FD
算法的性能估计:FD(I)
11OPT(I 9
)
由此可以说明:
RFD
11 9 +。基本锁定渐进近似性能比了。
这个定理不证了,只举个例子。说明渐进近似性能比为 11/9。
NI (I , L)
OPT (I ) =2-1/2
1
例子说明上面的界不能在小了。RNI(I)=2- m 显然解的好坏,与给定任务主次表关系很大。如果主 次表对了,排工出来的是最优解。
*下面一个问题:独立任务排工。 前面的多任务排工问题中,任务和任务之间没有半序关系。 就是独立任务排工。 任务:T1,T2,…,Tn,相应的加工长度:t1,t2,…,tn。下面算法思 想是先排时间长的,后排时间短的。 算法 LPT Step1 : 将 任 务 排 序 使 : 形 成 主 次 表 : L={T1,T2,…,Tn} , t1t2…tn。 Step2:对主次表从 1 到 n 扫描,若有空闲机器,则将任务安 排到空闲机器上加工。直到完成。
NI (I , L) OPT (I )
2
1 m
。m
为处理机台数。
证明:
(1)所有任务加工完成的时刻前,m 台机器不可能同时空闲。
(2)在某时刻一台机器由空闲变忙加工 tj,此时肯定是某台处理机 加工任务 ti 的完成时刻。 将[0, NI(I,L)]区间内的时间分为两个区间 A 和 B。
5
6
3
10
询问:给出加工任务排工表(ti),使在最短时间内完成全部任务。
满足下述条件: (1)每台处理机不能同时加工两个或两个以上任务。 (2)每个任务可以安排在任意处理机上加工,必须在一台处理机上 连续加工完成。
(3)若任务 ti 和 tj 满足:ti⋖tj,则(ti)+(ti)(tj)只有 ti 加工完成后
最优解
1/4+2 1/2+
1/4-2 1/4-2 1/4+ 1/4+2
1/4-2
另外一个例子:
W
(ai
)
1 ,1 i 6m 2 1 2 ,6m i 12m 4 1 ,12m i 18m
,30m 个物体,体积如左。
4
1 4ቤተ መጻሕፍቲ ባይዱ
2
,18m
i
30m
1/2+ (6m 个)
1/4+2 (6m 个)
例子:
L={T1,T2,T3,T4,T5,T6} (t1,t2,t3,t4,t5,t6)=(8,7,6,5,4,3) 三台处理机。排工结果为:
T1
8 T6 11
P1
T2
7
T5
P2
P3
T3
6
T4
这个算法的时间复杂度为 O(nlogn),多项式算法。
定理 7.10:独立任务排工问题的任意实例 I,采用近似算法 LPT 求解,有: LPT (I ) 4 1 OPT (I ) 3 3m 证明: (1)当 m=1 时,定理结论为真,结论显然是对的,就 1 台机器。 (2)下面假设 m>1。 观察性质: (1)首先可以假设最后完成的任务是 tn,为什么,因为若最后一个任务为 tk,则只考虑前 k 个任务 即可。n-k 个任务不管。若前 k 个任务满足结论,则前 n 个任务当然也满足结论。 取前 k 个任务形成实例 I1,则 OPT(I)OPT(I1),LPT(I)=LPT(I1)