第4章_贪心算法_作业
第4章贪心算法习题(免费阅读)

算法实现题4-5 程序存储问题
数据输入:
第一行是2 个正整数,分别表示文件个数n和磁带的长 度L。接下来的1 行中,有n个正整数,表示程序存放在磁 带上的长度。
结果输出: 最多可以存储的程序数。
输入示例
6 50
2 3 13 8 80 20 输出示例
5
i 012345
x 2 3 13 8 80 20 7
3
算法实现题4-5 程序存储问题
问题描述: 设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。
程序i存放在磁带上的长度是 li,1 ≤ i ≤ n。 程序存储问题要求确定这n 个程序在磁带上的一个
存储方案,使得能够在磁带上存储尽可能多的程序。 编程任务:
对于给定的n个程序存放在磁带上的长度,编程计 算磁带上最多可以存储的程序数。
532.00
10
算法实现题4-6 最优服务次序问题
double greedy( vector<int> x) {
int i,n=x.size(); sort(x.begin(),x.end()); for(i=1;i<n;++i)
x[i] += x[i-1]; double t=0; for(i=0;i<n;++i) t+=x[i]; t /= n;
算法实现题4-5 程序存储问题
int greedy( vector<int> x, int m){
int i=0, sum=0, n=x.size();
sort(x.begin(),x.end());
while(i
if(sum <= m) i++;
贪心算法练习题

贪心算法1.喷水装置(一)描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。
输入第一行m表示有m组测试数据每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,随后的一行,有n个实数ri,ri表示该喷水装置能覆盖的圆的半径。
输出输出所用装置的个数样例输入252 3.2 4 4.5 6101 2 3 1 2 1.2 3 1.1 1 2样例输出25根据日常生活知道,选择半径越大的装置,所用的数目越少。
因此,可以先对半径排序,然后选择半径大的。
另外,当装置刚好喷到矩形的顶点时,数目最少。
此时只要装置的有效喷水距离的和不小于20时,输出此时的装置数目即可。
2.喷水装置(二)时间限制:3000 ms | 内存限制:65535 KB难度:4描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水装置i喷水的效果是让以它为中心半径为Ri的圆都被润湿。
请在给出的喷水装置中选择尽量少的喷水装置,把整个草坪全部润湿。
输入对于每一组输入,输出最多能够安排的活动数量。
每组的输出占一行样例输入221 1010 1131 1010 1111 20样例输出12提示注意:如果上一个活动在T时间结束,下一个活动最早应该在T+1时间开始。
解题思路:这是一个贪心法中选择不相交区间的问题。
先对活动结束时间从小到大排序,排序的同时活动的起始时间也要跟着变化。
而且,结束时间最小的活动一定会安排,不然这段时间就白白浪费了。
后一个活动的起始时间如果比前一个活动的结束时间大,即两个活动没有相交时间,就把这个活动也安排上。
贪心算法程序设计

贪心算法程序设计贪心算法程序设计1. 什么是贪心算法贪心算法(Greedy Algorithm)是一种常见的算法思想,它在每一步选择中都采取当前状态下的最优选择,从而希望最终达到全局最优解。
贪心算法的核心思想是局部最优解能导致全局最优解。
2. 贪心算法的基本步骤贪心算法的基本步骤如下:1. 定义问题的优化目标。
2. 将问题分解成子问题。
3. 选择当前最优的子问题解,将子问题的解合并成原问题的解。
4. 检查是否达到了问题的优化目标,如果没有达到,则回到第二步,继续寻找下一个最优子问题解。
5. 在所有子问题解合并成原问题解后,得到问题的最优解。
3. 贪心算法的应用场景贪心算法的应用非常广泛,几乎可以用于解决各种优化问题。
以下几个常见的应用场景:1. 零钱找零问题:给定一定面额的纸币和硬币,如何找零使得所需纸币和硬币的数量最小?2. 区间调度问题:给定一些活动的开始时间和结束时间,如何安排活动使得可以办理的活动数量最大?3. 背包问题:给定一些具有重量和价值的物品,如何选择物品使得背包的总价值最大?4. 最小树问题:给定一个带权无向图,如何找到一棵树,使得它的边权之和最小?5. 哈夫曼编码问题:给定一组字符和相应的频率,如何构造一个满足最低编码长度限制的二进制编码?4. 贪心算法的优缺点贪心算法的优点是简单、高效,可以快速得到一个近似最优解。
而且对于一些问题,贪心算法能够得到全局最优解。
贪心算法的缺点在于它不一定能够得到全局最优解,因为在每一步只考虑局部最优解,无法回溯到之前的选择。
5. 贪心算法的程序设计在使用贪心算法进行程序设计时,通常需要以下几个步骤:1. 定义问题的优化目标。
2. 将问题分解成子问题,并设计子问题的解决方案。
3. 设计贪心选择策略,选择局部最优解。
4. 设计贪心算法的递推或迭代公式。
5. 判断贪心算法是否能够得到全局最优解。
6. 编写程序实现贪心算法。
6.贪心算法是一种常见的算法思想,它在每一步选择中都采取当前状态下的最优选择,从而希望最终达到全局最优解。
第4章 贪心算法(1)活动安排问题

4.1 活动安排问题
活动安排问题是可以用贪心算法有效求解的很 好例子。
该问题要求高效地安排一系列争用某一公共资 源的活动,使得尽可能多的活动能兼容地使用 公共资源。
4
问题描述
设有n个活动的集合E={1, 2, …, n},其中每个 活动都要求使用同一资源,而在同一时间内只 有一个活动能使用这一资源。
2
贪心算法
例2:若上述硬币面值改为:
一角一分、五分和一分 现在要找给顾客一角五分钱,如何给出硬币? 答案:错:1个一角一分,4个一分
对:3个五分
虽然贪心算法不能对所有问题都得到整体最优 解,但对许多问题它能产生整体最优解。
在一些情况下,即使贪心算法不能得到整体最 优解,其最终结果却是最优解的很好的近似解。
ቤተ መጻሕፍቲ ባይዱ17
0-1背包问题
给定n种物品和一个背包。物品i的重量是wi, 其价值为vi,背包的容量为c。应如何选择装 入背包的物品,使得装入背包中物品的总价 值最大?
说明:在选择装入背包的物品时,对每种物 品i只有2种选择,即装入背包或不装入背包。 不能将物品i装入背包多次,也不能只装入部 分的物品i。
16
3、贪心算法与动态规划算法的 差异
贪心算法和动态规划算法都要求问题具有最 优子结构性质,这是两类算法的一个共同点。
对于具有最优子结构的问题应该选用贪心算 法还是动态规划算法求解?
是否能用动态规划算法求解的问题也能用贪 心算法求解?
下面研究2个经典的组合优化问题,并以此 说明贪心算法与动态规划算法的主要差别。
每个活动i都有一个要求使用该资源的起始时 间si和一个结束时间fi,且si <fi 。
5
问题描述
如果选择了活动i,则它在半开时间区间[si, fi) 内占用资源。若区间[si, fi)与区间[sj, fj)不相交, 则称活动i与活动j是相容的。也就是说,当si≥fj
算法分析贪心算法习题

如果一个游戏没能在规定期限前完成, 则要从奖励费m元中扣去一部分钱wi, wi为自然数。不同的游戏扣去的钱数是 不一样的。
问题描述
当然,每个游戏本身都很简单,保证每 个参赛者都能在一个时段内完成,而且 都必须从整时段开始。主持人只是想考 考每个参赛者如何安排组织自己做游戏 的顺序。
作为参赛者,小伟如何赢取最多的钱!
删数问题
通过键盘输入一个高精度的n(n≤240)位正整数N, 去掉其中任意s个数字后,剩下的数字按原左右次序 将组成一个新的正整数。编程对给定的n和s,寻找 一种方案,使得剩下的数字组成的新数最小。 输入:N
s 输出:最后剩下的最小数
样例输入:178543 S=4
样例输出:13
问题分析
由于正整数N的有效位数最大可达240 位,所以可以采用字符串类型来存储N
解题思路
这个题目思路很容易想,肯定是优先使 用半径大的喷水装置。因为半径越大的 喷水装置所能覆盖的范围就越大。
其实这个确定优先选择哪一个的过程就 是贪心选择的过程。
所以本题就是先对所有的喷水装置半径 排序,计算出,每个喷水装置所能覆盖 的长度。每次都选出当前半径最大的, 直到能覆盖完所有的草地。
智力大冲浪
【问题描述】 小伟报名参加电视台的智力大冲浪节目。本 次挑战赛吸引了众多参赛者,主持人为了表 彰大家的勇气,先奖励每个参赛者m元。先 不要太高兴!因为这些钱还不一定都是你的! 接下来,主持人宣布了比赛规则:
问题描述
首先,比赛时间分为n个时段,它又给 出了很多小游戏,每个小游戏都必须在 规定期限 ti 前完成(1<=ti<=n)。
贪心算法习题
排队接水
多机调度问题贪心算法c语言

多机调度问题贪心算法c语言一、引言多机调度问题是指将一组作业分配给多台机器,使得完成所有作业的时间最短。
在实际生产中,多机调度问题是一个常见的优化问题。
贪心算法是解决多机调度问题的一种有效方法。
本文将介绍贪心算法在C语言中的应用。
二、问题描述假设有n个作业需要分配给m台机器进行加工处理,每个作业需要的时间不同,每台机器的处理速度也不同。
现在需要设计一个算法,将这些作业分配给这些机器进行加工处理,并使得完成所有作业所需时间最短。
三、贪心算法思路贪心算法是一种基于局部最优解来构造全局最优解的思想。
对于多机调度问题,我们可以采用以下贪心策略:1. 将所有作业按照所需时间从大到小排序;2. 将第一个作业分配给第一台机器;3. 对于剩余的作业,选择当前处理时间最短的那台机器进行分配;4. 重复步骤3直到所有作业都被分配完毕。
四、C语言实现下面是C语言实现多机调度问题贪心算法的代码:#include <stdio.h>#include <stdlib.h>#define MAX_JOB 1000#define MAX_MACHINE 1000int cmp(const void *a, const void *b) {return *(int *)b - *(int *)a;}int main() {int n, m, job[MAX_JOB], machine[MAX_MACHINE] = {0}; scanf("%d%d", &n, &m);for (int i = 0; i < n; i++) {scanf("%d", &job[i]);}qsort(job, n, sizeof(int), cmp);for (int i = 0; i < n; i++) {int min_time = machine[0], min_index = 0;for (int j = 1; j < m; j++) {if (machine[j] < min_time) { min_time = machine[j]; min_index = j;}}machine[min_index] += job[i]; }int max_time = machine[0];for (int i = 1; i < m; i++) {if (machine[i] > max_time) { max_time = machine[i];}}printf("%d\n", max_time);return 0;}五、代码解析1. 宏定义和头文件引入:```#define MAX_JOB 1000#define MAX_MACHINE 1000#include <stdio.h>#include <stdlib.h>```定义了最大作业数和最大机器数,并引入了标准输入输出库和标准库。
贪心算法—多机调度

贪心算法-多机调度一、问题描述设有n个独立的作业,由m台机器进行加工处理,作业i所需的处理时间为t(i)。
约定,任何作业可以在任何机器上加工处理,但未完成前不允许中断处理。
任何作业不能拆分成更小的子作业。
多机调度问题要求给出一种作业调度方案,使n个作业在尽可能短的时间内完成。
二、算法分析1当n<=m时,将机器i的【0~t(i)】时间分配给作业i即可。
2当n>m时,首先将n个作业按照时间从大到小排列。
然后照此顺序将作业分配给空闲的处理机即可。
3创建3个类:JobNode类,MachineNode类, MinHeap类分别用于作业信息,机器信息,对机器类型的堆处理三、代码#include<iostream>using namespace std;#define Max 15template <class Type>class MinHeap{public:MinHeap(int ms);~MinHeap();void Insert(const Type& x);void DeleteMin(Type& x);protected:void FilterDown();//自顶向下构造堆void FilterUp();//自底向上构造堆private:Type *heap;int length;};////////////////////////////////////////template <class Type>MinHeap<Type>::MinHeap(int m){heap=new Type[m+1];length=0;}////////////////////////////////////////template <class Type>void MinHeap<Type>::Insert(const Type& x) {heap[++length]=x;FilterUp();}////////////////////////////////////////template <class Type> template <class Type>void MinHeap<Type>::FilterUp(){//自底向上进行调整int i=length,j=i/2;//父节点的编号Type temp=heap[i];while(i>1){if(temp>=heap[j])break;//找到了相应的位置else{heap[i]=heap[j];i=j;j=i/2;}}heap[i]=temp;}////////////////////////////////////////template <class Type>void MinHeap<Type>::DeleteMin(Type &x){x=heap[1];heap[1]=heap[length];length--;FilterDown();}////////////////////////////////////////template <class Type>void MinHeap<Type>::FilterDown(){int i=1,j=i*2;Type temp=heap[i];while(j<=length){if(j<length && heap[j]>heap[j+1])j++;//如果左右子树都存在,找出最小者,用j标记if(temp<heap[j])break;//找到了相应的位置else{heap[i]=heap[j];i=j;j=2*i;}}heap[i]=temp;}////////////////////////////////////////template <class Type>MinHeap<Type>::~MinHeap(){delete[] heap;}////////////////////////////////////////class JobNode{friend void Greedy(JobNode *,int ,int);friend void main(void);public:operator int() const {return time;}int ID,time;};class MachineNode{friend void Greedy(JobNode *,int ,int); public:operator int() const {return avail;}int ID,avail;};void Sort(JobNode a[],int n){int i,j,k;JobNode tmp;for(i=1;i<n;i++){k=i;for(j=i+1;j<=n;j++){if(a[j].time<a[k].time) k=j;}if(k!=i){tmp=a[i];a[i]=a[k];a[k]=tmp;}}}void Greedy(JobNode a[],int n,int m){if(n<=m){cout<<"为每个作业分配一台机器."<<endl;return;}Sort(a,n);MinHeap<MachineNode>H(m);MachineNode x;for(int i=1;i<=m;i++){x.avail=0;x.ID=i;H.Insert(x);}for(i=n;i>=1;i--){H.DeleteMin(x);cout<<"\n将机器"<<x.ID<<"从"<<x.avail<<"到"<<(x.avail+a[i].time)<<"的时间段分配给作业"<<a[i].ID<<endl;x.avail+=a[i].time;H.Insert(x);}}void main(){int i;int job_cnt; //作业的数目float machine_cnt;//机器数目int Time_of_all=0;JobNode a[Max];//作业所需要的时间// MachineNode b[Max];cout<<"==========多机调度问题===========\n";cout<<"输入机器个数:";cin>>machine_cnt;cout<<"输入作业个数(小于15):";cin>>job_cnt;for(i=1;i<=job_cnt;i++){cout<<"\n请输入第"<<i<<"个作业处理时间:";cin>>a[i].time;a[i].ID=i;}Greedy(a,job_cnt,machine_cnt);}四、结果截图五.实验总结多机调度问题是生活中比较典型的例子,根据经验我们很好确定贪心算法的贪心标准,但是落实到编程,还是有点不够得心应手,还需要加强自己的编程能力。
4-贪心法

应用实例
活动安排问题—算法设计与分析
template<class Type> void GreedySelector(int n, Type s[], Type f[], bool A[]) { A[1] = true; int j = 1; for (int i=2;i<=n;i++) { if (s[i]>=f[j]) { A[i]=true; j=i; } else A[i]=false; } }
贪心法的正确性问题
针对具体问题不同,贪心策略的选择可能有多种 ,如何选择合适的贪心策略并证明该策略的正确 性是贪心算法设计中的一个关键问题。 一般可以通过对算法步数的归纳或通过对问题规 模的归纳来证明贪心法的正确性。
应用实例
活动安排问题
有n个活动申请使用同一个礼堂,每项活动有一个开始时间和一 个截止时间,如果任何两个活动不能同时举行,问如何选择这 些活动,从而使得被安排的活动数量达到最多? 设S={1, 2, …, n}为活动的集合,si和fi分别为活动i的开始和截止 时间,i=1, 2, …, n。定义 活动i与j相容:si ≥ fj或sj ≥fi, i≠j 求S最大的两两相容的活动子集。 蛮力法 动态规划方法
若硬币的面值改为一角一分、五分和一分,要找给顾客的 是一角五分,情况如何?
贪心算法的基本思想
顾名思义,贪心算法总是作出在当前看来最好的 选择。也就是说贪心算法并不从整体最优考虑, 它所作出的选择只是在某种意义上的局部最优选 择。 贪心算法不能对所有问题都得到整体最优解,但 对许多问题它能产生整体最优解。 在一些情况下,即使贪心算法不能得到整体最优 解,其最终结果却是最优解的很好近似。
4—贪心法 Greedy Approach
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课后练习
• 练习3:活动安排问题。假设有9个活动申请使用1 个会议室,每个活动的开始时间和终止时间如下。 用贪心算法设计一个活动安排表,要求要尽可能 的多安排活动。会议室不允许被多个活动同时占 用。
活动序号 起始时间 结束时间 1 2 5 2 1 5 3 2 8 4 5 10 5 7 11 6 4 13 7 6 15 8 8 22 9 15 24
活动序号
起始时间 结束时间
1
2 5
2
1 5
3
2 8
4
5 10
5
7 11
6
4 13
7
6 15
8
8 22
9
15 24
• 根据贪心算法,第1个被安排的活动为1号活动,因为它的 结束时间(时刻5)最早。(贪心选择性质) • 然后每次都选取起始时间最接近于上一次活动的结束时间 的活动,所以分别依次选择4号活动(时刻10结束)、9号 活动(时刻24结束),则最优解为:( 1, 4, 9 )。 • 显然,最优解不唯一,比如: ( 2, 4, 9 )。但显然,用贪心 策略求出的可行解是最优的。
课后练习:算法分析题
• 算法分析题4-6(教材第128页):字符a~h出现 的频率恰好是前8个Fibonacci数,它们的哈夫曼 编码是什么? • 解答: Fibonacci数列
1 n0 F n 1 n1 F n 1 F n 2 n 1
前8个Fibonacci数为: 1, 1, 2, 3, 5, 8, 13, 21, ……
q j p j-1 q j q j-1 j j-1
• 由此可以推得: xq – xp ≤ d,即旅行者能够选择在1天之 j j-1 内走完从xp 到xq 的所有路程;因此他们最后停留的宿营地 j-1 j xp 只能比xq 更远。命题得证!
j j
• 设R = { xp , …, xp }表示由贪心算法选择的停止点的集合, 1 k 根据反证法,假设存在一个更小的停止点的有效集合:把 这个较小的集合称为S = { xq , …, xq },显然此时m<k。
V2
3
5
5
4
V4
2
6
V5 3
V6
课后练习
• Kruskal算法: V1 V2 1 V3 V4 V2
6
5 6 V5
V1
5 5 V4
1
V3
3
4
3 V1 1 1 V3 3 V6 5 5 4 3 V6
2
3
V5
4
3 V6
2
V2 V 2
6
5 6 V5
V V44
3
• Prim算法:
2
• 练习6:一队徒步旅行者要从A地到B地,两地间距离为L公 里。他们每天最多可以走d公里(与地形、天气条件等无 关),中间需要就地宿营。 • 假定这些潜在的宿营地点位于起点A地的距离为x1, x2, ……, xn的地方,显然它们之间的距离小于等于d,称这些地点(停 止点)是有效的。 • 于是,一组停止点是有效的,如果人们只能在这些地方宿营 并且仍旧能顺利完成旅行。则必须假设n个停止点所组成的 集合都是有效的;否则就没法走完整个路程。 • 问题1:假设两地距离为100公里,潜在的宿营地点为{ 6, 14, 30, 37, 48, 65, 73, 76, 88, 90,94 }。旅行者每天最多走18公里。 给出最优(最少)的有效宿营地组合(最少几天能走完)。 • 问题2:证明该算法的正确性(解的最优)。
课后练习
• 问题1:假设两地距离为100公里,潜在的宿营地 点为{ 6, 14, 30, 37, 48, 65, 73, 76, 88, 90,94 }。旅行 者每天最多走18公里。给出最优(最少)的有效 宿营地组合(最少几天能走完)。 • 解答:根据贪心算法,潜在的宿营地点的选取应 该遵循每天尽量多走(但不多于18公里)的原则, 以期用最短的时间走完100公里的行程。
100
2
3
{0,1,3}
{0,1,3,2}
3
2
10
10
50
50
30
30
90
60
4
{0,1,3,2,4}
4
10
50
30
60
• 算法正确性证明:教材114页-115页
课后练习
练习5:最小生成树问题。
① 用Prim或者Kruskal算法求出下图中的最小生成树。
② 证明该算法的正确性。(教材116页) 6 V1 1 V3 5
j j
• 证明I:贪心算法在每一天到达的停止点j比在其它解下到 达的停止点更远,即: 对每个j = 1, 2, …, m,有xp ≥xq
j j
• 证:j = 1的情况直接从贪心算法的定义得出:旅行者第1天 在停止之前走得尽可能远。
• 现在令j > 1并且假设这个断言对所有的i < j为真,那么 xq – xq ≤ d • 因为S是停止点的有效集合,且根据归纳假设,由xp ≥xq j-1 j-1 有: x –x ≤x –x
课后练习
• 设R = { xp , …, xp }表示由贪心算法选择的停止点的集合, 1 k 根据反证法,假设存在一个更小的停止点的有效集合: 把这个较小的集合称为S = { xq , …, xq },显然此时m< 1 m k。
• 证明I:贪心算法在每一天到达的停止点j比在其它解下 到达的停止点更远,即: 对每个j = 1, 2, …, m,有xp ≥xq
• 从而,不可能有m < k,即存在一个更小的停止点的有效集 合(较小的集合)S = { xq , …, xq }的假设是不成立的!
1 m
• 所以贪心算法产生一个最小的有效停止点集合得证!
End
课后练习
练习4:单源最短路径问题。求下面连通图中从源 顶点v0到其它各顶点的最短路径。 ① 列出源顶点到其它顶点的最短路径长度和路径中 顶点序列。 ② 证明该算法的正确性。
迭代
S2]
dist[3]
dist[4]
初始
1
{0}
{0,1}
1
10
10
maxint
60
30
30
100
源点 14 30 48 65 76 94
目的点
B地
A地
需要7天才能走完,这与[100/18]+1 = 6结果符合!
课后练习
• 问题2:证明该算法的正确性(解的最优)。 • 解答:这个策略有可能是无效的么? • 一个想法:该算法能否保证某一天提早停止就使 后面一些天的宿营地点同步提前。有没有可能真 存在一个解,它故意落在贪心解的后面,然后突 然加速并且越过贪心解?在给出贪心解每天旅行 尽可能远的条件下,它怎样越过贪心解?
1 7 1 4 0 2 0 1 1 1 1 2
e: 0010
g: 01
f: 000
h: 1
课后练习
• 练习2:假设有25分、10分、5分和1分四种硬币, 需要找给顾客2元5角钱,请问用贪心算法可以求 出何种找零方案?该方案是最优的么?为什么? • 解答: – 2元5角 = 250分,按照贪心算法(尽量用面值大 的硬币找零),则需要25分硬币10个即可。 – 该算法是最优的,因为五种硬币的面值中5分是 25分和10分的约数(因数)。
• 则a, b, c, d, e, f, g, h这 8个字符出现的次数依 次为:1, 1, 2, 3, 5, 8, 13, 21次。
0 33 0
54
1
21
20
0 8 0 5 0 3 1 12
1
13
• 以此构造一颗 Huffman树(不唯一) 如右:
• 对应的Huffman编码 为: a: 0011100 b:0011101 c: 001111 d: 00110
1 m
对每个j = 1, 2, …, m,有xp ≥xq
j m m
j
• 由上述命题(已证明),推出xp ≥ xq 式①。 • 现在m < k,那么一定有: xp < L – d 式② ,否则旅行者不 m 必停在xp 。
m+1
• 把两式组合可得: xq < L – d ;但这与假设S是一个有效的 m 停止点集合相矛盾。